A测速通

巨水(

仿真的电路都提前提供,只需要写代码就行

题目

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <LiquidCrystal.h>
#include <DHT11.h>

// 接口定义
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
DHT11 dht11(6);
int motor = 7;

int RH = 0; // 湿度
int RH_limit = 30; // 预定阈值
char ID[12] = {}; // 学号


void setup() {
// 初始化
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(motor, OUTPUT);
}

void flushLCD() {
// 第一行
lcd.setCursor(0, 0);
lcd.print("ID:");
lcd.print(ID);
//第二行
lcd.setCursor(0, 1);
lcd.print("RH:");
lcd.print(RH);
}

void checkMotor() {
// 检查是否超过阈值
if (RH > RH_limit) {
digitalWrite(motor, LOW);
} else {
digitalWrite(motor, HIGH);
}
}

void serialWrite() {
Serial.print("RH:");
Serial.println(RH);
}

void loop() {
// 更新湿度
RH = dht11.readHumidity();
// 获取学号
if (Serial.available()) {
for (int i = 0; i < 11 && Serial.available(); ++i) {
ID[i] = char(Serial.read());
}

// 用学号最后一位更新湿度阈值
for (int i = 0; i < 11; ++i) {
if (ID[i + 1] == 0) {
RH_limit = 30 + ID[i] - '0';
}
}
}

// 更新状态
flushLCD();
checkMotor();
serialWrite();

delay(1000);
}

报告