Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: tomajstr 03. 07. 2014, 11:31:20
-
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