• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przycisk, jak zablokować akcję przy przytrzymaniu przycisku
#1
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();
 }
}
 
Odpowiedź
#2
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)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości