在这记录minecraft的点点滴滴。

作者:linfengfeiwu2017-8-29 11:29分类: 笔记 标签: Arduino

arduino-UNO.png

闲置了好久的一些散件,觉得还是用来干点什么比较好,so,就做了这么一个超声波测距的东西。

硬件:Arduino UNO一块

          HC-SR04超声波测距模块一个

          IIC1602显示模块一个

          UNO固定板一块

连接:

超声波:VCC — 5v

           Trig — D5

            Echo — D4

            GND — GND

IIC1602:VCC — VCC

             GND — GND

             SDA — SDA

             SCL — SCL

首先检测自己的1602地址,打开串口,设置波特率9600,写入以下代码:

#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
之后就能看到地址了,我的是0x3F。


然后写入以下代码:

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

LiquidCrystal_I2C lcd(0x3F,16,2);//设置I2C驱动板的地址,楼主的是0x3F,请根据上一步获得的写入,不然不会再LCD上显示信息
int inputPin=4; // 定义超声波信号接收接口
int outputPin=5; // 定义超声波信号发出接口
int ledpin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
pinMode(inputPin, INPUT);
pinMode(outputPin, OUTPUT);
}
void loop()

{
lcd.init();
digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2ms
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10ms,这里是至少10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平
float distance = pulseIn(inputPin, HIGH); // 读出脉冲时间
distance= 1.3+distance/58; // 将脉冲时间转化为距离(加上底座高度单位:厘米)
Serial.print(distance);
Serial.println("cm");//向串口监视器中输出距离信息
lcd.backlight();
     lcd.setCursor(0,0);//光标从这里开始
     lcd.print("Distance is");
     lcd.setCursor(0,1);//换行后显示距离
     lcd.print(distance);
     lcd.println("cm");//在LCD上输出距离信息
delay(100);//刷新时间100ms,也就是0.1s

}
到这就可以了。


注意:1.第一步获取的地址如果不同,要修改第二部分的代码里面相应的部分。

2.1602的对比度在板子后面有蓝色的旋钮可以调节。

3.IDE版本超过1.6的话,IIC的库可能不正常,导致1602只能显示第一个字符,这里提供下我用的库,我的IDE版本是1.8.3。下载:LiquidCrystal_I2C1602V1.rar


最后成品图:

QQ截图20170829124057.png

参考文章:

http://www.arduino.cn/thread-21927-1-1.html



温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51

已有 0/3614 人参与

发表评论:

欢迎关注本站微信公众号~