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;
}