Skip to content

Commit 130dbd6

Browse files
authored
feat(gpio): allows mixing digital and analog read/write operations
1 parent 7485c65 commit 130dbd6

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

cores/esp32/esp32-hal-gpio.c

+8-9
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,11 @@ extern void ARDUINO_ISR_ATTR __digitalWrite(uint8_t pin, uint8_t val) {
170170
return;
171171
}
172172
#endif // RGB_BUILTIN
173-
if (perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL) {
174-
gpio_set_level((gpio_num_t)pin, val);
175-
} else {
176-
log_e("IO %i is not set as GPIO.", pin);
173+
// if the pin is not in GPIO mode, make it happen
174+
if (perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL) {
175+
__pinMode(uint8_t pin, OUTPUT);
177176
}
177+
gpio_set_level((gpio_num_t)pin, val);
178178
}
179179

180180
extern int ARDUINO_ISR_ATTR __digitalRead(uint8_t pin) {
@@ -184,12 +184,11 @@ extern int ARDUINO_ISR_ATTR __digitalRead(uint8_t pin) {
184184
}
185185
#endif
186186

187-
if (perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) != NULL) {
188-
return gpio_get_level((gpio_num_t)pin);
189-
} else {
190-
log_e("IO %i is not set as GPIO.", pin);
191-
return 0;
187+
// if the pin is not in GPIO mode, make it happen
188+
if (perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL) {
189+
__pinMode(uint8_t pin, INPUT);
192190
}
191+
return gpio_get_level((gpio_num_t)pin);
193192
}
194193

195194
static void ARDUINO_ISR_ATTR __onPinInterrupt(void *arg) {

0 commit comments

Comments
 (0)