设计原型基本完成
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
} //main5. 上传的代码和工程如下。
含编译后的bin文件。
BlinkingEyes_uvision5_nucleo_f410rb.zip
我要赚赏金
