|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

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.

Sensores_Contacto.ino

// 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.

SensoresContacto_Int.ino

/*
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() {}

 

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información