Every other long button press

I am trying get arduino to brighten up the led while button is been pressed and stop when button is lifted. If I press the button second time, the LED should start dimming. For some reason my code never stops brightening up the LED and also never starts dimming the led. Here is how far I have gotten so far, all advice is appreciated.

const int b1 = 3;
const int led = 10;
const int DEBOUNCE_HIDASTUS = 50;
const int PITKA_PAINALLUS = 1000;
const int muutos = 5;

int nykyinenTila;
int viimeinenTila = LOW;
int viimeinTasainenTila = LOW;

int kirkkaus = 0;
int tavoiteKirkkaus = 255;
int vaihtaja = 0;


unsigned long debounce = 0;
unsigned long nykyinenPainallus = 0;
long painonKesto;

bool painaa = false;
bool pitkaPainallusHavaittu = false;

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(b1, INPUT);
  }

void loop(){

nykyinenTila = digitalRead(b1);

if (nykyinenTila != viimeinenTila) {
    debounce = millis();
    viimeinenTila = nykyinenTila;
  }

  if ((millis() - debounce) > DEBOUNCE_HIDASTUS) {
    if (viimeinTasainenTila == HIGH && nykyinenTila == LOW){
      nykyinenPainallus = millis();
      painaa = true;
      pitkaPainallusHavaittu = false;
      Serial.println("painettu");
    }else if (viimeinTasainenTila == LOW && nykyinenTila == HIGH){
      painaa = false;
      Serial.println("irroitettu");
    }

    if (painaa == true && pitkaPainallusHavaittu == false){
      painonKesto = millis() - nykyinenPainallus;
      if (painonKesto > PITKA_PAINALLUS){
        pitkaPainallusHavaittu = true;

        kirkastajaTaiHimmentaja();
        vaihtaja++;
        Serial.println(vaihtaja);
      }
    }
    viimeinTasainenTila = nykyinenTila;
  }
}
void kirkastajaTaiHimmentaja(){

  if ((painonKesto > PITKA_PAINALLUS) && (pitkaPainallusHavaittu == true) && (vaihtaja % 2 == 0)){
    
      kirkkaus = kirkkaus + muutos;
      for (kirkkaus = 0; kirkkaus < tavoiteKirkkaus; kirkkaus++){
      
      analogWrite(led, kirkkaus);
      Serial.println(vaihtaja);
      delay(50);
      }

    }  
  
  if((painonKesto > PITKA_PAINALLUS) && (pitkaPainallusHavaittu == true) && (vaihtaja % 2 == 1)){
    kirkkaus = kirkkaus - muutos;
      for (kirkkaus = 255; kirkkaus > tavoiteKirkkaus; kirkkaus--){
      
      analogWrite(led, kirkkaus);
      Serial.println(vaihtaja);
      delay(50);
  }
  }
}




Can I give you an example of how detect a long press then increase a variable?

For me the variables names looks like:

Captura de tela de 2023-02-12 20.45.51

Please do give me the example, sorry about the variable names, they are all in Finnish

Try this:

Where is variable 'debounce' updated after this statement is executed?

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