Kód: Vybrat vše
int step; // souvisí s cyklováním ? jak ?
Ukládáš do ní hodnotu jednoho kroku serva ... když do ní vložíš kladné číslo servo se bude točit na jednu stranu, se zápornou hodnotou se bude točit na druhou stranu. Pracuješ sní potom tak, že ji přičteš k pozici motoru ( pokud přičítáš záporné číslo, tak odčítáš). Můžeš tam dát i větší číslo než 1, servo pak bude dělat větší kroky na jeden cyklus.
Kód: Vybrat vše
pos = pos + step;
myservo.write(pos);
Bylo by dobré už v setupu do této proměné uložit nějakou hodnotu. Teď máš nastavenou výchozí pozici motoru 0, takže při testování jestli je už motor v krajní pozici dojde k nastavení step na 1. Ale pokud bys měl výchozí pozici třeba 90, step by zůstal 0 a motor by se netočil ani na jednu stranu ... respektive točil, ale nulovými kroky.
Kód: Vybrat vše
if(buttonState == HIGH){
// příkazy, které si zapamatují čas, kdy bylo tlačítko stisknuto
lastDebounceTime = millis();
}
Přepisuješ si špatnou proměnou, lastDebounceTime slouží pro zapamatování si času posledního zákmitu tlačítka. Ty si chceš uložit čas stisku tlačítka, takže to musíš uložit do buttonTime
tady velký pozor ... pokud to napíšeš takhle bez mezer, nemusí to kompilátor správně pochopit. Stačí step = 1
to samé zde ... kompilátor to třeba veme jako step = step - 1. Správně je to step = -1;
Tohle je správné použití operátoru += ... kompilátor to veme jako pos = pos + step ... ale opět mezery (pro jistotu) ... mno a přesně mezi tenhle příkaz a to delay co je za ním příjde onen myservo.write(pos);
a poslední chyba je opět špatné odsazování programátorských znaků ... pokud příkaz IF začíná na 4sloupečku, tak ta uzavírací závorka } taky příjde na 4 sloupeček. Schválně si to porovnej, co se ti čte lépe a v čem bys raději někomu jinému hledal chyby. Bude se nám oběma pracovat lépe.
Kód: Vybrat vše
if(1){
if(2){
if(3){
kod
kod
kod
}
} else {
if(4){
kod
kod
if(5){
kod
kod
}
kod
}
kod
}
}
verzus
Kód: Vybrat vše
if(1){
if(2){
if(3){
kod
kod
kod
}
} else {
if(4){
kod
kod
if(5){
kod
kod
}
kod
}
kod
}}