Jungimas paprastas - vidurinė koja į GND, kitos dvi kojos - tai A ir B. Ant A ir B užkabinami pull-up rezistoriai. Dabar, jei pajungsime oscilografą prie A ir B kojų ir pasuksime, pamatysime tokį vaizdą.
Geltonas - A, Mėlynas -B |
Kaip matote, gauname du vienodus signalus tik pasislinkusius. Jei enkoderį suksime į kitą pusę, signalas gausis toks pats, tik iš kitos pusės. T.y. jeigu dabar kai A leidžiasi B būna 0V, tai sukant į kitą pusę, kai leisis B bus 5V. Žinant šį principą, labai lengva parašyti programą.
Parsisiųsti. Principas toks pats. Padarytas falling pertraukimas ant vieno iš dviejų kojų (A arba B). Falling reiškia, kad suveikia kai lygis keičiasi iš aukšto į žemą. Tada tikrinama ar kita koja tuo metu buvo aukštam ar žemam lygyje, ir pagal tai sprendžiama, ar pasukta pagal, ar prieš laikrodžio rodyklę.
Problema ta, kad programa nuskaito tik 1/4 visų būsenų. Tačiau man tai tik privalumas, nes pasukus rankenėlę vieną kartą (sukant jaučiasi toks tarsi treškėjimas, vienas kartas - tai vienas "stepas"), pereinama per visas 4 būsenas. Todėl jei nuskaitinėjant visas būsenas, pasukus vieną kartą, poz vertė pasikeistų per 4 vienetus.
Kita problema yra ta, kad kaip ir mygtukuose, enkoderiuose persijungiant būsenai atsiranda triukšmas, ir mikrovaldiklis tai gali interpretuoti kaip keletą pasukimų. Todėl juos reikia taip sakant "debouncinti".
Šis procesas gali būti dviejų rūšių : programinis, arba hardwarinis. Aš dažniausiai renkuosi hardwarinį, nes programavimas yra mano silpnoji pusė. Tam aš pasinaudojau tokia schema :
Viską sujungiame ir bandome |
Rezultatai |