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