日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上

發布時間:2024/4/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 快速上手Arduino -- 打印超聲波模塊測距信息到OLED屏幕上
        • 實現效果:
        • 模塊說明:
        • 引腳接線方法:
        • 程序源碼
        • 附錄


快速上手Arduino – 打印超聲波模塊測距信息到OLED屏幕上

實現效果:



模塊說明:

  • 使用的開發板是Arduino Uno R3版本
  • 使用了Arduino 硬件IIC通道 控制0.96寸OLED顯示屏
  • 由于無法使用輪詢的方式(筆者親測會產生bug,超聲波echo信息無法響應),因此使用了Arduino的中斷響應系統,能滿足信號采集的實時性。

引腳接線方法:

傳感器引腳Arduino引腳
超聲波-EchoPin2
超聲波-TrigPin3
OLED屏幕-SCLA5
OLED屏幕-SDAA4

程序源碼

#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>#include <SoftwareSerial.h> /*OLED*/ #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 /*Bluetooth*/ // Pin10為RX,接HC05的TXD // Pin11為TX,接HC05的RXD SoftwareSerial BT(10, 11); char BT_val; /*Ultrasound*/ unsigned long elapsed; unsigned int EchoPin = 2; unsigned int TrigPin = 3; void echo() {noInterrupts();int s = digitalRead(EchoPin);if(s == HIGH) {elapsed = micros(); // Echo 變為高電平時記下時間 t1} else {elapsed = micros() - elapsed; // Echo 變為低電平時記下時間 t2}interrupts(); }// the setup function runs once when you press reset or power the board void setup() {/*Ultrasound*/pinMode(TrigPin, OUTPUT); // 引腳TrigPin默認為低電平,15uS的高電平脈沖會觸發發送測距超聲包.digitalWrite(TrigPin, LOW);pinMode(EchoPin, INPUT);// 引腳EchoPin可中斷,電平跳變會觸發中斷attachInterrupt(digitalPinToInterrupt(EchoPin), echo, CHANGE);/*OLED*/elapsed = 0;display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)//delay(500);Serial.begin(38400);/*Bluetooth*/Serial.println("BT is ready!");BT.begin(38400); //HC-05默認,38400 }// the loop function runs over and over again forever void loop() {while(true) {// 發出 15微秒的脈沖.digitalWrite(TrigPin, HIGH);delayMicroseconds(15);digitalWrite(TrigPin, LOW);float sec = float(elapsed)/1000000;float distance = (sec * 340/2)*100; // *100 米轉換為厘米if (Serial) {Serial.print(sec*1000, 3);Serial.print(" ms, ");Serial.print(distance, 2);Serial.print(" cm\n");} if (Serial.available()) {BT_val = Serial.read();BT.print(BT_val);}if (BT.available()) {BT_val = BT.read();Serial.print(BT_val);}display.clearDisplay(); // clears the screen and bufferdisplay.setTextSize(1); //選擇字號display.setTextColor(WHITE); //字體顏色display.setCursor(0,0); //起點坐標display.print("DIS: "); display.print(distance, 3);display.println(" CM"); display.display();delay(100); } }

附錄

  • 附[1] Arduino引腳原理圖

總結

以上是生活随笔為你收集整理的快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。