1-使用元件:
- 0.96寸 12864 I2C OLED 128x64规格
- HC-SR04-P超声波测距模块
- RGB 模块
- ARDUINO UNO
- 面包板
- 跳线
2-实现功能
1、通过超声波测距模块进行距离测量
2、将测量的结果显示在OLED屏幕上
3、当测量距离 < 20cm 时,RGB模块显示红灯报警
3-代码:
#include "U8glib.h"
// OLED库
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
int redPin = 4;
int greenPin = 5;
int bluePin = 6;
const int TrigPin = 8;
const int EchoPin = 9;
float cm;
void draw(float cm) {
u8g.setFont(u8g_font_8x13); //使用8x13大小的字符
u8g.setPrintPos(0, 20); // 对应 x,y 轴值
u8g.print("dist(cm):");
u8g.setPrintPos(73, 20);
u8g.print((float)cm);
}
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
if(cm < 20.0){
Serial.println("red");
setColor(255, 0, 0); // 红色
delay(1000);
}
else {
Serial.println("ok");
setColor(0, 0, 0);
delay(1000);
}
u8g.firstPage();
do {
draw(cm);
} while( u8g.nextPage() );
delay(200);
}
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}