Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
225.- Wemos D1 R32 ESP32. Sensores de contacto. Interrupciones.
- Un sensor de contacto es simplemente una conexión que cuando la tocamos activamos un pulso.
- En nuestro caso pondremos un cablecito en el pin IO12 y otro en IO14 de la placa, cuando los toquemos, se encenderá el LED16 o el LED17 según el código.

- Estos GPIO se pueden utilizar como sensores de contacto:
T0: IO4
T1: IO0
T2: IO2
T3: IO15
T4: IO13
T5: IO12
T6: IO14
T7: IO27
T8: IO33
T9: IO32
________________________________
- Código.
|
// Juan Antonio Villalpando
// kio4.com
// Sensores de toque.
#define Toca12 T5 // El pin IO12 es el T5
#define Toca14 T6 // El pin IO14 es el T6
#define LED16 16 // Es el pin 16 de la placa.
#define LED17 17 // Es el pin 17 de la placa.
int toque12 = 100;
int toque14 = 100;
void setup()
{
Serial.begin(115200);
digitalWrite (Toca12, LOW);
digitalWrite (Toca14, LOW);
pinMode(LED16, OUTPUT);
pinMode(LED17, OUTPUT);
}
void loop() {
////////////// Comprueba Toca12 //////////////
toque12 = touchRead(Toca12);
Serial.println(toque12); // Obtiene el valor tocado.
if (toque12 < 50) // Si es menor de 50 encenderá.
{
digitalWrite (LED16, HIGH);
}
else
{
digitalWrite (LED16, LOW);
}
////////////// Comprueba Toca14 //////////////
toque14 = touchRead(Toca14);
Serial.println(toque14); // Obtiene el valor tocado.
if (toque14 < 50) // Si es menor de 50 encenderá.
{
digitalWrite (LED17, HIGH);
}
else
{
digitalWrite (LED17, LOW);
}
delay(200);
}
|
- Observa el código y el Monitor Serie, cuando tocamos cambia el valor de toque12 y toque14, si es menor de 50 se enciende el LED correspondiente.
- La lectura la realiza la función touchRead.
________________________________
- Mediante interrupciones.
https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Touch/TouchInterrupt/TouchInterrupt.ino
- En este código se toman los terminales IO2 y IO15 que corresponden a T2 y T3.
|
/*
This is un example howto use Touch Intrrerupts
The bigger the threshold, the more sensible is the touch
*/
int threshold = 40;
bool touch1detected = false;
bool touch2detected = false;
void gotTouch1(){
touch1detected = true;
}
void gotTouch2(){
touch2detected = true;
}
void setup() {
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
Serial.println("ESP32 Touch Interrupt Test");
touchAttachInterrupt(T2, gotTouch1, threshold); // T2 es el terminal IO2
touchAttachInterrupt(T3, gotTouch2, threshold); // T3 es el terminal IO15
}
void loop(){
if(touch1detected){
touch1detected = false;
Serial.println("Touch 1 detected");
}
if(touch2detected){
touch2detected = false;
Serial.println("Touch 2 detected");
}
}
|
________________________________
- Toques e interrupciones.
- Aquí pongo un ejemplo más fácil de interpretar.
- Conecta un cable al terminal IO12 y otro al IO14, cuando los toque se encenderá/apagará el LED2.
- Los terminales de toque IO12 y IO14 corresponden a T5 y T6 respectivamente.
- Fíjate que no hay código en el loop.
- El chequeo del toque se hace por interrupción.
- Fíjate que para chequear los toques se utiliza: touchAttachInterrupt
- Si fueran pulsadores se utilizaría: attachInterrupt
SensoresContacto_Int_2.ino
|
// Juan A. Villalpando.
// KIO4.COM
// Interrupciones con Toques.
const int LED2 = 2;
const int toca12 = 12;
const int toca14 = 14;
// Funciones cuando se producen las interrupciones.
void IRAM_ATTR toco_el_12() {
digitalWrite(LED2, HIGH);
}
void IRAM_ATTR toco_el_14() {
digitalWrite(LED2, LOW);
}
void setup() {
touchAttachInterrupt(digitalPinToInterrupt(T5), toco_el_12, 50);
touchAttachInterrupt(digitalPinToInterrupt(T6), toco_el_14, 50);
pinMode(LED2, OUTPUT);
}
void loop() {}
|
_______________________________
|