Arduino控制超声波检测与0.96OLED及串口显示代码使用库共享(包括超声波检测与U8glib):
使用元件:
- 0.96寸 12864 I2C OLED 128x64规格
- 超声波检测模块 湿度模块
- ARDUINO UNO
- 面包板
- 跳线
- u8glib是目前arduino上使用的最多的点阵液晶显示器驱动库,它支持型号众多的液晶显示器,详情查阅:
u8glib
u8glib是目前arduino上使用的最多的点阵液晶显示器驱动库,它支持型号众多的液晶显示器。
由于Google被墙,原u8glib项目页(https://code.google.com/p/u8glib/)访问不了,为方便国内用户,于是搬运了一个过来。仅作搬运,不对正确性做保证,且更新不定。
如有疑问,请到 Arduino中文社区(http://www.arduino.cn/) 提出
u8glib支持设备:http://clz.me/u8glib/device/
u8glib函数参考:http://clz.me/u8glib/reference/
Left: NHD-2.7-12864 OLED (SSD1325), right: EA DOGS102 LCD (UC1701)
库文件下载链接:
U8glib for Arduino: https://bintray.com/olikraus/u8glib/Arduino
U8glib for AVR: https://bintray.com/olikraus/u8glib/AVR
U8glib for ARM: https://bintray.com/olikraus/u8glib/ARM
Converter for BDF fonts: bdf2u8g_101.exe on google drive.
(将文件解压后导入到Arduino IDE安装路径中的library文件中即可)
OLED接线方式:
VCC<————>3.3V
GND<————>GND
SCL<————>SCL
SDA<————>SDA
超声波接线方式:
Trig 2 //引脚Tring 连接 IO D2
Echo 3 //引脚Echo 连接 IO D3
//OLED接线方式:
//VCC<————>3.3V
//GND<————>GND
//SCL<————>SCL
//SDA<————>SDA
//接线方式:
//Trig 2 //引脚Tring 连接 IO D2
//Echo 3 //引脚Echo 连接 IO D3
//LingShun LAB
#include "U8glib.h"
// OLED库
#define Trig 2 //引脚Tring 连接 IO D2
#define Echo 3 //引脚Echo 连接 IO D3
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C
float cm; //距离变量
float temp; //
void draw(void) {
u8g.setFont(u8g_font_8x13); //使用8x13大小的字符
u8g.setPrintPos(0, 20); // 对应 x,y 轴值
u8g.print("Echo =");
u8g.setPrintPos(50, 20);
u8g.print(temp);
u8g.setPrintPos(0, 40);
u8g.print("Dist =");
u8g.setPrintPos(50, 40);
u8g.print(cm);
u8g.setPrintPos(100, 40);
u8g.print("");
}
void setup() {
Serial.begin(9600);
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
Serial.print("Echo =");
Serial.print(temp);//串口输出等待时间的原始数据
Serial.print(" | | Distance = ");
Serial.print(cm);//串口输出距离换算成cm的结果
Serial.println("cm");
delay(100);
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
delay(200);
}