Arduino Polska Forum
Przycisk, jak zablokować akcję przy przytrzymaniu przycisku - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Przycisk, jak zablokować akcję przy przytrzymaniu przycisku (/watek-przycisk-jak-zablokowa%C4%87-akcj%C4%99-przy-przytrzymaniu-przycisku)



Przycisk, jak zablokować akcję przy przytrzymaniu przycisku - Jazzfan - 12-04-2019

W jaki sposób uniemożliwić by wykonywała się pętla przycisku w sytuacji gdy go przytrzymamy.

W obecnej postaci kodu dzieje się tak, że jeśli przycisk przytrzymam to zasilanie zostaje włączona i wyłączana naprzemiennie, czyli stale wykonują się warunki a chciałbym tego uniknąć.

Kod:
//Constants
const int buttonPin = 2;        

//Variables
int buttonState = 0;
int flag=0;
//transistor
int powerControl = 8;
long time = 1;
long debounce = 200;

void setup() {
 Serial.begin(9600);
 //Input or output?
 // pinMode(ledPin, OUTPUT);    
 pinMode(buttonPin, INPUT_PULLUP);    
 //pinMode(buttonPin, INPUT);  
 

 //transistor
 digitalWrite(powerControl, HIGH);
 pinMode(powerControl, OUTPUT);
 Serial.println("Transistor base set to pin " + String(powerControl, DEC));
 
 
}

void loop(){
 //Read button state (pressed or not pressed?)
 buttonState = digitalRead(buttonPin);
 //If button pressed...
 if (buttonState == LOW && millis() - time > debounce) {
   //...ones, turn led on!
   if ( flag == 0){
     
   digitalWrite(powerControl, LOW);
   Serial.println("Servo Power is ON");
   Serial.println(flag);
     flag=1; //change flag variable
     
   }
   //...twice, turn led off!
   else if ( flag == 1){
     
     digitalWrite(powerControl, HIGH);
   Serial.println("Servo power is OFF");
   Serial.println(flag);
     flag=0; //change flag variable again
     
   }
   time = millis();
 }
}



RE: Przycisk, jak zablokować akcję przy przytrzymaniu przycisku - Jarewa0606 - 12-04-2019

zrób zmienną by pamiętał ostatni odczyt..
Kod:
int odczyt_SW = digitalRead(SW_);                //Odczyt stanu przycisku do zmiennej  GPIO 0
  if (odczyt_SW != ostatni_stan_SW) {
    SW_Time = millis();
  }
  ostatni_stan_SW = odczyt_SW;                     // zapisywanie  odcztanej wartosci stanu przyciku

  if ((millis() - SW_Time) > Time_short_SW ) {     // warunek czasu krotkiego nacisniecia drganie stykow
    if (odczyt_SW != stan_short_SW) {
      stan_short_SW = odczyt_SW;
      if (stan_short_SW == LOW) {           // Jesli przycisk jest wcisniety (stan niski)