How do i control led by using ADC touch

I wanna use four capacitive buttons to switch on/off two leds.
Two buttons to swich on and off led1, the other two to swich on and off led2.

But I really know nothing about coding. Can anyone please help me with my terrible code?

#include <ADCTouch.h>

int ref0, ref1, ref2, ref3;     //reference values to remove offset

int led1 =  10;
int led2 =  11;
boolean change=false;
//int state LOW;

void setup() 
{
    // No pins to setup, pins can still be used regularly, although it will affect readings

    Serial.begin(9600);

     
     
    ref0 = ADCTouch.read(A0, 500);    //create reference values to 
    ref1 = ADCTouch.read(A1, 500);    //account for the capacitance of the pad
    ref2 = ADCTouch.read(A2, 500);
    ref3 = ADCTouch.read(A3, 500);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(ref0, INPUT);
  pinMode(ref1, INPUT);
  pinMode(ref2, INPUT);
  pinMode(ref3, INPUT);

  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
} 

void loop() 
{

    int value0 = ADCTouch.read(A0);   //
    int value1 = ADCTouch.read(A1);   //   
    int value2 = ADCTouch.read(A2);
    int value3 = ADCTouch.read(A3);

    value0 -= ref0;       //remove offset
    value1 -= ref1;
    value2 -= ref2;
    value3 -= ref3;

 
 if (value0>40 == HIGH && value1<40 == LOW) {
    delay(10);//
    digitalWrite(led1, HIGH);
   } 
 if (value0<40 == LOW && value1>40 == HIGH) {
    delay(10);//
    digitalWrite(led1, LOW);
   } 
   if (value2>40 == HIGH && value3<40 == LOW) {
    delay(10);//
    digitalWrite(led2, HIGH);
   } 
 if (value2<40 == LOW && value3>40 == HIGH) {
    delay(10);//
    digitalWrite(led2, LOW);
   } 

     
}

Those pinModes for ref0 et al look suspect

where you learn such expressions?

I'm not sure how to let leds sense that I touched ref0-3

I searched it from the Chinese website and saw the examples of one button switching on/off one led, then I tried putting their partial code in mine... I have no idea what I was typing

#include <ADCTouch.h>

const uint8_t led1 =  10;
const uint8_t led2 =  11;

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
}

void loop(){
  int value0 = ADCTouch.read(A0);
  int value1 = ADCTouch.read(A1);
  int value2 = ADCTouch.read(A2);
  int value3 = ADCTouch.read(A3);

  if (value0 > 40)digitalWrite(led1, HIGH);
  if (value1 > 40)digitalWrite(led1, LOW);

  if (value2 > 40)digitalWrite(led2, HIGH);
  if (value3 > 40)digitalWrite(led2, LOW);
}

Thank you so much! I dont know why but my leds keep glowing.
I think it's about the problems about the unstable number from sensor.
I'll try to solve them. Really appreciate your help.

Why not find out, by printing them?

I see the numbers and noticed no problems.
I change the code with analogWrite and it works.
Thank you for the suggestions.

 if (value0>40  && value1<40) {
    delay(10);//
    analogWrite(led1,150);
   } 
 if (value0<40&& value1>40) {
    delay(10);//
    analogWrite(led1,0);
   } 
   if (value2>40  && value3<40 ) {
    delay(10);//
    analogWrite(led2,150);
   } 
 if (value2<40  && value3>40) {
    delay(10);//
    analogWrite(led2,0);
   } 

     
}
   

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.