Dobrý den, mám arduino uno a udělal jsem jednoduchý prográmek na ovládání natočení serva
#include <Servo.h>
Servo serv;
void setup(){
Serial.begin(9600);
serv.attach(9);
}
void loop(){
while(Serial.available()) {
serv.write(Serial.parseInt());
}
}
problém je, že servo reaguje se sekundovým zpožděním. Chci tím ovládat kormidlo u vznášedla a je to docela problém. nevíte někdo co s tím?
Zkuste místo řetězce znaků poslat pouze 1 byte obsahující natočení serva, podle mě dlouho trvá parseInt().
Dále bych while(Serial.available()) nahradil pomocí if(Serial.available()>=POCET_BYTU_KTERE_OCEKAVAM) protože tak jak je to teď může do serva zapisovat neplatná data když je v bufferu např. jen jeden byte a z něj špatně parsuje ten Integer.
Ahoj, souhlas s předešlým, jen bych se chtěl zeptat - neděje se Ti to, že když to pustíš, tak se servo natočí do výchozí pozice (93) a teprve pak reaguje? (tj ať je kdekoliv tak při zapnutí arduina se prostě pohne na stejné místo)
Díky
Jo, vždycky se po zapnutí natočí do jednoho místa. Jinak do arduina posílám čísla 0-180, tak nevím kolik mám očekávat bitů (mám arduino týden, teprve se učím).
Sekundové zpoždění je protože defaultní hodnota je 1000ms, takže stačí nastavit nižší hodnotu v setupu.
Serial.setTimeout(50);
Zdravim,
delam neco podobnyho a s timhle jsem nemel problem. Taky parsuju retezec (jeste k tomu ho splituju protoze se posilaji najednou hodnoty k vice servum) a vse bezi bez nejakych delayu. Zkusil bych si tam nahazet kontrolni vypisy s casem.
Jinak co se pokusu s servy tyce, tak jedna rada. koupil jsem si nelevnejsi micro servo (cekal jsem ze ho spalim svou nesikovnosti). Zapojil jsem ho v poradku a fungovalo. jen kdyz jsem mu dal polohu 0 tak tam dojelo, zacalo chrcet a pak strhlo potenciometr a od ty doby jen rotuje. Takze u levnejsich serv se uz drzim jen v rozmezi 15 az 165
už to funguje, dík za pomoc