Redesign GPIO to 16-bit

This commit is contained in:
Theo Arends 2020-09-29 14:08:48 +02:00
parent 46cbe13e9b
commit 805f93cfab
6 changed files with 117 additions and 77 deletions

View File

@ -1142,6 +1142,27 @@ void TemplateConvert(uint8_t template8[], uint16_t template16[]) {
template16[i] = GpioConvert(template8[i]); template16[i] = GpioConvert(template8[i]);
} }
template16[(sizeof(mytmplt) / 2) -2] = Adc0Convert(template8[sizeof(mytmplt8285) -1]); template16[(sizeof(mytmplt) / 2) -2] = Adc0Convert(template8[sizeof(mytmplt8285) -1]);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: TemplateConvert"));
AddLogBuffer(LOG_LEVEL_DEBUG, template8, sizeof(mytmplt8285));
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t*)template16, sizeof(mytmplt) / 2, 2);
}
void ConvertGpios(void) {
if (Settings.user_template8.flag != 255) {
// Convert 8-bit user template
TemplateConvert((uint8_t*)&Settings.user_template8, (uint16_t*)&Settings.user_template);
Settings.user_template8.flag = 255;
for (uint32_t i = 0; i < sizeof(Settings.my_gp8.io); i++) {
Settings.my_gp.io[i] = GpioConvert(Settings.my_gp8.io[i]);
}
Settings.my_gp.io[(sizeof(myio) / 2) -1] = Adc0Convert(Settings.my_adc0);
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: ConvertGpios"));
AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&Settings.my_gp8.io, sizeof(myio8));
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t *)&Settings.my_gp.io, sizeof(myio) / 2, 2);
}
} }
#endif // ESP8266 #endif // ESP8266
@ -1247,28 +1268,29 @@ void GetInternalTemplate(void* ptr, uint32_t module, uint32_t option) {
memcpy_P(&template8, &kModules8285[module_template - TMP_WEMOS], sizeof(template8)); memcpy_P(&template8, &kModules8285[module_template - TMP_WEMOS], sizeof(template8));
} }
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&template8, sizeof(mytmplt)); // AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&template8, sizeof(mytmplt8285));
// template16 = GPIO 0,1,2,3,4,5,9,10,12,13,14,15,16,Adc,Flg // template16 = GPIO 0,1,2,3,4,5,9,10,12,13,14,15,16,Adc,Flg
uint16_t template16[(sizeof(mytmplt) / 2)] = { GPIO_NONE }; uint16_t template16[(sizeof(mytmplt) / 2)] = { GPIO_NONE };
TemplateConvert(template8, template16); TemplateConvert(template8, template16);
uint32_t index = 0; uint32_t index = 0;
uint32_t size = sizeof(mycfgio); // template16[module_template].gp uint32_t size = sizeof(mycfgio); // template16[module_template].gp
switch (option) { switch (option) {
case 2: { case 2: {
index = sizeof(template16) -2; // template16[module_template].flag index = (sizeof(mytmplt) / 2) -1; // template16[module_template].flag
size = 2; size = 2;
break; break;
} }
case 3: { case 3: {
size = sizeof(template16); // template16[module_template] size = sizeof(mytmplt); // template16[module_template]
break; break;
} }
} }
memcpy(ptr, &template16[index], size); memcpy(ptr, &template16[index], size);
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)ptr, size); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: GetInternalTemplate option %d"), option);
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t *)ptr, size / 2, 2);
} }
#endif // ESP8266 #endif // ESP8266
@ -1356,7 +1378,7 @@ uint32_t ValidPin(uint32_t pin, uint32_t gpio)
// if (!is_8285 && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's // if (!is_8285 && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
if ((WEMOS == Settings.module) && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's if ((WEMOS == Settings.module) && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
if ((pin == 9) || (pin == 10)) { if ((9 == pin) || (10 == pin)) {
return GPIO_NONE; // Disable possible flash GPIO9 and GPIO10 return GPIO_NONE; // Disable possible flash GPIO9 and GPIO10
} }
} }
@ -1366,6 +1388,11 @@ uint32_t ValidPin(uint32_t pin, uint32_t gpio)
bool ValidGPIO(uint32_t pin, uint32_t gpio) bool ValidGPIO(uint32_t pin, uint32_t gpio)
{ {
#ifdef ESP8266
#ifdef USE_ADC_VCC
if (17 == pin) { return false; } // ADC0 = GPIO17
#endif
#endif
return (GPIO_USER == ValidPin(pin, BGPIO(gpio))); // Only allow GPIO_USER pins return (GPIO_USER == ValidPin(pin, BGPIO(gpio))); // Only allow GPIO_USER pins
} }
@ -1465,6 +1492,9 @@ bool JsonTemplate(const char* dataBuf)
if (obj[D_JSON_GPIO].success()) { if (obj[D_JSON_GPIO].success()) {
#ifdef ESP8266 #ifdef ESP8266
if (!obj[D_JSON_GPIO][13].success()) { // Old template if (!obj[D_JSON_GPIO][13].success()) { // Old template
AddLog_P(LOG_LEVEL_DEBUG, PSTR("TPL: Converting template ..."));
uint8_t template8[sizeof(mytmplt8285)] = { GPIO_NONE }; uint8_t template8[sizeof(mytmplt8285)] = { GPIO_NONE };
for (uint32_t i = 0; i < ARRAY_SIZE(template8) -1; i++) { for (uint32_t i = 0; i < ARRAY_SIZE(template8) -1; i++) {
template8[i] = obj[D_JSON_GPIO][i] | 0; template8[i] = obj[D_JSON_GPIO][i] | 0;

View File

@ -90,16 +90,14 @@ void ButtonInit(void)
Button.present++; Button.present++;
pinMode(Pin(GPIO_KEY1, i), bitRead(Button.no_pullup_mask, i) ? INPUT : ((16 == Pin(GPIO_KEY1, i)) ? INPUT_PULLDOWN_16 : INPUT_PULLUP)); pinMode(Pin(GPIO_KEY1, i), bitRead(Button.no_pullup_mask, i) ? INPUT : ((16 == Pin(GPIO_KEY1, i)) ? INPUT_PULLDOWN_16 : INPUT_PULLUP));
} }
/*
#ifdef ESP8266 #ifdef ESP8266
#ifndef USE_ADC_VCC #ifndef USE_ADC_VCC
else if ((99 == Button.adc) && ((ADC0_BUTTON == my_adc0) || (ADC0_BUTTON_INV == my_adc0))) { else if ((99 == Button.adc) && AdcButtonPresent(0)) {
Button.present++; Button.present++;
Button.adc = i; Button.adc = i;
} }
#endif // USE_ADC_VCC #endif // USE_ADC_VCC
#endif // ESP8266 #endif // ESP8266
*/
} }
} }
@ -169,14 +167,7 @@ void ButtonHandler(void)
#ifndef USE_ADC_VCC #ifndef USE_ADC_VCC
if (Button.adc == button_index) { if (Button.adc == button_index) {
button_present = 1; button_present = 1;
/* button = AdcGetButton(0);
if (ADC0_BUTTON_INV == my_adc0) {
button = (AdcRead(1) < 128);
}
else if (ADC0_BUTTON == my_adc0) {
button = (AdcRead(1) > 128);
}
*/
} }
#endif // USE_ADC_VCC #endif // USE_ADC_VCC
#else // ESP32 #else // ESP32

View File

@ -1477,11 +1477,7 @@ void GpioInit(void)
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DBG: Used GPIOs %d"), GPIO_SENSOR_END); // AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DBG: Used GPIOs %d"), GPIO_SENSOR_END);
#ifdef ESP8266 #ifdef ESP8266
if (Settings.user_template8.flag != 255) { ConvertGpios();
// Convert 8-bit user template
TemplateConvert((uint8_t*)&Settings.user_template8, (uint16_t*)&Settings.user_template);
Settings.user_template8.flag = 255;
}
#endif // ESP8266 #endif // ESP8266
for (uint32_t i = 0; i < ARRAY_SIZE(Settings.user_template.gp.io); i++) { for (uint32_t i = 0; i < ARRAY_SIZE(Settings.user_template.gp.io); i++) {

View File

@ -596,19 +596,6 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_ETH_PHY_MDC), AGPIO(GPIO_ETH_PHY_MDC),
AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet
#endif #endif
#endif // ESP32
#ifdef USE_ADC
#ifdef ESP8266
AGPIO(GPIO_ADC_INPUT), // Analog inputs
AGPIO(GPIO_ADC_TEMP), // Thermistor
AGPIO(GPIO_ADC_LIGHT), // Light sensor
AGPIO(GPIO_ADC_BUTTON), // Button
AGPIO(GPIO_ADC_BUTTON_INV),
AGPIO(GPIO_ADC_RANGE), // Range
AGPIO(GPIO_ADC_CT_POWER), // Current
AGPIO(GPIO_ADC_JOY), // Joystick
#else // ESP32
AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs
AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor
AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor
@ -617,10 +604,23 @@ const uint16_t kGpioNiceList[] PROGMEM = {
AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range
AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current
AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick
#endif // ESP8266 or ESP32 #endif // ESP32
#endif // USE_ADC
}; };
#ifdef ESP8266
const uint16_t kAdcNiceList[] PROGMEM = {
GPIO_NONE, // Not used
AGPIO(GPIO_ADC_INPUT), // Analog inputs
AGPIO(GPIO_ADC_TEMP), // Thermistor
AGPIO(GPIO_ADC_LIGHT), // Light sensor
AGPIO(GPIO_ADC_BUTTON), // Button
AGPIO(GPIO_ADC_BUTTON_INV),
AGPIO(GPIO_ADC_RANGE), // Range
AGPIO(GPIO_ADC_CT_POWER), // Current
AGPIO(GPIO_ADC_JOY), // Joystick
};
#endif // ESP8266
/*********************************************************************************************\ /*********************************************************************************************\
* ATTENTION: No user changeable features beyond this point - do not add templates !!! * ATTENTION: No user changeable features beyond this point - do not add templates !!!
\*********************************************************************************************/ \*********************************************************************************************/

View File

@ -486,13 +486,14 @@ const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
"if(8==i){j=12;}" "if(8==i){j=12;}"
"sk(g[i],j);" // Set GPIO "sk(g[i],j);" // Set GPIO
"j++;" "j++;"
"}" "}";
"g=o.shift();"; // FLAG // "g=o.shift();"; // FLAG
const char HTTP_SCRIPT_TEMPLATE3[] PROGMEM = const char HTTP_SCRIPT_TEMPLATE3[] PROGMEM =
"\";" "\";"
"sk(g&15," STR(ADC0_PIN) ");" // Set ADC0 "sk(g[13]," STR(ADC0_PIN) ");"; // Set ADC0
"g>>=4;"; // "g>>=4;";
const char HTTP_SCRIPT_TEMPLATE4[] PROGMEM = const char HTTP_SCRIPT_TEMPLATE4[] PROGMEM =
"g=o.shift();" // FLAG
"for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){" "for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){"
"p=(g>>i)&1;" "p=(g>>i)&1;"
"eb('c'+i).checked=p;" // Set FLAG checkboxes "eb('c'+i).checked=p;" // Set FLAG checkboxes
@ -1760,16 +1761,19 @@ void HandleTemplateConfiguration(void)
WSContentSend_P(HTTP_SCRIPT_TEMPLATE2); WSContentSend_P(HTTP_SCRIPT_TEMPLATE2);
//#ifdef ESP8266 #ifdef ESP8266
// WSContentSend_P(PSTR("os=\"")); WSContentSend_P(PSTR("os=\""));
// for (uint32_t i = 0; i < ADC0_END; i++) { // FLAG: }2'0'>None (0)}3}2'17'>Analog (17)}3... for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // FLAG: }2'0'>None}3}2'17'>Analog}3...
// if (1 == i) { if (1 == i) {
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, ADC0_USER, D_SENSOR_USER, ADC0_USER); // }2'15'>User (15)}3 WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'15'>User}3
// } }
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i); // WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i);
// } uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0;
// WSContentSend_P(HTTP_SCRIPT_TEMPLATE3); uint32_t midx = BGPIO(ridx);
//#endif // ESP8266 WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames));
}
WSContentSend_P(HTTP_SCRIPT_TEMPLATE3);
#endif // ESP8266
WSContentSend_P(HTTP_SCRIPT_TEMPLATE4); WSContentSend_P(HTTP_SCRIPT_TEMPLATE4);
for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3" for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3"
@ -1797,15 +1801,15 @@ void HandleTemplateConfiguration(void)
// ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:200px'" : "", i); // ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:200px'" : "", i);
//#else // ESP32 //#else // ESP32
#ifdef ESP8266 //#ifdef ESP8266
WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>%s%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"), // WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>%s%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), // ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT),
(17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i, // (17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
(0==i) ? " style='width:150px'" : "", i, i); // (0==i) ? " style='width:150px'" : "", i, i);
#else // ESP32 //#else // ESP32
WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"), WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:150px'" : "", i, i); ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:150px'" : "", i, i);
#endif // ESP8266 //#endif // ESP8266
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i); WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
} }
} }
@ -1864,7 +1868,7 @@ void TemplateSaveSettings(void)
//#endif // ESP32 //#endif // ESP32
for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) { for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) {
snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i); snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i);
uint32_t state = Webserver->hasArg(webindex) << i +4; // FLAG uint32_t state = Webserver->hasArg(webindex) << i; // FLAG
flag += state; flag += state;
} }
WebGetArg("g99", tmp, sizeof(tmp)); // BASE WebGetArg("g99", tmp, sizeof(tmp)); // BASE
@ -1950,15 +1954,23 @@ void HandleModuleConfiguration(void)
} }
} }
//#ifdef ESP8266 #ifdef ESP8266
//#ifndef USE_ADC_VCC #ifndef USE_ADC_VCC
// WSContentSend_P(PSTR("os=\"")); WSContentSend_P(PSTR("os=\""));
// for (uint32_t j = 0; j < ADC0_END; j++) { /*
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, j, GetTextIndexed(stemp, sizeof(stemp), j, kAdc0Names), j); for (uint32_t j = 0; j < ADC0_END; j++) {
// } WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, j, GetTextIndexed(stemp, sizeof(stemp), j, kAdc0Names), j);
// WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_adc0); }
//#endif // USE_ADC_VCC WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_adc0);
//#endif // ESP8266 */
for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // FLAG: }2'0'>None}3}2'17'>Analog}3...
uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0;
uint32_t midx = BGPIO(ridx);
WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames));
}
WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_gp.io[(sizeof(myio) / 2) -1]);
#endif // USE_ADC_VCC
#endif // ESP8266
WSContentSend_P(PSTR("}wl(sl);")); WSContentSend_P(PSTR("}wl(sl);"));
@ -1974,15 +1986,15 @@ void HandleModuleConfiguration(void)
// (WEMOS==my_module_type)?stemp:"", i, (0==i)? D_SENSOR_BUTTON "1":(1==i)? D_SERIAL_OUT :(3==i)? D_SERIAL_IN :((9==i)||(10==i))? sesp8285 :(12==i)? D_SENSOR_RELAY "1":(13==i)? D_SENSOR_LED "1i":(14==i)? D_SENSOR :"", i); // (WEMOS==my_module_type)?stemp:"", i, (0==i)? D_SENSOR_BUTTON "1":(1==i)? D_SERIAL_OUT :(3==i)? D_SERIAL_IN :((9==i)||(10==i))? sesp8285 :(12==i)? D_SENSOR_RELAY "1":(13==i)? D_SENSOR_LED "1i":(14==i)? D_SENSOR :"", i);
//#else // ESP32 //#else // ESP32
#ifdef ESP8266 //#ifdef ESP8266
WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>%s%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"), // WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>%s%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
(WEMOS==my_module_type)?stemp:"", // (WEMOS==my_module_type)?stemp:"",
(17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i, // (17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
i, i); // i, i);
#else // ESP32 //#else // ESP32
WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>" D_GPIO "%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"), WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>" D_GPIO "%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
(WEMOS==my_module_type)?stemp:"", i, i, i); (WEMOS==my_module_type)?stemp:"", i, i, i);
#endif //#endif
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i); WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
//#endif // ESP8266 //#endif // ESP8266
} }

View File

@ -1,5 +1,5 @@
/* /*
xsns_02_analog_esp32.ino - ESP32 ADC support for Tasmota xsns_02_analog.ino - ADC support for Tasmota
Copyright (C) 2020 Theo Arends Copyright (C) 2020 Theo Arends
@ -17,7 +17,6 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
//#ifdef ESP32
#ifdef USE_ADC #ifdef USE_ADC
/*********************************************************************************************\ /*********************************************************************************************\
* ADC support for up to 8 channels on GPIO32 to GPIO39 * ADC support for up to 8 channels on GPIO32 to GPIO39
@ -250,6 +249,19 @@ void AdcEvery250ms(void) {
} }
#endif // USE_RULES #endif // USE_RULES
bool AdcButtonPresent(uint32_t idx) {
return ((ADC_BUTTON == Adc[idx].type) || (ADC_BUTTON_INV == Adc[idx].type));
}
uint8_t AdcGetButton(uint32_t idx) {
if (ADC_BUTTON_INV == Adc[idx].type) {
return (AdcRead(Adc[idx].pin, 1) < 128);
}
else if (ADC_BUTTON == Adc[idx].type) {
return (AdcRead(Adc[idx].pin, 1) > 128);
}
}
uint16_t AdcGetLux(uint32_t idx) { uint16_t AdcGetLux(uint32_t idx) {
int adc = AdcRead(Adc[idx].pin, 2); int adc = AdcRead(Adc[idx].pin, 2);
// Source: https://www.allaboutcircuits.com/projects/design-a-luxmeter-using-a-light-dependent-resistor/ // Source: https://www.allaboutcircuits.com/projects/design-a-luxmeter-using-a-light-dependent-resistor/
@ -584,4 +596,3 @@ bool Xsns02(uint8_t function) {
} }
#endif // USE_ADC #endif // USE_ADC
//#endif // ESP32