本次eeworld版没有加速度传感器,不过F4DISCO有啊,那咱就偷懒用DISCO吧,哈哈。F4DISCO上自带的是ST的LIS302DL,用SPI连接(当然也可以选择使用I2C方式),原理图如下:其中PE3选择接口模式(同时也是SPI的片选,注,并未使用硬件PA5_NSS脚),PA5-PA7分别是SCK,MISO和MOSI,也就是板上的SPI1,最高支持10M的通信速度。另有两个中断脚接到了PE0和PE1。
芯片的xyz轴如下图所示,是一个右手螺旋,所以在板上,STlink就是x+,音频输出就是x-;user sw是y+,reset sw是y-;而我们的地球呢,是z-。可是测试结果并不支持以上结论,正好全部相反。横着放,右倾,x是负的,左倾,x是正的。U,y是负的,D,y是正的。
现在要做的事情呢,就是根据倾斜的方向,点亮对应的LED,后期就可以更换为其他应用需要的动作了。用的是F4DISCO的板子,上面的LED分布是:
1:red,down;2:green,up,3:orange,R,4:blue,L
然后用下面代码测试了一下,就是往哪边倾转,哪边的LED灯亮。还是能正常工作的。选了一个阈值0.3,工作还行,就是可能有抖动。代码是必须有缩进的,不知道为什么贴上来就没有了。。。
- from staccel import STAccel
- ac=STAccel()
- while (True):
- if ac.x()<-0.3 : #R
- pyb.LED(3).on()
- elif ac.x()>0.3 : #L
- pyb.LED(4).on()
- else :
- pyb.LED(3).off()
- pyb.LED(4).off()
- print(ac.x())
- if ac.y()<-0.3 : #U
- pyb.LED(2).on()
- elif ac.y()>0.3 : #D
- pyb.LED(1).on()
- else :
- pyb.LED(1).off()
- pyb.LED(2).off()
- print(ac.y())
- pyb.delay(100)