Fix ESP32 analog indexes

This commit is contained in:
Theo Arends 2020-08-04 18:01:51 +02:00
parent ce388c799f
commit d321b6cf68

View File

@ -210,7 +210,7 @@ void AdcEvery250ms(void) {
if ((new_value < Adc[idx].last_value -10) || (new_value > Adc[idx].last_value +10)) { if ((new_value < Adc[idx].last_value -10) || (new_value > Adc[idx].last_value +10)) {
Adc[idx].last_value = new_value; Adc[idx].last_value = new_value;
uint16_t value = Adc[idx].last_value / 10; uint16_t value = Adc[idx].last_value / 10;
Response_P(PSTR("{\"ANALOG\":{\"A%ddiv10\":%d}}"), idx, (value > 99) ? 100 : value); Response_P(PSTR("{\"ANALOG\":{\"A%ddiv10\":%d}}"), idx +1, (value > 99) ? 100 : value);
XdrvRulesProcess(); XdrvRulesProcess();
} }
} }
@ -219,7 +219,7 @@ void AdcEvery250ms(void) {
if (new_value && (new_value != Adc[idx].last_value)) { if (new_value && (new_value != Adc[idx].last_value)) {
Adc[idx].last_value = new_value; Adc[idx].last_value = new_value;
uint16_t value = new_value / Adc[idx].param1; uint16_t value = new_value / Adc[idx].param1;
Response_P(PSTR("{\"ANALOG\":{\"JOY%d\":%d}}"), idx, value); Response_P(PSTR("{\"ANALOG\":{\"Joy%d\":%d}}"), idx +1, value);
XdrvRulesProcess(); XdrvRulesProcess();
} else { } else {
Adc[idx].last_value = 0; Adc[idx].last_value = 0;
@ -305,21 +305,33 @@ void AdcEverySecond(void) {
} }
} }
void AdcShowContinuation(bool *jsonflg) {
if (*jsonflg) {
ResponseAppend_P(PSTR(","));
} else {
ResponseAppend_P(PSTR(",\"ANALOG\":{"));
*jsonflg = true;
}
}
void AdcShow(bool json) { void AdcShow(bool json) {
bool domo_flag[ADC_END] = { false }; bool domo_flag[ADC_END] = { false };
char adc_name[10]; // ANALOG12 char adc_name[10]; // ANALOG8
bool jsonflg = false;
for (uint32_t idx = 0; idx < Adcs.present; idx++) { for (uint32_t idx = 0; idx < Adcs.present; idx++) {
snprintf_P(adc_name, sizeof(adc_name), PSTR("ANALOG%d"), idx); snprintf_P(adc_name, sizeof(adc_name), PSTR("Analog%d"), idx +1);
switch (Adc[idx].type) { switch (Adc[idx].type) {
case ADC_INPUT: { case ADC_INPUT: {
uint16_t analog = AdcRead(Adc[idx].pin, 5); uint16_t analog = AdcRead(Adc[idx].pin, 5);
if (json) { if (json) {
ResponseAppend_P(PSTR(",\"%s\":{\"A0\":%d}"), adc_name, analog); AdcShowContinuation(&jsonflg);
ResponseAppend_P(PSTR("\"A%d\":%d"), idx +1, analog);
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_PD(HTTP_SNS_ANALOG, "", idx, analog); WSContentSend_PD(HTTP_SNS_ANALOG, "", idx +1, analog);
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }
break; break;
@ -329,7 +341,8 @@ void AdcShow(bool json) {
dtostrfd(Adc[idx].temperature, Settings.flag2.temperature_resolution, temperature); dtostrfd(Adc[idx].temperature, Settings.flag2.temperature_resolution, temperature);
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_TEMP, adc_name, temperature); AdcShowContinuation(&jsonflg);
ResponseAppend_P(PSTR("\"" D_JSON_TEMPERATURE "%d\":%s"), idx +1, temperature);
if ((0 == tele_period) && (!domo_flag[ADC_TEMP])) { if ((0 == tele_period) && (!domo_flag[ADC_TEMP])) {
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
DomoticzSensor(DZ_TEMP, temperature); DomoticzSensor(DZ_TEMP, temperature);
@ -350,7 +363,8 @@ void AdcShow(bool json) {
uint16_t adc_light = AdcGetLux(idx); uint16_t adc_light = AdcGetLux(idx);
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_ILLUMINANCE, adc_name, adc_light); AdcShowContinuation(&jsonflg);
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "%d\":%d"), idx +1, adc_light);
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
if ((0 == tele_period) && (!domo_flag[ADC_LIGHT])) { if ((0 == tele_period) && (!domo_flag[ADC_LIGHT])) {
DomoticzSensor(DZ_ILLUMINANCE, adc_light); DomoticzSensor(DZ_ILLUMINANCE, adc_light);
@ -368,7 +382,8 @@ void AdcShow(bool json) {
uint16_t adc_range = AdcGetRange(idx); uint16_t adc_range = AdcGetRange(idx);
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_RANGE, adc_name, adc_range); AdcShowContinuation(&jsonflg);
ResponseAppend_P(PSTR("\"" D_JSON_RANGE "%d\":%d"), idx +1, adc_range);
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_PD(HTTP_SNS_RANGE, adc_name, adc_range); WSContentSend_PD(HTTP_SNS_RANGE, adc_name, adc_range);
@ -390,8 +405,9 @@ void AdcShow(bool json) {
dtostrfd(Adc[idx].energy, Settings.flag2.energy_resolution, energy_chr); dtostrfd(Adc[idx].energy, Settings.flag2.energy_resolution, energy_chr);
if (json) { if (json) {
ResponseAppend_P(PSTR(",\"%s\":{\"" D_JSON_ENERGY "\":%s,\"" D_JSON_POWERUSAGE "\":%s,\"" D_JSON_VOLTAGE "\":%s,\"" D_JSON_CURRENT "\":%s}"), AdcShowContinuation(&jsonflg);
adc_name, energy_chr, power_chr, voltage_chr, current_chr); ResponseAppend_P(PSTR("\"CTEnergy%d\":{\"" D_JSON_ENERGY "\":%s,\"" D_JSON_POWERUSAGE "\":%s,\"" D_JSON_VOLTAGE "\":%s,\"" D_JSON_CURRENT "\":%s}"),
idx +1, energy_chr, power_chr, voltage_chr, current_chr);
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
if ((0 == tele_period) && (!domo_flag[ADC_CT_POWER])) { if ((0 == tele_period) && (!domo_flag[ADC_CT_POWER])) {
DomoticzSensor(DZ_POWER_ENERGY, power_chr); DomoticzSensor(DZ_POWER_ENERGY, power_chr);
@ -410,7 +426,19 @@ void AdcShow(bool json) {
} }
break; break;
} }
case ADC_JOY: {
uint16_t new_value = AdcRead(Adc[idx].pin, 1);
uint16_t value = new_value / Adc[idx].param1;
if (json) {
AdcShowContinuation(&jsonflg);
ResponseAppend_P(PSTR("\"Joy%d\":%d"), idx +1, value);
} }
break;
}
}
}
if (jsonflg) {
ResponseJsonEnd();
} }
} }
@ -474,7 +502,7 @@ void CmndAdcParam(void) {
// AdcParam // AdcParam
AdcGetSettings(idx); AdcGetSettings(idx);
Response_P(PSTR("{\"" D_CMND_ADCPARAM "%d\":[%d,%d,%d"), idx +1, Adcs.type, Adc[idx].param1, Adc[idx].param2); Response_P(PSTR("{\"" D_CMND_ADCPARAM "%d\":[%d,%d,%d"), idx +1, Adcs.type, Adc[idx].param1, Adc[idx].param2);
if (ADC_RANGE == my_adc0) { if (ADC_RANGE == Adc[idx].type) {
ResponseAppend_P(PSTR(",%d,%d"), Adc[idx].param3, Adc[idx].param4); ResponseAppend_P(PSTR(",%d,%d"), Adc[idx].param3, Adc[idx].param4);
} else { } else {
int value = Adc[idx].param3; int value = Adc[idx].param3;