( asch | 2015. 04. 14., k – 23:02 )

Az Atmega168 csip (ami az Arduinoban van) egy 8 bites mikrovezérlő, ebben a serial input úgy van megvalósítva, hogy egyetlen bájtnyi hardveres puffer van az adatnak, ezt ki kell olvasni, mielőtt a következő bájt jönne. Ez azért nem annyira rövid idő, hogy mission impossible legyen.

Az Arduino beépített Serial libje csak szinkron módon működik, ha jól emlékszem, ez azt jelenti, hogy nincsen semmi pufferelés, ha éppen nem olvastad ki az adatot, akkor úgy jártál. De még ezzel is működhet a program, ha a loop metódusban minden körben megpróbálsz adatot olvasni, és nincs sok más amit csinálni kell (pl képernyő frissítés). Számolni vagy mérni (jelző bitek ki/bekapcsolása a program szakaszain, és ezt szkóppal meg kell nézni milyen hosszú pulzust ad ki) kell, hogy mi mennyi idő.

Ha csinálsz egyedi megvalósítást (mondjuk C-ben Arduino nélkül, vagy akár Arduino-n belül is lehet), akkor pollozás helyett kezelheted a soros port interruptot, akkor a main loop-ot nem kell terhelni vele. A RAM-ba tehetsz egy valamivel hosszabb input buffert, akkor biztosan nem veszíted el a bejövő bájtokat. Ebből a pufferből (pl ringbuffer megvalósítás lehet) szintén a main loop-ból lehet olvasni, de ekkor már sokkal kevésbé éles időzítéssel. A másik megoldás, hogy az inputot nem buffereled, hanem azonnal feldogozod - még az IT rutinon belül. Ízlés kérdése :-).

Ha Arduino IDE nélkül, közvetelenebb módon C-ben akarod programozni az Arduino-t, azt is lehet, ezen topikban volt róla sok szó, hogy pontosan hogyan: http://hup.hu/node/139796