Kazalo:
- Korak: Rotacijski dajalniki znotraj
- 2. korak: beda, ki mnogim povzroča resnično bolečino
- 3. korak: Rešitev končnega državnega stroja (FSM)
- 4. korak: Arduino koda
- 5. korak: brezhibna integracija
Video: Popolna Arduino rotacijska rešitev: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Rotacijski dajalniki so vrtljivi gumbi za upravljanje elektronskih projektov, ki se pogosto uporabljajo z mikrokrmilniki družine Arduino. Uporabljajo se lahko za natančno nastavitev parametrov, krmarjenje po menijih, premikanje predmetov na zaslonu, nastavljanje kakršnih koli vrednosti. So običajne zamenjave potenciometrov, saj jih je mogoče natančneje in neskončno vrteti, povečujejo ali zmanjšujejo eno diskretno vrednost naenkrat in pogosto integrirane s stikalom za pritisk za funkcije izbire vrste. Na voljo so v vseh oblikah in velikostih, vendar je najnižji cenovni razred težko povezati, kot je razloženo spodaj.
Obstaja nešteto člankov o delovnih podrobnostih in načinih uporabe rotacijskih kodirnikov ter številne vzorčne kode in knjižnice o njihovi uporabi. Edina težava je, da nobeden od njih ne deluje 100% natančno z najnižjim cenovnim razredom kitajskih rotacijskih modulov.
Korak: Rotacijski dajalniki znotraj
Vrtljivi del dajalnika ima tri zatiče (in še dva za izbirni del stikala). Eden je skupna točka (črni GND), druga dva za določanje smeri, ko je gumb obrnjen (pogosto jih imenujemo modri CLK in rdeči DT). Oba sta pritrjena na vhodni pin PULLUP mikrokrmilnika, zaradi česar je raven HIGH njihova privzeta vrednost. Ko gumb obrnete naprej (ali v smeri urinega kazalca), najprej modra CLK pade na raven LOW, nato sledi rdeča DT. Če se še obrnemo, se modri CLK dvigne nazaj na HIGH, nato pa skupni obliž GND zapusti oba priključna zatiča, rdeči DT pa se dvigne nazaj na HIGH. Tako dokončate eno polno oznako FWD (ali v smeri urinega kazalca). Enako velja v drugo smer BWD (ali v nasprotni smeri urinega kazalca), zdaj pa rdeča najprej pade, modra pa se nazadnje dvigne nazaj, kot je prikazano na slikah na dveh ravneh.
2. korak: beda, ki mnogim povzroča resnično bolečino
Pogosta težava ljubiteljev Arduina je, da poceni moduli rotacijskega dajalnika odbijajo dodatne spremembe v izhodnih nivojih, kar povzroča dodatne in napačne odčitke števila smeri. To preprečuje brezhibno štetje in onemogoča integracijo teh modulov v natančne rotacijske projekte. Ti dodatni odkloni so posledica mehanskih premikov obližev po priključnih zatičih in tudi uporaba dodatnih kondenzatorjev jih ne more popolnoma odpraviti. Odkloni se lahko pojavijo kjer koli v celotnem ciklu klopov in so ponazorjeni s scenariji iz resničnega življenja na slikah.
3. korak: Rešitev končnega državnega stroja (FSM)
Slika prikazuje celoten prostor možnih sprememb ravni za dva zatiča (modra CLK in rdeča DT), tako za pravilne kot lažne odboje. Na podlagi tega strojnega stroja je mogoče programirati popolno rešitev, ki vedno deluje 100% natančno. Ker pri tej rešitvi niso potrebne zamude pri filtriranju, je tudi najhitrejša možna. Druga prednost ločevanja prostora stanja zatičev od delovnega načina je, da lahko po lastni želji uporabimo tako način glasovanja kot prekinitev. Anketiranje ali prekinitve lahko zaznajo spremembe ravni na zatičih, ločena rutina pa bo izračunala novo stanje na podlagi trenutnega stanja in dejanskih dogodkov sprememb ravni.
4. korak: Arduino koda
Spodnja koda šteje kljukice FWD in BWD na serijskem monitorju in vključuje tudi dodatno funkcijo stikala.
// Peter Csurgay 2019-04-10
// Zatiči rotacijskega kartiranja v vrata Arduino
#define SW 21 #define CLK 22 #define DT 23
// Trenutna in prejšnja vrednost števca, nastavljenega z vrtljivim gumbom
int curVal = 0; int prevVal = 0;
// Sedem stanj FSM (stroj s končnimi stanji)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
void setup () {
Serial.begin (250000); Serial.println ("Začni …"); // Raven HIGH bo privzeta za vse zatiče pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Tako CLK kot DT sprožita prekinitve za vse spremembe ravni attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotacijskiDT, CHANGE); }
void loop () {
// Upravljanje dodatnega stikala, integriranega v nekatere rotacijske dajalnike if (digitalRead (SW) == LOW) {Serial.println ("Pressed"); medtem ko (! digitalRead (SW)); } // Vsaka sprememba števca je prikazana v Serijskem monitorju if (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// Prehodi državnega stroja za spremembe ravni CLK
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (stanje == IDLE_11) stanje = SCLK_01; sicer, če (stanje == SCLK_10) stanje = SCLK_00; else if (stanje == SDT_10) stanje = SDT_00; } else {if (stanje == SCLK_01) stanje = IDLE_11; sicer, če (stanje == SCLK_00) stanje = SCLK_10; else if (stanje == SDT_00) stanje = SDT_10; sicer if (stanje == SDT_01) {stanje = IDLE_11; curVal--; }}}
// Prehodi državnega stroja za spremembe ravni DT
void rotaryDT () {if (digitalRead (DT) == LOW) {if (stanje == IDLE_11) stanje = SDT_10; else if (stanje == SDT_01) stanje = SDT_00; sicer, če (stanje == SCLK_01) stanje = SCLK_00; } else {if (stanje == SDT_10) stanje = IDLE_11; else if (stanje == SDT_00) stanje = SDT_01; sicer, če (stanje == SCLK_00) stanje = SCLK_01; sicer če (stanje == SCLK_10) {stanje = IDLE_11; curVal ++; }}}
5. korak: brezhibna integracija
V priloženem videu lahko preverite, ali rešitev FSM deluje natančno in hitro tudi v primeru rotacijskih kodirnikov nizkega dosega z različnimi sporadičnimi učinki odboja.
Priporočena:
Popolna prenova generatorja vintage signalov: 8 korakov
Popolna prenova generatorja vintage signalov: Pred nekaj leti sem na pariški radijski šunki za nekaj dolarjev kupil generator signala Eico 320 RF, vendar do zdaj nisem mogel ničesar storiti. Ta generator signalov ima pet preklopnih območij od 150 kHz do 36 MHz in s ha
Arduino -Teensy4 za Teensy 4.0 - popolna montaža: 10 korakov
Arduino-Teensy4 za Teensy 4.0-Popolna montaža: Ta navodila vas bodo vodila skozi montažo razširitvene plošče Arduino-Teensy4 za Teensy 4.0 Lahko jo kupite v moji trgovini Tindie tukaj: https: //www.tindie.com/products/ cburgess129/arduin … Teensy 4 lahko naročite skupaj s svojim bo
Popolna kompaktna krožna žaga od dinozavra: 9 korakov (s slikami)
Popolna kompaktna krožna žaga od dinozavra: Nikoli nisem imel namenskega prostora v trgovini. Tudi moji projekti so le redko v velikem obsegu. Zato imam rad majhne in kompaktne stvari: ne zavzamejo veliko prostora in jih lahko pospravimo, ko jih ne uporabljamo. Enako velja za moja orodja. Hotel sem krog
Mini dvobarvna rotacijska svetilka s svetilko: 6 korakov
Mini dvobarvna opozorilna luč z rotacijskim svetilnikom: V tem navodilu bomo ustvarili mini svetilko. Veste, ena tistih staromodnih prednjih luči, ki so jih uporabljali za gradbeno opremo, preden so LED diode postale velike? Ja. Eden od teh. Ta bo relativno preprost in majhen
ESP-IDF za module ESP32 Popolna namestitev: 5 korakov
ESP-IDF za module ESP32 Popolna namestitev: Pred nekaj meseci sem kupil modul ESP32, preučil sem, katere metode obstajajo za njegovo programiranje, saj menim, da gre za zelo zmogljivo strojno opremo, tokrat bomo namestili in konfigurirali razvojni okvir Espressif IoT platforme ali (ESP-IDF) iz