闲着无聊,玩起了Arduino!想弄一个note用来,有人和无人时显示不同的东西,尝试了红外和光敏都因传感器问题而放弃,最后用上了超声波,只能说精度一般!
接线
- 主要讲LCD1062 4位接法吧!
- 超声波
针脚 | 端口 |
---|---|
TrigPin | 12 |
EchoPin | 10 |
代码
//1602采用标准的16脚接口,其中:
//第1脚:VSS为地电源
//第2脚:VDD接5V正电源
//第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
//第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
//第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
//第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
//第7~14脚:D0~D7为8位双向数据线。
//第15~16脚:背光电源 15:VCC 16:GND
// 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,
//如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H
//中的点阵字符图形显示出来,我们就能
//看到字母“A”
//
//连接IO有全连接和以下连接方式,当然只介绍优先节省IO口的!
//以下是代码:还可以精简 可以用的串口来发送字符串,显示到1062上面,
#include <LiquidCrystal.h>
//此代码是给1602显示屏写的。2017-3-15
const int rs = 9, en = 8, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//int pirPin = 10;
//int pirValue;
const int TrigPin = 12; //发出超声波
const int EchoPin = 10; //收到反射回来的超声波
float cm; //因为测得的距离是浮点型的
void setup() {
Serial.begin(9600);
// pinMode(pirPin, INPUT);
//模拟电路
// pinMode(A2, INPUT);
// pinMode(10,INPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
// lcd.print(" ");//清空不稳定的显示
// lcd.setCursor(0, 1);//1位 第二行开始显示
// lcd.print("V");//单位
// lcd.setCursor(11, 1);//显示光标
// pirValue = digitalRead(pirPin);
// Serial.print("PIR value: ");
// Serial.print(pirValue);
// Serial.print("\n");
//逻辑输入
// int litPin = analogRead(A2);
// int litPin = digitalRead(10);
// Serial.print("Ligth value: ");
// Serial.print(litPin);
// Serial.print("\n");
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2); // delayMicroseconds在更小的时间内延时准确
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW); //通过这里控制超声波的发射
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
Serial.print("Distance:");
Serial.print(cm);
Serial.print("cm");
Serial.println();
lcd.clear();
if(cm > 0){
display_night();
}else{
day();
}
delay(2000);
}
void day(){
lcd.begin(16, 2);
lcd.print(" emperinter ");
lcd.setCursor(4, 1);//1位 第二行开始显示
lcd.print("come on");
}
void display_night(){
lcd.begin(16, 2);
lcd.print(" Good Night !");
lcd.setCursor(2, 1);//1位 第二行开始显示
lcd.print("Sleep Well !");
}