设计原型基本完成
1、使用mbed在逻辑上比较简单,不过在程序调试就花了很多时间,因为没有断点,也不能跟踪,对于板卡端口的设置调试也比较不方便。
只能采用输出监测的方式来看,还好基本调试成功。在下面的显示,
2. 首先外壳采用纸壳,这样比较便于造型和尺寸测试,这次的两个开孔高度不同个,主要是因为LCD屏使用了不同的方式,其中用了arduino扩展口的扩展板,另一个是单独的lCD1602,距离略有不同,这样也是一种被动的设计吧。而且因为2个LCD屏的底色不同,好像两只不同的眼睛。
3. 设计中使用了2个LCD1602屏和2个HCSR-04超声波距离传感器,安装在反面的效果,固定暂时用胶带,
上电以后的正面图。
演示的视频如下,
4、程序设计。
4.1 在mbed设计的页面如下
4.2 代码如下。
#include "mbed.h" #include "TextLCD.h" // LCD1602 #include "HCSR04.h" // Nucleo pins TextLCD lcd(D8, D9, D4, D5, D6, D7); TextLCD leftlcd(D10, D11, D0, D1, D2, D3); HCSR04 sonar_left(D12, D13); HCSR04 sonar_right(PA_11, PA_12); // display text on LCD void textLCD(char *text, int line) { char tmpBuf[16]; for (int i = 0; i < 16; i++) tmpBuf[i] = 0x20; for (int i = 0; i < strlen(text); i++) { if (i < 16) tmpBuf[i] = text[i]; lcd.locate(i, line); lcd.putc(tmpBuf[i]); // Left LCD blink too leftlcd.locate(i, line); leftlcd.putc(tmpBuf[i]); } } void happyLCD() { textLCD("/^^^^^^^^^^^^^^|", 0); textLCD("|______________/", 1); } void frawnLCD() { textLCD("................", 0); textLCD("................", 1); } void closeLCD() { textLCD("", 0); textLCD("", 1); } int main(){ lcd.cls(); float sona_l=0; float sona_r=0; float DISTANCE=10; sona_l=sonar_left.getCm(); sona_r=sonar_right.getCm(); //textLCD(" ARM Sheffield ", 0); //textLCD("Ada Lovelace Day", 1); wait (2); happyLCD(); wait (2); frawnLCD(); wait (2); closeLCD(); wait (2); while(1){ if (sona_l < DISTANCE) { happyLCD(); wait (2); } else{ frawnLCD(); } if (sona_r < DISTANCE) { happyLCD(); } else{ frawnLCD(); } } // while } //main
5. 上传的代码和工程如下。
含编译后的bin文件。
BlinkingEyes_uvision5_nucleo_f410rb.zip