开发板:ESP8266
传感器:1个tft屏幕,1个土壤湿度传感器,1个继电器传感器,3个按钮模块。
代码解释:获取土壤湿度数据化并显示,当湿度低于30%以下开启继电器5秒,用A1按钮增加湿度低于多少开启继电器,用A2按钮减少继电器开启时间,用A3切换更改哪条数据。
问题:3个按钮模块,程序上传后都无反应,实现想要的操作,请问如何解决。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <TFT_eSPI.h> // 引入TFT屏幕库
#include <ESP8266WiFi.h> // 引入ESP8266WiFi库
#define Relay 5 // 定义继电器模块接口
#define Sensor A0 // 定义土壤湿度传感器接口
#define ButtonA1 16 // 按钮A1接口增加
#define ButtonA2 12 // 按钮A2接口减少
#define ButtonA3 3 // 按钮A3接口切换需要更改的项
TFT_eSPI tft = TFT_eSPI(); // 初始化TFT屏幕
int humidityThreshold = 30; // 定义湿度阈值
int relayOnTime = 5; // 定义继电器启动时间
bool selectHumidity = true; // 定义是否选择湿度
void setup() {
Serial.begin(9600); // 启动串行通信,波特率为9600
pinMode(Relay, OUTPUT); // 设置继电器模块为输出模式
pinMode(Sensor, INPUT); // 设置土壤湿度传感器为输入模式
pinMode(ButtonA1, INPUT_PULLUP); // 设置按钮A1为输入模式,并启用内部上拉电阻
pinMode(ButtonA2, INPUT_PULLUP); // 设置按钮A2为输入模式,并启用内部上拉电阻
pinMode(ButtonA3, INPUT_PULLUP); // 设置按钮A3为输入模式,并启用内部上拉电阻
tft.init(); // 初始化TFT屏幕
tft.setRotation(1); // 设置TFT屏幕方向
tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色为黑色
tft.setTextColor(TFT_WHITE); // 设置文本颜色为白色
}
void loop() {
Serial.println(ButtonA2); // 在串行监视器上打印原始的模拟读数
int sensorValue = analogRead(Sensor); // 读取土壤湿度传感器的值
int humidity = map(sensorValue, 0, 1023, 10, 100); // 把传感器值映射到10%-100%之间
if(humidity > 100) humidity = 100; // 如果湿度超过100%,则设置为100%
tft.fillScreen(TFT_BLACK); // 清除屏幕
tft.setCursor(0, 0); // 设置光标位置
tft.println("turangshidu: " + String(humidity) + "%"); // 显示土壤湿度
tft.println("shidu: " + String(humidityThreshold) + "%" + (selectHumidity ? " x" : "")); // 显示湿度阈值
tft.println("shichang: " + String(relayOnTime) + "s" + (!selectHumidity ? " x" : "")); // 显示继电器启动时间
if(digitalRead(ButtonA1) == LOW) { // 如果按下按钮A1
if(selectHumidity && humidityThreshold < 80) humidityThreshold += 5; // 如果选择湿度,增加湿度阈值
if(!selectHumidity && relayOnTime < 120) relayOnTime += 1; // 如果选择时间,增加继电器启动时间
while (digitalRead(ButtonA1) == LOW) delay(10); // 等待按钮释放
}
if(digitalRead(ButtonA2) == LOW) { // 如果按下按钮A2
if(selectHumidity && humidityThreshold > 20) humidityThreshold -= 5; // 如果选择湿度,减少湿度阈值
if(!selectHumidity && relayOnTime > 1) relayOnTime -= 1; // 如果选择时间,减少继电器启动时间
while (digitalRead(ButtonA2) == LOW) delay(10); // 等待按钮释放
}
if(digitalRead(ButtonA3) == LOW) { // 如果按下按钮A3
selectHumidity = !selectHumidity; // 切换选择
while (digitalRead(ButtonA3) == LOW) delay(10);
}
if(humidity < humidityThreshold) { // 如果土壤湿度低于阈值
digitalWrite(Relay, HIGH); // 开启继电器模块
delay(relayOnTime * 1000); // 延时继电器启动时间
digitalWrite(Relay, LOW); // 关闭继电器模块
} else {
digitalWrite(Relay, LOW); // 如果土壤湿度不低于阈值,保持继电器关闭
}
//delay(1000); // 延时1秒,稳定读数
}