Pokusil jsem se dát dohromady debounce pro tlačítko, ale místo Led jsem dal servo.
Otázka : je to tlačítko ošetřeno jak má být ? U led to možná poznám tak, že mi ledka vícekrát problikne,nebo neblikne při stisku tlačítka vůbec, ale jak to poznám u serva ? nechat si vypsat co se děje na seriový monitor ?
tady sketch tlačítka / debounce /+ servo :
Kód: Vybrat vše
//počáteční stav : servo v pozici 0, po stisknutí tlačítka servo jede
//tam a zpět 2x, pak se zastaví a čeká na nové stisknutí tlačítka
#include <Servo.h>     //zahrnutí knihovny pro ovládání servo motoru
Servo myservo;         //každý motor má svou instanci třídy Servo
int buttonPin = 3;    // číslo pinu tlačítka
int pos = 0; //proměnná obsahující pozici motoru (úhel natočení)
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu
// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se 
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 50; // čas debounce prodlevy 
                                           
void setup() {
    myservo.attach(9);   //servo je připojeno na pin 9
    pinMode(buttonPin, INPUT);  //nastavení tlačítka jako vstup
          
    myservo.write(pos);  // nastavení počátečního stavu serva
}
void loop() {
  
    // Stav spínače přiřaďte do místní proměnné:
    int reading = digitalRead(buttonPin);
    
    // Zkontroluje, zda-li jste stlačili tlačítko
    // (tj. že vstup se z LOW změnil na HIGH), a od posledního zmáčknutí jste čekali
    // dostatečně dlouho na to, aby byl veškerý šum ignorován:
    
    // Pokud se spínač změnil kvůli šumu nebo stlačení:
    if (reading != lastButtonState) {
        // upravte proměnou lastDebounceTime
        lastDebounceTime = millis();
    }
    
    if ((millis() - lastDebounceTime) > debounceDelay) {
        // Ať už je načtená hodnota jakákoliv, byla tam déle než debounce prodleva, 
        // berme ji tedy jako aktuální stav:
        
        // Pokud se stav tlačítka změnil:
        if (reading != buttonState) {
            buttonState = reading;
            
            // chod serva pouze když je nový stav tlačítka označen jako HIGH  
      for (pos = 0; pos <= 180; pos += 1) { 
                                           
    myservo.write(pos);              
    delay(15);                     
  }
  for (pos = 180; pos >= 0; pos -= 1) { 
    myservo.write(pos);              
    delay(15);                       
            }
        }
    }
           
    // načtené hodnoty uložte. V příští smyčce bude označeno jako lastButtonState:
    lastButtonState = reading;
}


