實驗介紹
分歧爭端機使用的場景是當出現(xiàn)分歧時,分別搖一搖HaaS EDU K1來搖出一個0到100之間的數(shù)字,通過比較誰搖出的數(shù)字大來解決分歧的一種方法。本質是通過搖一搖這個動作來隨機產生一個數(shù)字。這個實驗的核心如何通過加速度傳感器來檢測到搖一搖這個動作,并隨機生成一個數(shù)字。
顯示效果
涉及知識點
三軸加速度傳感器的原理和使用
隨機數(shù)生成的方法
OLED繪圖
開發(fā)環(huán)境準備
硬件
開發(fā)用電腦一臺
HAAS EDU K1 開發(fā)板一塊
USB2TypeC 數(shù)據線一根
軟件
開發(fā)環(huán)境的搭建請參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,其中詳細的介紹了AliOS Things 3.3的IDE集成開發(fā)環(huán)境的搭建流程。
本案例的代碼下載請參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》,
> 選擇解決方案:“HaaS EDU K1教育開發(fā)案例合集”
> 選擇開發(fā)板:haaseduk1 board configure
-- 編譯固件可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
-- 燒錄固件可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》。
硬件介紹 - MPU-6050
請參考《陀螺儀小球》中的相同章節(jié)。
應用開發(fā)
本實驗通過MPU_Get_Accelerometer去獲得三軸加速度傳感器的原始值。然后計算出在y方向上和z方向上的差值,作為震動大小的強弱標志。當兩個方向上的震動大小都超過了閾值,就認為是一次有效的搖晃,就生成隨機數(shù)。生成隨機的方法直接采用OS自動的rand()方法,他的返回值對100進行取模,保證是一個小于100的數(shù)字。然后將這個數(shù)據顯示在OLED屏幕上。
void shakeshake_task()
{
while (1)
{
// 獲取三軸加速度信息
MPU_Get_Accelerometer(&ax, &ay, &az);
// 計算出y軸和z軸方向上的變化量
y_change = (ay >= ay_pre) ? (ay - ay_pre) : (ay_pre - ay);
z_change = (az >= az_pre) ? (az - az_pre) : (az_pre - az);
// 變化量都超過閾值,則進行下一步處理
if ((y_change > SHAKE_Y_THRESHOLD) && (z_change > SHAKE_Z_THRESHOLD))
{
// 生成100以下的隨機數(shù)
rand_value = rand() % 100;
// 將隨機數(shù)轉化為需要顯示的字符
itoa(rand_value, showstr, 10);
// 清除屏幕memory
OLED_Clear();
// 畫出顯示的圖標
OLED_Icon_Draw(50, 0, &icon_shakeshake_32_32_v2, 1);
// 畫出顯示的字符
OLED_Show_String(54, 36, showstr, 24, 1);
// 畫出左右翻頁的圖標
OLED_Icon_Draw(2, 24, &icon_skip_left, 0);
OLED_Icon_Draw(122, 24, &icon_skip_right, 0);
// 將屏幕memory顯示出來
OLED_Refresh_GRAM();
}
// 保存本次y軸和z軸方向上的值
az_pre = az;
ay_pre = ay;
// 暫停50ms
aos_msleep(50);
}
}
文檔內容是否對您有幫助?