Kód: Vybrat vše
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
Kód: Vybrat vše
#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 tlačítka
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu tlačítka
int reading; // stav tlacitka
int step = 1; // ukládá se do ní hodnotu jednoho kroku serva
int Led1 = 10; // číslo pinu Led1
int Led2 = 11; // číslo pinu Led2
int Led = 12; // číslo pinu Led
// 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
/* TADY PRAVE PRETEKL CAS ?! */
long buttonTime = -15001; // čas začátku stisknutí tlačítka tj. začátek vrtění serva
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
pinMode(Led1, OUTPUT); // nastavení Led1 jako výstup
pinMode(Led2, OUTPUT); // nastavení Led2 jako výstup
pinMode(Led, OUTPUT); // nastavení Led jako výstup
}
void loop() {
/*TOHLE JE ZAČÁTEK BLOKU KDE OŠETŘUJI TLAČÍTKO*/
reading = digitalRead(buttonPin);
if (reading != lastButtonState) { // kmita to, od minule se to zmenilo, zacnu debounce cas pocitat znovu (tedy od posledni zmeny, ktera je ted)
lastDebounceTime = millis();
}
lastButtonState = reading; // tady si to ulozim, v dalsim pruchodu loop() to zase porovnam s novym reading, zda se to mezi tim nezmenilo
if ((millis() - lastDebounceTime) > debounceDelay) { // jo, uz se to dlouho nezmenilo, tak je to stabilni a spravna hodnota
if (reading != buttonState) { // Pokud se stav tlačítka změnil
/*TADY SE ZAČÍNAJÍ DÍT VĚCI PŘI STISKNUTÍ/PUŠTĚNÍ TLAČÍTKA, NÁSLEDNĚ SE VYUŽIJÍ POZDĚJI V PROGRAMU*/
buttonState = reading; // zapamatuju si novy stav
}
}
/*TOHLE JE KONEC BLOKU KDE OŠETŘUJI TLAČÍTKO*/
/*TOHLE JE ZAČÁTEK BLOKU KDE NA ZÁKLADĚ DŘÍVE ZJIŠTĚNÝCH INFORMACÍ OBSLUHUJI SERVO*/
// a tady (treba) budu neco delat
if (buttonState == HIGH) { // je stisknuto tlačítko??
buttonTime = millis(); // příkazy, které si zapamatují čas, kdy bylo tlačítko stisknuto
}
/* podmínka = od toho času, kdy bylo tlačítko stisknuto, uběhlo méně než 30000ms ??
(Pokud ano, udělej jeden cykl, pokud ne, ukonči cyklování a pokračuj dále v programu) */
while (millis() - buttonTime <= 15000) { // podmínka
digitalWrite(Led,LOW); // Led nesvítí Servo se vrtí
/*TADY SE KONTROLUJE KRAJNÍ POZICE MOTORU*/
if (pos <= 0) { // zkontroluji si jestli je pozice 0 nebo méně
step = 2; // nastavím step na 1 (TOHLE JE ZMĚNA SMĚRU
}
if (pos >= 180) { // zkontroluji si jestli je pozice 180 nebo více
step = -2; // nastavím step na -1 (TOHLE JE ZMĚNA SMĚRU)
}
/*TADY KONČÍ KONTROLA POZICE*/
/*TADY SE OBSLUHUJE SERVO*/
pos += step; // k pozici motoru přičtu step (TA JE BUĎ 1 A POS SE ZVYŠUJE, NEBO -1 A POS SE SNIŽUJE)
digitalWrite(Led1,pos>=175);
digitalWrite(Led2,pos<=5);
myservo.write(pos); // nastavení serva na pozici
delay(10); // nějaký ten delay, aby se to stihlo natočit
/*KONEC OBSLUHY SERVA*/
}
digitalWrite(Led,HIGH); // Led svítí Servo stojí
}
a s číslem u step jsem si samozřejmě hrál taky, servo se vrtí rychleji