HCesp/CommSerial.cpp

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++;
}
}
}