Page 1 of 1

need help with touch GPIO

Posted: Sun May 12, 2019 11:12 am
by am.steen
I write a code for two touch GPIO T0 and T3 to turn on leds at GPIO 22,23
this is my code

Code: Select all

int threshold = 50;
bool touch1detected = false;
bool touch2detected = false;
void gotTouch(){
 touch1detected = true;
}

void gotTouch1(){
 touch2detected = true;
}

void setup() {
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  printf("\n ESP32 Touch Interrupt Test\n");
  touchAttachInterrupt(T0, gotTouch, threshold);
  touchAttachInterrupt(T3, gotTouch1, threshold);
  pinMode (22, OUTPUT);
  pinMode (23, OUTPUT);
}

void loop(){
  if(touch1detected){
    touch1detected = false;
    Serial.println("Touch 0 ON");
    digitalWrite(22, HIGH);
    delay(1000);
  }
    else{
      touch1detected = true;
digitalWrite(22, LOW);
Serial.println("Touch 0 OFF");
    } 
 
  
  if(touch2detected){
    touch2detected = false;
    Serial.println("Touch 3 ON");
    digitalWrite(23, HIGH);
    delay(1000);
  }
    else{
digitalWrite(23, LOW);
Serial.println("Touch 3 OFF");
    
}

}
and it works but I need another thing :-
1. when touch T0 it turns led at GPIO22 on
2. when touch T0 again it turns led at GPIO22 off
3. when touch T3 it turns led at GPIO23 on
4. when touch T3 again it turns led at GPIO23 off

and so on loop

please help

Re: need help with touch GPIO

Posted: Mon May 13, 2019 4:40 am
by username
See if this works for you

Code: Select all

int threshold = 50;
bool touch1detected = false;
bool touch2detected = false;
bool touch1state = false;
bool touch2state = false;

void gotTouch()
{
 touch1detected = true;
}

void gotTouch1()
{
 touch2detected = true;
}

void setup() 
{
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  printf("\n ESP32 Touch Interrupt Test\n");
  touchAttachInterrupt(T0, gotTouch, threshold);
  touchAttachInterrupt(T3, gotTouch1, threshold);
  pinMode (22, OUTPUT);
  pinMode (23, OUTPUT);
}

void loop()
{
    if(touch1detected)
    {
        if(touch1state == false)
        {
            touch1state = true;
            Serial.println("Touch 0 ON");
            digitalWrite(22, HIGH);
        }
        else
        {
            touch1state = false;
            digitalWrite(22, LOW);
            Serial.println("Touch 0 OFF");
        }

        // Stay here until there is not more touch detected 
        // So we dont re-trigger
        do
        {
            touch1detected = false;
            delay(250);
        }while(touch1detected);

    } 


    if(touch2detected)
    {
        if(touch2state == false)
        {
            touch2state = true;
            Serial.println("Touch 3 ON");
            digitalWrite(23, HIGH);
        }
        else
        {
            touch2state = false;
            digitalWrite(23, LOW);
            Serial.println("Touch 3 OFF");
        }

        // Stay here until there is not more touch detected 
        // So we dont re-trigger
        do
        {
            touch2detected = false;
            delay(250);
        }while(touch2detected);

    } 


}

Re: need help with touch GPIO

Posted: Mon May 13, 2019 8:53 am
by am.steen
Yes it works

Thank you very much