// ===================== 引脚定义 =====================
// 模拟输入引脚
const int PIN_TEMP = 33; // 温度电位器
const int PIN_WATER = 32; // 水位电位器
const int PIN_PH = 35; // pH电位器
const int PIN_TURB = 34; // 浊度电位器
// 第一个 RGB:共阴极 —— 温度调控(加热红 / 降温蓝)
const int PIN_RGB1_R = 25;
const int PIN_RGB1_G = 26;
const int PIN_RGB1_B = 27;
// 第二个 RGB:共阳极 —— 警报灯
const int PIN_RGB2_R = 16;
const int PIN_RGB2_G = 17;
const int PIN_RGB2_B = 18;
// 继电器:高电平触发
const int PIN_RELAY1 = 22; // 排水
const int PIN_RELAY2 = 23; // 加水
// ===================== 阈值 =====================
const int TEMP_MIN = 20; // 低于则加热
const int TEMP_MAX = 30; // 高于则降温
const int WATER_LOW = 50; // 水位过低
const int PH_LOW = 7; // pH过低
const int TURB_HIGH = 30; // 浊度过高
// ===================== 全局变量 =====================
int tempVal;
int waterVal;
int phVal;
int turbVal;
// ===================== 初始化 =====================
void setup() {
Serial.begin(115200);
pinMode(PIN_RGB1_R, OUTPUT);
pinMode(PIN_RGB1_G, OUTPUT);
pinMode(PIN_RGB1_B, OUTPUT);
pinMode(PIN_RGB2_R, OUTPUT);
pinMode(PIN_RGB2_G, OUTPUT);
pinMode(PIN_RGB2_B, OUTPUT);
pinMode(PIN_RELAY1, OUTPUT);
pinMode(PIN_RELAY2, OUTPUT);
digitalWrite(PIN_RELAY1, LOW);
digitalWrite(PIN_RELAY2, LOW);
// 初始关灯
rgb1_off();
rgb2_off();
}
// ===================== 循环 =====================
void loop() {
// 读取并映射
tempVal = map(analogRead(PIN_TEMP), 0, 4095, 0, 50);
waterVal = map(analogRead(PIN_WATER), 0, 4095, 0, 100);
phVal = map(analogRead(PIN_PH), 0, 4095, 0, 14);
turbVal = map(analogRead(PIN_TURB), 0, 4095, 0, 100);
// 打印数据
Serial.print("T:"); Serial.print(tempVal);
Serial.print(" W:"); Serial.print(waterVal);
Serial.print(" pH:"); Serial.print(phVal);
Serial.print(" Turb:"); Serial.println(turbVal);
// ---------------- 第一个RGB:温度调控 ----------------
if (tempVal < TEMP_MIN) {
rgb1_red(); // 加热 红
} else if (tempVal > TEMP_MAX) {
rgb1_blue(); // 降温 蓝
} else {
rgb1_off(); // 正常 关
}
// ---------------- 第二个RGB:警报显示 ----------------
rgb2_off();
if (waterVal < WATER_LOW) {
rgb2_yellow(); // 水位低 → 黄
}
if (phVal < PH_LOW) {
rgb2_green(); // pH低 → 绿
}
if (turbVal > TURB_HIGH) {
rgb2_purple(); // 浊度高 → 紫
}
// 温度警报:红
if (tempVal < TEMP_MIN || tempVal > TEMP_MAX) {
rgb2_red();
}
// ---------------- 水位过低 → 自动加水 ----------------
if (waterVal < WATER_LOW) {
digitalWrite(PIN_RELAY2, HIGH);
} else {
digitalWrite(PIN_RELAY2, LOW);
}
// ---------------- pH低 或 浊度高 → 先排水3秒,再加水3秒 ----------------
bool needClean = (phVal < PH_LOW) || (turbVal > TURB_HIGH);
if (needClean) {
// 排水
digitalWrite(PIN_RELAY1, HIGH);
delay(3000);
digitalWrite(PIN_RELAY1, LOW);
// 加水
digitalWrite(PIN_RELAY2, HIGH);
delay(3000);
digitalWrite(PIN_RELAY2, LOW);
}
delay(200);
}
// ===================== RGB1 共阴极 =====================
void rgb1_red() { digitalWrite(PIN_RGB1_R, HIGH); digitalWrite(PIN_RGB1_G, LOW); digitalWrite(PIN_RGB1_B, LOW); }
void rgb1_blue() { digitalWrite(PIN_RGB1_R, LOW); digitalWrite(PIN_RGB1_G, LOW); digitalWrite(PIN_RGB1_B, HIGH); }
void rgb1_off() { digitalWrite(PIN_RGB1_R, LOW); digitalWrite(PIN_RGB1_G, LOW); digitalWrite(PIN_RGB1_B, LOW); }
// ===================== RGB2 共阳极 =====================
void rgb2_red() { digitalWrite(PIN_RGB2_R, LOW); digitalWrite(PIN_RGB2_G, HIGH); digitalWrite(PIN_RGB2_B, HIGH); }
void rgb2_green() { digitalWrite(PIN_RGB2_R, HIGH); digitalWrite(PIN_RGB2_G, LOW); digitalWrite(PIN_RGB2_B, HIGH); }
void rgb2_yellow() { digitalWrite(PIN_RGB2_R, LOW); digitalWrite(PIN_RGB2_G, LOW); digitalWrite(PIN_RGB2_B, HIGH); }
void rgb2_purple() { digitalWrite(PIN_RGB2_R, LOW); digitalWrite(PIN_RGB2_G, HIGH); digitalWrite(PIN_RGB2_B, LOW); }
void rgb2_off() { digitalWrite(PIN_RGB2_R, HIGH); digitalWrite(PIN_RGB2_G, HIGH); digitalWrite(PIN_RGB2_B, HIGH); }温度(20-30)
水位(阈值50)
PH值(小于7警报)
温度调控装置
警报灯
排水泵
加水泵