Pouzil jsem k Arduinu NeoSWSerial (https://github.com/SlashDevin/NeoSWSerial, v nabidce knihoven v Arduino IDE), kteryzto nema blokovat preruseni pri cteni a vubec ma byt rychlejsi atd atd. Na nepajivem poli O.K., Arduina si hezky vymenovaly data. Takze vyleptat desky, osadit, testnout ... No ... a nefungovalo to. Kdyz se arduino zaplo "spatne", tak se partnerovi rozjely pri prijmu bity ... a rozhodne se nesrovnal na konci "packetu" (klidovy stav linky).
Serii testu se ukazalo, ze NeoSWSerial spatne cte; neco dalsiho se mi mozna hrabe v TCNT0 registru, ale urcite, ackoliv je registrovana funkce pro obsluhu dat z preruseni, se stale musi periodicky volat available(), jinak se PO byte, ktery ma na nejvyssich bitech nuly precte dalsi byte spatne. V navodu ani slovo, pochoppitelne; nakonec pomohl google a dalsi projekty. No a pak mam urcite podezreni ze kod
- Kód: Vybrat vše
uint8_t t0 = TCNTX
while ((uint8_t)(TCNTX - t0) < width) {
// aktivni cekani
}
mozna nebude fungovat uplne 100%, kdyz bude t0 = 250 a TCNTX (tez 8 bit ?) se prehoupne pres 255 na treba 1. (uint8_t)(1 - 255) bude dost velke cislo.
Achjo.