1@page shakeshake 分歧争端机 2# 实验介绍 3分歧争端机使用的场景是当出现分歧时,分别摇一摇HaaS EDU K1来摇出一个0到100之间的数字,通过比较谁摇出的数字大来解决分歧的一种方法。本质是通过摇一摇这个动作来随机产生一个数字。这个实验的核心如何通过加速度传感器来检测到摇一摇这个动作,并随机生成一个数字。 4 5 6**显示效果** 7 8<div align=center> 9 <img src="https://img.alicdn.com/imgextra/i2/O1CN019OP4kF22I19ZudgVF_!!6000000007096-1-tps-1200-800.gif" style="zoom:50%;" /> 10</div> 11 12# 涉及知识点 13 14- 三轴加速度传感器的原理和使用 15- 随机数生成的方法 16- OLED绘图 17 18 19# 开发环境准备 20## 硬件 21 开发用电脑一台 22 HAAS EDU K1 开发板一块 23 USB2TypeC 数据线一根 24 25## 软件 26### AliOS Things开发环境搭建 27 开发环境的搭建请参考 @ref HaaS_EDU_K1_Quick_Start (搭建开发环境章节),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。 28 29### HaaS EDU K1 DEMO 代码下载 30 HaaS EDU K1 DEMO 的代码下载请参考 @ref HaaS_EDU_K1_Quick_Start (创建工程章节),其中, 31 选择解决方案: 基于教育开发板的示例 32 选择开发板: haaseduk1 board configure 33 34### 代码编译、烧录 35 参考 @ref HaaS_EDU_K1_Quick_Start (3.1 编译工程章节),点击 ✅ 即可完成编译固件。 36 参考 @ref HaaS_EDU_K1_Quick_Start (3.2 烧录镜像章节),点击 "⚡️" 即可完成烧录固件。 37 38 39 40 41# 硬件介绍 - MPU-6050 42请参考《陀螺仪小球》中的相同章节。 43 44 45# 应用开发 46 本实验通过MPU_Get_Accelerometer去获得三轴加速度传感器的原始值。然后计算出在y方向上和z方向上的差值,作为震动大小的强弱标志。当两个方向上的震动大小都超过了阈值,就认为是一次有效的摇晃,就生成随机数。生成随机的方法直接采用OS自动的rand()方法,他的返回值对100进行取模,保证是一个小于100的数字。然后将这个数据显示在OLED屏幕上。 47 48 49``` 50void shakeshake_task() 51{ 52 while (1) 53 { 54 // 获取三轴加速度信息 55 MPU_Get_Accelerometer(&ax, &ay, &az); 56 // 计算出y轴和z轴方向上的变化量 57 y_change = (ay >= ay_pre) ? (ay - ay_pre) : (ay_pre - ay); 58 z_change = (az >= az_pre) ? (az - az_pre) : (az_pre - az); 59 // 变化量都超过阈值,则进行下一步处理 60 if ((y_change > SHAKE_Y_THRESHOLD) && (z_change > SHAKE_Z_THRESHOLD)) 61 { 62 // 生成100以下的随机数 63 rand_value = rand() % 100; 64 // 将随机数转化为需要显示的字符 65 itoa(rand_value, showstr, 10); 66 // 清除屏幕memory 67 OLED_Clear(); 68 // 画出显示的图标 69 OLED_Icon_Draw(50, 0, &icon_shakeshake_32_32_v2, 1); 70 // 画出显示的字符 71 OLED_Show_String(54, 36, showstr, 24, 1); 72 // 画出左右翻页的图标 73 OLED_Icon_Draw(2, 24, &icon_skip_left, 0); 74 OLED_Icon_Draw(122, 24, &icon_skip_right, 0); 75 // 将屏幕memory显示出来 76 OLED_Refresh_GRAM(); 77 } 78 // 保存本次y轴和z轴方向上的值 79 az_pre = az; 80 ay_pre = ay; 81 // 暂停50ms 82 aos_msleep(50); 83 } 84} 85``` 86