``# HC-SRO4 超声波测距
VCC 是HC-SR04超声波距离传感器的电源,我们连接了Arduino上的5V引脚。
Trig (Trigger) 引脚用于触发超声波脉冲。(A0)
Echo 回声当接收到反射信号时,引脚产生一个脉冲。脉冲的长度与检测发射信号所需的时间成正比。(A1)
GND 应该连接到Arduino的地。
int TrgPin = A0;
int EcoPin = A1;
float dist;
void setup()
{
Serial.begin(9600);
//设置TrgPin为输出状态
pinMode(TrgPin, OUTPUT);
// 设置EcoPin为输入状态
pinMode(EcoPin, INPUT);
}
void loop()
{
digitalWrite(TrgPin, LOW);
delayMicroseconds(8);
digitalWrite(TrgPin, HIGH);
// 维持10毫秒高电平用来产生一个脉冲
delayMicroseconds(10);
digitalWrite(TrgPin, LOW);
// 读取脉冲的宽度并换算成距离
dist = pulseIn(EcoPin, HIGH) / 58.00;
Serial.print("Distance:");
Serial.print(dist);
Serial.println("cm");
delay(300);
}
读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW. 例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0.
根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。
是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
SDA----数据线 SCL-----控制线
是SCL\SDA是I2C总线的信号线.
SDA是双向数据线,SCL是时钟线SCL.在I2C 总线上传送数据,首先送最高位,由主机发出启动信号
SDA在SCL 高电平期间由高电平跳变为低电平,然后由主机发送一个字节的数据.
数据传送完毕,由主机发出停止信号,SDA在SCL 高电平期间由低电平跳变为高电平.
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
// include the library code
#include
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2)
#define TRIGGER_PIN 2 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 3 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
lcd.init();
lcd.backlight();
}
void loop() {
delay(100); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
lcd.setCursor(0, 0);
lcd.print("Distance:");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(uS / US_ROUNDTRIP_CM);
lcd.setCursor(12, 1);
lcd.print("cm");
}
*/
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2); //配置LCD地址及行列
void setup()
{
lcd.init(); //初始化LCD
lcd.backlight(); //打开背光
}
void loop()
{
lcd.setCursor(0,0);//设置显示位置
lcd.print(" HELLO WORLD!");//显示字符数据
lcd.setCursor(0,1);//设置显示位置
lcd.print("ARDUINO.NXEZ.COM");//显示字符数据
}
#include
#define LM35 A0
#define Trig 2 //引脚Tring 连接 IO D8
#define Echo 3 //引脚Echo 连接 IO D9
float cm; //距离变量
LiquidCrystal_I2C lcd(0x27,16,2); //构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,2
int val = 0; //存放AD变量值
float temp = 0; //存放温度值的10倍
void setup()
{
lcd.init();
lcd.backlight();
lcd.print("Welcome to use!"); //液晶显示Welcome to use!
delay(1000); //延时1000ms
lcd.clear(); //液晶清屏
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
void loop()
{
//给Trig发送一个低高低的短时间脉冲,触发测距
digitalWrite(Trig, LOW); //给Trig发送一个低电平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //给Trig发送一个低电平
temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
//返回脉冲的长度
//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
//因为发送到接收,实际是相同距离走了2回,所以要除以2
//距离(厘米) = (回波时间 * (34 / 1000)) / 2
//简化后的计算公式为 (回波时间 * 17)/ 1000
cm = (temp * 17 )/1000; //把回波时间换算成cm
lcd.setCursor(0,0); //设置液晶开始显示的指针位置
lcd.print("Now Distance:"); //液晶显示“LM35 temp =”
lcd.setCursor(0,1); //设置液晶开始显示的指针位置,在下一行显示
lcd.print(cm); //液晶显示距离
delay(1000); //延时1000ms
}