|
楼主能帮忙看看我这个程序吗?我写的老是不显示超声波的数字,用电脑可以看得到,用LCD 1602 I2C就显示不出来。[b
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//申明1602液晶的函数库
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
LiquidCrystal_I2C lcd(0x27,16,2); //数据口模式连线声明
int Echo = A1; // Echo回声脚(P2.0)
int Trig =A0; // Trig 触发脚(P2.1)
int Distance = 0;
void setup()
{
Serial.begin(9600); // 初始化串口
//初始化电机驱动IO为输出方式
//初始化超声波引脚
pinMode(Echo, INPUT); // 定义超声波输入脚
pinMode(Trig, OUTPUT); // 定义超声波输出脚
lcd.begin(0x27,16,2); //初始化1602液晶工作
//lcd.init(); // initialize the lcd
//lcd.backlight();
//lcd.home();
//lcd.print("Hello liuliujunfeng");
//lcd.setCursor(0, 1);
//lcd.print("QQ:175536240");
}
void Distance_test() // 量出前方距离
{
digitalWrite(Trig, LOW); // 给触发脚低电平2μs
delayMicroseconds(2);
digitalWrite(Trig, HIGH); // 给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(10);
digitalWrite(Trig, LOW); // 持续给触发脚低电
float Fdistance = pulseIn(Echo, HIGH); // 读取高电平时间(单位:微秒)
Fdistance= Fdistance/58; //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
Serial.print("Distance:"); //输出距离(单位:厘米)
Serial.println(Fdistance); //显示距离
Distance = Fdistance;
}
void loop()
{
Distance_test();
if((2<Distance)&(Distance<400))//超声波测距范围2cm到400cm
{
lcd.home(); //把光标移回左上角,即从头开始输出
lcd.print("Distance:"); //显示
lcd.setCursor(6,2); //把光标定位在第2行,第6列
delay(1000);
lcd.print(Distance); //显示距离
lcd.print("cm"); //显示
delay(5000);
}
else
{
lcd.home(); //把光标移回左上角,即从头开始输出
lcd.print("!!! Out of range"); //显示超出距离
}
delay(5000);
lcd.clear();
}
|
|