本帖最后由 lxf 于 2020-8-17 13:34 编辑
目标
利用超声波接近障碍物模拟做俯卧撑,用OLED显示屏显示次数
实验材料
Arduino UNO开发板 12864液晶显示屏 HC-SR04超声波传感器模块 配套USB数据线 配套杜邦线若干 Arduino IDE软件
内容
利用超声波接近障碍物模拟做俯卧撑,用OLED显示屏显示次数
接线图
接线方式
Arduino UNO <------> HC-SR04超声波传感器模块 5V <------> VCC GND <------> GND 7 <------> Trig 3 <------> Echo Arduino UNO <------> 12864液晶显示屏 5V <------> VCC GND <------> GND 10 <------> SCL 9 <------> SDA 13 <------> RES 11 <------> DC 12 <------> CS
程序实现代码
- #include "stdio.h"
- #include "stdlib.h"
- #include "U8glib.h" //OLED显示屏库文件
- volatile int X; //定义一个整型变量X
- U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11); //OLED显示屏引脚设置SCL=10,SDA=9,CS=12,DC=11
- int checkdistance_7_3() { //定义一个浮点型函数checkdistance_7_3()
- digitalWrite(7, LOW); //低高低电平发一个短时间脉冲去Trigpin
- delayMicroseconds(2);
- digitalWrite(7, HIGH);
- delayMicroseconds(10);
- digitalWrite(7, LOW);
- float distance = pulseIn(3, HIGH) / 58.00; //将回波时间换算成distance
- delay(10);
- return distance; //向调用函数返回distance
- }
- void draw(void) {
- u8g.setFont(u8g_font_osb18); //设置要显示字符的字体
- u8g.setPrintPos(50, 30); // 对应 x,y 坐标值
- u8g.print(X); //显示输出变量X
- u8g.setColorIndex(1); //显示对象为不透明
- }
- void setup(void) {
- X = 0; //初始化变量X为0
- Serial.begin(9600); //设置波特率为9600
- pinMode(7, OUTPUT); //定义7号引脚为输出
- pinMode(3, INPUT); //定义3号引脚为输入
- }
- void loop(void){
- u8g.firstPage();
- if (checkdistance_7_3() < 30) { //如果超声波传感器测到的距离小于30,那么变量X加1
- delay(1500);
- X = X + 1;
- do {
- draw();
- } while( u8g.nextPage() );
- }
- }
复制代码 |