154 lines
4.9 KiB
C++
154 lines
4.9 KiB
C++
#include "HermitCrab.h"
|
|
#include "Config.h"
|
|
#include "History.h"
|
|
#include "zcd.h"
|
|
|
|
const char *strDeviceType[] = {
|
|
"None",
|
|
"Test",
|
|
"ESP8266",
|
|
"ON_OFF",
|
|
"ZCD",
|
|
"CAM",
|
|
"Beta",
|
|
"Beta_BLE",
|
|
"End"
|
|
};
|
|
|
|
MY_IRAM_ATTR void checkSerial(unsigned long tick)
|
|
{
|
|
static char buffer[256];
|
|
static short idx = 0;
|
|
static unsigned long val;
|
|
|
|
while (Serial.available() > 0) {
|
|
if (idx > 254) {
|
|
idx = 0;
|
|
ESP_LOGI(TAG,"SrialHost: Buffer OverFlow");
|
|
}
|
|
|
|
buffer[idx] = Serial.read();
|
|
if (buffer[idx] == '\n') {
|
|
if (idx >= 1) {
|
|
buffer[idx] = 0;
|
|
|
|
switch(buffer[0])
|
|
{
|
|
case 'T': // Temp Target
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= 25 && val <= 35) {
|
|
config.nTempTarget = val * 10;
|
|
} else if (val >= 250 && val <= 350) {
|
|
config.nTempTarget = val;
|
|
}
|
|
}
|
|
Serial.printf("%s SerialSet: Temp Target %d.%d°C Duty(%.2f%%)\n",
|
|
printStatus(tick, false), config.nTempTarget / 10, config.nTempTarget % 10,
|
|
status.nHeater1Duty / 100.0f);
|
|
break;
|
|
case 't': // Temp Target Night
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= 25 && val <= 35) {
|
|
config.nTempTargetNight = val * 10;
|
|
} else if (val >= 250 && val <= 350) {
|
|
config.nTempTargetNight = val;
|
|
}
|
|
}
|
|
Serial.printf("%s SerialSet: Temp Target Night %d.%d°C Duty(%.2f%%)\n",
|
|
printStatus(tick, false),
|
|
config.nTempTargetNight / 10, config.nTempTargetNight % 10,
|
|
status.nHeater1Duty/ 100.0f);
|
|
break;
|
|
case 'H': // Humidity Target
|
|
case 'h':
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= 20 && val <= 95) {
|
|
config.nHumidTarget = val * 10;
|
|
} else if (val >= 200 && val <= 950) {
|
|
config.nHumidTarget = val;
|
|
}
|
|
}
|
|
Serial.printf("%s SerialSet: Humid Target(%d.%d%%) Mist %s (Duty: %d)\n",
|
|
printStatus(tick),
|
|
config.nHumidTarget / 10, config.nHumidTarget % 10,
|
|
status.nMistDuty > 0 ? "ON" : "OFF",
|
|
status.nMistDuty);
|
|
break;
|
|
case 'M': // MistOn time
|
|
case 'm': // MistDelay time
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= 0 && val <= 1023) {
|
|
status.nMistDuty = val;
|
|
}
|
|
}
|
|
Serial.printf("%s SerialSet: Mist %s (Duty: %d)\n",
|
|
printStatus(tick), status.nMistDuty > 0 ? "ON" : "OFF", status.nMistDuty);
|
|
break;
|
|
case 'l': //Light1
|
|
case 'L':
|
|
if (idx > 2) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= PWM_OFF && val <= PWM_FULL) {
|
|
status.nLightTargetDuty = val;
|
|
}
|
|
}
|
|
Serial.printf("%s SerialSet: Light1 %s (%d --> %d)\n",
|
|
printStatus(tick), status.nLightDuty > 0 ? "ON" : "OFF",
|
|
status.nLightDuty, status.nLightTargetDuty);
|
|
break;
|
|
case 'd': // Display Sensor
|
|
if (idx < 2) {
|
|
bShowSensor = !bShowSensor;
|
|
} else {
|
|
val = atoi(&buffer[1]);
|
|
bShowSensor = val == 0 ? false : true;
|
|
}
|
|
Serial.printf("%s SerialSet: DisplaySensor %s\n", printStatus(tick), bShowSensor ? "On" : "Off");
|
|
break;
|
|
case 'p': // Print
|
|
case 'P':
|
|
break;
|
|
case 's': // Save Config
|
|
case 'S':
|
|
history.savePID();
|
|
config.save();
|
|
Serial.printf("%s Config Saved\n", printStatus(tick));
|
|
break;
|
|
case 'Y': // Device Type
|
|
case 'y':
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
char *sz = NULL;
|
|
if (val > TYPE_NONE && val < TYPE_DEVICE_END) {
|
|
config.m_nDeviceType = val;
|
|
Serial.printf("%s SeriaSet: DeviceType %s\n", printStatus(tick), strDeviceType[val]);
|
|
} else {
|
|
Serial.printf("%s SerialSet: Invalid DeviceType\n");
|
|
}
|
|
}
|
|
break;
|
|
case 'Z':
|
|
case 'z':
|
|
if (idx > 1) {
|
|
val = atoi(&buffer[1]);
|
|
if (val >= 0 && val <= 10000) {
|
|
//ESP_LOGI(TAG,"%s SerialSet: Set Heater Duty %.1f%%\n", printStatus(tick), dutyPercent);
|
|
status.nHeater1Duty = val;
|
|
setHeater1Duty(status.nHeater1Duty);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Clear Buffer
|
|
idx = 0;
|
|
} else {
|
|
idx++;
|
|
}
|
|
}
|
|
} |