LCD1602超声波测距实例-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12744|回复: 16

[作者已回复] LCD1602超声波测距实例

[复制链接]
发表于 2018-8-24 10:42 | 显示全部楼层 |阅读模式
昨天用DHT11做了个LCD1602的实例!
今天移植到超声波测距来了!刚开始学的小白!大神轻点喷,多提宝贵意见共同进步!
LCD接法参考教科书,超声波的接法,我发送接数字8.反馈接数字9.
把误判大于2000cm的输出,直接一闪而过,正常读数保留三秒读数时间。
代码如下:

#include<LiquidCrystal.h>

LiquidCrystal lcd(12,11,5,4,3,2);
int Tfa = 8;
int Ehk = 9;
float juli;


byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};
void setup(){
Serial.begin(9600);
pinMode(Tfa,OUTPUT);
pinMode(Ehk,INPUT);
  lcd.begin(16,2);
  lcd.print("lcd already ok");
  /* lcd.createChar(1, armsDown);  
  // create a new character
  lcd.createChar(2, armsUp);*/
  delay(2000);
  lcd.clear();
}
void loop()
{
digitalWrite(Tfa,LOW);
delayMicroseconds(2);
digitalWrite(Tfa,HIGH);
delayMicroseconds(10);
juli = pulseIn(Ehk,HIGH)/58.30;
Serial.print(juli);
Serial.print("cm");
Serial.println();
/*switch(chk){
case DHTLIB_OK:
     Serial.println("ok");
     break;
     //case DHTLIB_ERROR_TIMEOUT:
     Serial.println("ERROR_TIMEOUT");
     break;
     //case DHTLIB_ERROR_CHECKSUM:
     Serial.println("CHECKSUM ERROR");
     break;
     default:
     Serial.println("ok ko");
     break;
}*/

lcd.setCursor(0,0);
lcd.print(juli);
lcd.print("cm");
//delay(3000);//wating 3s,clear lcd.
if(juli>=2000){
delay(50);}
else{
delay(3000);//wating 3s,clear lcd.
}
//fang zhi wupan
//delay(3000);//wating 3s,clear lcd.
lcd.setCursor(0,0);
lcd.clear();
lcd.setCursor(4, 1);
  // draw the little man, arms down:
  lcd.write(2);
  delay(300);
  lcd.setCursor(4, 1);
  // draw him arms up:
  lcd.write(1);
  delay(300);

}



chaoshengbolcd.jpg
发表于 2018-8-25 15:06 | 显示全部楼层
你好,厉害啊
发表于 2018-8-25 15:08 | 显示全部楼层
有没有原理图啥的哈哈
发表于 2018-9-27 12:59 | 显示全部楼层
有接线图参考吗
 楼主| 发表于 2018-9-27 16:31 | 显示全部楼层

LCD接法参考教科书,超声波的接法,我发送接数字8.反馈接数字9.
把误判大于2000cm的输出,直接一闪而过,正常读数保留三秒读数时间。
 楼主| 发表于 2018-10-23 17:24 | 显示全部楼层
更新一下I2C的1602事例:

#include<LiquidCrystal_I2C.h>
#include <Wire.h>
//LiquidCrystal_I2C Lcd(0x27,16,02);

LiquidCrystal_I2C lcd(0x27,20,4);
//LiquidCrystal lcd(12,11,5,4,3,2);
int Tfa = 8;
int Ehk = 9;
float juli;


byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};
void setup(){
Serial.begin(9600);
pinMode(Tfa,OUTPUT);
pinMode(Ehk,INPUT);
// lcd.begin(16,2);
lcd.init();
lcd.backlight();
  lcd.print("lcd already ok");
  /* lcd.createChar(1, armsDown);  
  // create a new character
  lcd.createChar(2, armsUp);*/
  delay(2000);
  lcd.clear();
}
void loop()
{
digitalWrite(Tfa,LOW);
delayMicroseconds(2);
digitalWrite(Tfa,HIGH);
delayMicroseconds(10);
juli = pulseIn(Ehk,HIGH)/58.30;
Serial.print(juli);
Serial.print("cm");
Serial.println();
/*switch(chk){
case DHTLIB_OK:
     Serial.println("ok");
     break;
     //case DHTLIB_ERROR_TIMEOUT:
     Serial.println("ERROR_TIMEOUT");
     break;
     //case DHTLIB_ERROR_CHECKSUM:
     Serial.println("CHECKSUM ERROR");
     break;
     default:
     Serial.println("ok ko");
     break;
}*/

lcd.setCursor(0,0);
lcd.print(juli);
lcd.print("cm");
//delay(3000);//wating 3s,clear lcd.
if(juli>=2000){
delay(50);}
else{
delay(3000);//wating 3s,clear lcd.
}
//fang zhi wupan
//delay(3000);//wating 3s,clear lcd.
lcd.setCursor(0,0);
lcd.clear();
lcd.setCursor(4, 1);
  // draw the little man, arms down:
  lcd.write(2);
  delay(300);
  lcd.setCursor(4, 1);
  // draw him arms up:
  lcd.write(1);
  delay(300);

}
 楼主| 发表于 2018-10-23 17:25 | 显示全部楼层
很奇怪的是,我用1.8.6可以正常烧录,用1.8.5验证一直报错!望高手解答一下
发表于 2018-11-29 16:09 | 显示全部楼层
juli = pulseIn(Ehk,HIGH)/58.30;
请问,计算距离的这个程序,为什么是58.3,有点不明白?

点评

声音速度340m/s 然后算出来的,小学数学  详情 回复 发表于 2018-12-3 09:07
发表于 2018-12-3 09:07 | 显示全部楼层
JasonChing 发表于 2018-11-29 16:09
juli = pulseIn(Ehk,HIGH)/58.30;
请问,计算距离的这个程序,为什么是58.3,有点不明白? ...

声音速度340m/s
然后算出来的,小学数学
发表于 2018-12-3 10:41 | 显示全部楼层
奈何col 发表于 2018-12-3 09:07
声音速度340m/s
然后算出来的,小学数学

搞明白了,没注意单位是us
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:54 , Processed in 0.117837 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表