欢迎光临散文网 会员登陆 & 注册

arduino入门18-进阶-OLED1306+HCSR04超声波测距仪#跟着J

2023-07-24 17:43 作者:醉_梦一度  | 我要投稿

//oled


#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels


// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)

// The pins for I2C are defined by the Wire-library.

// On an arduino UNO:    A4(SDA), A5(SCL)

// On an arduino MEGA 2560: 20(SDA), 21(SCL)

// On an arduino LEONARDO:  2(SDA), 3(SCL), ...

// On an arduino ESP8266:  D2(SDA)GPIO4, D1(SCL)GPIO5, ...

#define OLED_RESET   -1 // Reset pin # (or -1 if sharing Arduino reset pin)

#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

//oled


const int TrigPin = 11;

const int EchoPin = 12;

float distance;


void startinfo() {

 display.clearDisplay();


 display.setTextSize(2);       // Normal 1:1 pixel scale

 display.setTextColor(SSD1306_WHITE);    // Draw white text

 display.setCursor(0, 0);      // Start at top-left corner

 display.println(F("System"));

 display.setTextSize(2);

 display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text

 display.println("booting");


 display.setTextSize(2);       // Draw 2X-scale text

 display.setTextColor(SSD1306_WHITE);

 display.println("......");


 display.display();


}



void showinfo(String temp) {

 display.clearDisplay();


 display.setTextSize(2);       // Normal 1:1 pixel scale

 display.setTextColor(SSD1306_WHITE);    // Draw white text

 display.setCursor(0, 0);      // Start at top-left corner

 display.println(F("Distance"));

 display.setTextSize(2);

 display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text

 display.println("CM: ");


 display.setTextSize(2);       // Draw 2X-scale text

 display.setTextColor(SSD1306_WHITE);

 display.println(temp);


 display.display();


}




void setup()

{ // 初始化串口通信及连接 SR04 的引脚

 Serial.begin(115200);

 // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally

 if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {

  Serial.println(F("SSD1306 allocation failed"));

  for (;;); // Don't proceed, loop forever

 }


 // Show initial display buffer contents on the screen --

 // the library initializes this with an Adafruit splash screen.

 display.display();

 delay(2000); // Pause for 2 seconds

 startinfo() ;

 delay(1000);


 pinMode(TrigPin, OUTPUT);

 // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态

 pinMode(EchoPin, INPUT);

 Serial.println("Ultrasonic sensor:");

}

void loop()

{

 // 产生一个 10us 的高脉冲去触发 TrigPin

 digitalWrite(TrigPin, LOW);

 delayMicroseconds(2);

 digitalWrite(TrigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(TrigPin, LOW);

 // 检测脉冲宽度,并计算出距离

 distance = pulseIn(EchoPin, HIGH) / 58.00;

 Serial.print(distance);

 Serial.print("cm");

 Serial.println();

 showinfo(String (distance));

 delay(1000);

}

arduino入门18-进阶-OLED1306+HCSR04超声波测距仪#跟着J的评论 (共 条)

分享到微博请遵守国家法律