1.按键控制

其中一个重点的是 INPUT 和INPUT_PULLUP的区别

按键要设置INPUT_PULLUP这除了输入之外,会激活内部上拉电阻,因为要接受按键下按的信号,默认会是高电平,所以按下得到的信号应该是LOW。

2.dht11

#include <DHT11.h>                // 假设你安装的是这个库

#include <LiquidCrystal_I2C.h>

// 如果你的 LCD 地址不是 0x27,请改为扫描到的地址(如 0x3F)

LiquidCrystal_I2C lcd(0x27, 16, 2);

// 创建 DHT11 对象,必须在创建时传入引脚号

#define DHT11PIN 8

DHT11 dht(DHT11PIN);  // 正确:构造函数需要引脚参数

void setup() {

  Serial.begin(9600);      // 可选,用于调试

  lcd.init();

  lcd.backlight();

  lcd.print("Initializing...");

  delay(2000);              // 等待传感器稳定

  lcd.clear();

}

void loop() {

  // 读取温湿度(假设返回值为 int,失败时返回 -1 或其他特殊值)

  int humidity = dht.readHumidity();

  int temperature = dht.readTemperature();

  // 检查读取是否成功(请根据实际库的返回值调整判断条件)

  // 如果库返回 -1 表示失败,则用下面的判断;如果返回其他值,请修改

  if (humidity == -1 || temperature == -1) {

    lcd.setCursor(0, 0);

    lcd.print("Sensor Error   ");

    lcd.setCursor(0, 1);

    lcd.print("Check wiring   ");

  } else {

    lcd.setCursor(0, 0);

    lcd.print("Humidity: ");

    lcd.print(humidity);

    lcd.print("%   ");      // 加空格清除前次残留

    lcd.setCursor(0, 1);

    lcd.print("Temp: ");

    lcd.print(temperature);

    lcd.print("C   ");

  }

  delay(2000);  // DHT11 最小间隔 1 秒

}

Arduino IDE 有一个示例的功能,我一开始一直都不知道,直到dht11一直出错,最后通过示例写出正确的代码。

3.超声波传感器

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); //设置LCD1602设备地址0x27

const int TrigPin = 8;//定义超声波的Trig(控制)口

const int EchoPin = 9;//定义超声波的echo(接收)口

float distance;//定义距离变量

void setup() {

  lcd.init();

  lcd.backlight();

   lcd.print("Waiting......");

  delay(1000);

  pinMode(TrigPin,OUTPUT);

  pinMode(EchoPin,INPUT);

}

void loop() {

  digitalWrite(TrigPin,LOW);

  delayMicroseconds(2);

  digitalWrite(TrigPin,HIGH);

  delayMicroseconds(10);

  digitalWrite(TrigPin,LOW);

  distance = pulseIn(EchoPin, HIGH) / 58.00; // 检测脉冲宽度,把测得的距离赋值给distance变量

  lcd.setCursor(0,0);

  lcd.print("distance:    ");

  lcd.setCursor(5,1);

  lcd.print(distance);

  lcd.print("cm");

}

传感器需要让Trig引脚至少输出一个10us(微秒)的高电平脉冲,传感器收到信号之后,会自动发射一组40kHz的超声波,超声波发射的同时Echo引脚拉高即为高电平,开始计时。当检测到反射回来的声波时,再将Echo的引脚拉低(低电平)即停止计时。

pulseIn(EchoPin, HIGH)函数精确读取总时长;

根据s=vt/2;计算时间。

  • pulseIn(EchoPin, HIGH):这是一个内置函数,它会等待Echo引脚变为HIGH,然后开始计时,直到引脚变为LOW,返回高电平持续的微秒数。如果超时(默认1秒),则返回0。

  • 时间转距离:声速约为340 m/s,声音从发射到返回经过的路程是距离的2倍。因此:

    距离(cm)=时间(µs)×340m/s2×10000=时间(µs)58距离(cm)=2×10000时间(µs)×340m/s​=58时间(µs)​

    这里使用 除以 58.00 是近似公式,更精确的系数是58.2或58.8,但58.0对一般测量已足够。使用浮点数除法保留小数。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐