Arduino控制超声波检测与0.96OLED及串口显示

Arduino控制超声波检测与0.96OLED及串口显示代码使用库共享(包括超声波检测与U8glib):

使用元件:

  1. 0.96寸 12864 I2C OLED 128x64规格
  2. 超声波检测模块 湿度模块
  3. ARDUINO UNO
  4. 面包板
  5. 跳线
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • 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);
}
posted @ 2019-12-27 10:21  icloudelectron  阅读(1156)  评论(0编辑  收藏  举报