const int stepsPerRevolution = 200;
int datapin = 2;
int clockpin = 3;
int latchpin = 4;
byte data = 0;
#define ECHO_PIN 5
#define TRIG_PIN 6
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);
const int LED_GREEN=11;
const int LED_YELLOW=12;
void setup() {
pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(latchpin, OUTPUT);
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1);
lcd.init();
lcd.backlight();
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT); //设置led 灯的接口模式
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);//传感器接口模式应该怎么办?
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW); //触发接口写入低电平
delayMicroseconds(2); //睡个2毫秒
digitalWrite(TRIG_PIN, HIGH); //触发接口写入高电平
delayMicroseconds(2); //持续发送个2毫秒
digitalWrite(TRIG_PIN, LOW); //一个脉冲过去了,停止发送-写入低电平。
int duration = pulseIn(ECHO_PIN, HIGH); //声明了一个变量,是脉冲的时间长度,它的计算是靠pulseIn函数,接口是
//接收接口-echo_pin, 计算的是脉冲高电平的时间。
return duration * 0.034 / 2; //返回一个基于duration变量所计算出的最终数值,计算公式= 时间长度* 超声波速度
}
void loop() {
float distance=readDistanceCM();//声明了一个变量距离,用调用readDistanceCM()计算器函数给的返回值来赋值
/*if(distance < 50){
digitalWrite(13, HIGH);
}
else if (distance<100 && distance>50){
digitalWrite(11, HIGH);
}
else{
digitalWrite(12,HIGH);
}*/
digitalWrite(LED_BUILTIN, distance < 50);//写入isNearby 对应的电平值;
digitalWrite(LED_YELLOW,distance>50 && distance<200);
digitalWrite(LED_GREEN,distance>200 && distance<400);
lcd.begin(16, 2);
lcd.print(" Measured distance: ");
lcd.println( readDistanceCM() );
//Serial.print("Measured distance: "); //串行监测器上所看到的测量数值
//Serial.println(readDistanceCM());
u8g.firstPage();
if(distance<50) {
do{
u8g.drawStr(22, 20, "In your face!");
u8g.setPrintPos(20,40); //相当于lcd.setCursor(x,y)
u8g.print("distance:");
u8g.print(distance);
}while ( u8g.nextPage() );
}
else if(distance>50&&distance<200){
do{
u8g.drawStr(15, 20, "It is coming close!");
u8g.setPrintPos(20,40); //相当于lcd.setCursor(x,y)
u8g.print("distance:");
u8g.print(distance);
}while( u8g.nextPage() );
}
else{
do{
u8g.drawStr(25, 20, "Safe distance");
u8g.setPrintPos(20,40); //相当于lcd.setCursor(x,y)
u8g.print("distance:");
u8g.print(distance);
}while( u8g.nextPage() );
}
delay(100);
}