Indholdsfortegnelse:
- Trin 1: Rotary Encoders inde
- Trin 2: Elendighed, der forårsager reel smerte for mange
- Trin 3: Finite State Machine (FSM) løsning
- Trin 4: Arduino -kode
- Trin 5: Fejlfri integration
![En komplet Arduino roterende løsning: 5 trin En komplet Arduino roterende løsning: 5 trin](https://i.howwhatproduce.com/images/005/image-12873-9-j.webp)
Video: En komplet Arduino roterende løsning: 5 trin
![Video: En komplet Arduino roterende løsning: 5 trin Video: En komplet Arduino roterende løsning: 5 trin](https://i.ytimg.com/vi/6cfmSnTlYxI/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
![En komplet Arduino Rotary Solution En komplet Arduino Rotary Solution](https://i.howwhatproduce.com/images/005/image-12873-10-j.webp)
Rotary encoders er drejeknapper til elektroniske projekter, der ofte bruges sammen med Arduino -familiens mikrokontroller. De kan bruges til at finjustere parametre, navigere i menuer, flytte objekter på skærmen, indstille værdier af enhver art. De er almindelige erstatninger for potentiometre, fordi de kan drejes mere præcist og uendeligt, de øger eller formindsker en diskret værdi ad gangen og integreres ofte med en skubbar kontakt til valgfunktioner. De findes i alle former og størrelser, men den laveste prisklasse er vanskelig at grænseflade med som forklaret nedenfor.
Der er utallige artikler om arbejdsdetaljer og brugstilstande for Rotary encoders og adskillige prøvekoder og biblioteker om, hvordan de bruges. Det eneste problem er, at ingen af dem fungerer 100% præcist med de laveste prisklasser kinesiske roterende moduler.
Trin 1: Rotary Encoders inde
![Roterende encodere inde Roterende encodere inde](https://i.howwhatproduce.com/images/005/image-12873-11-j.webp)
![Roterende encodere inde Roterende encodere inde](https://i.howwhatproduce.com/images/005/image-12873-12-j.webp)
![Roterende encodere inde Roterende encodere inde](https://i.howwhatproduce.com/images/005/image-12873-13-j.webp)
Den roterende del af encoderen har tre ben (og to mere til den valgfri switchdel). Den ene er fælles (sort GND), de to andre er til bestemmelse af retning, når knappen drejes (de kaldes ofte blå CLK og rød DT). Begge disse er knyttet til en PULLUP -indgangsstift på mikrokontrolleren, hvilket gør niveauet HØJT til deres standardaflæsning. Når knappen drejes fremad (eller med uret), falder først den blå CLK til niveau LOW, derefter følger den røde DT. Når vi vender yderligere, stiger blå CLK tilbage til HIGH, da den fælles GND -patch forlader begge forbindelsesstifter, stiger rød DT også tilbage til HIGH. Således fuldføres ét helt kryds FWD (eller med uret). Det samme gælder den anden retning BWD (eller mod uret), men nu falder rødt først, og blå stiger sidst tilbage som vist i henholdsvis de to niveaubilleder.
Trin 2: Elendighed, der forårsager reel smerte for mange
![Elendighed, der forårsager reel smerte for mange Elendighed, der forårsager reel smerte for mange](https://i.howwhatproduce.com/images/005/image-12873-14-j.webp)
![Elendighed, der forårsager reel smerte for mange Elendighed, der forårsager reel smerte for mange](https://i.howwhatproduce.com/images/005/image-12873-15-j.webp)
![Elendighed, der forårsager reel smerte for mange Elendighed, der forårsager reel smerte for mange](https://i.howwhatproduce.com/images/005/image-12873-16-j.webp)
Almindeligt problem for Arduino -hobbyfolk, at billige Rotary encoder -moduler hopper over ekstra ændringer i udgangsniveauer, hvilket forårsager ekstra og forkerte målinger i retningstælling. Dette forhindrer fejlfri optælling og gør det umuligt at integrere disse moduler i præcise roterende projekter. Disse ekstra studs er forårsaget af de mekaniske bevægelser af lapperne over forbindelsesstifterne, og selv påføring af ekstra kondensatorer kan ikke fjerne dem fuldstændigt. Bounces kan vises hvor som helst i de fulde krydscyklusser og illustreres af virkelige scenarier på billederne.
Trin 3: Finite State Machine (FSM) løsning
![Finite State Machine (FSM) løsning Finite State Machine (FSM) løsning](https://i.howwhatproduce.com/images/005/image-12873-17-j.webp)
Billedet viser det fulde tilstandsrum for de mulige niveauændringer for de to ben (blå CLK og rød DT), både for korrekte og falske afvisninger. Baseret på denne tilstandsmaskine kan der programmeres en komplet løsning, der altid fungerer 100% nøjagtig. Fordi ingen filtreringsforsinkelser er nødvendige i denne løsning, er den også hurtigst mulig. En anden fordel ved at adskille stifternes tilstandsrum fra arbejdstilstanden er, at man kan anvende både polling eller afbrydelse til sin egen smag. Afstemning eller afbrydelser kan registrere niveauændringer på stifter, og en separat rutine vil beregne den nye tilstand baseret på den aktuelle tilstand og de faktiske begivenheder ved niveauændringer.
Trin 4: Arduino -kode
![Arduino kode Arduino kode](https://i.howwhatproduce.com/images/005/image-12873-18-j.webp)
Koden herunder tæller FWD- og BWD -ticks på den serielle skærm og integrerer også den valgfri switchfunktion.
// Peter Csurgay 2019-04-10
// Stifter af roterende kort til Arduino -porte
#definer SW 21 #definer CLK 22 #definer DT 23
// Aktuel og tidligere værdi af tælleren, der er indstillet af drejeknappen
int curVal = 0; int prevVal = 0;
// Syv tilstande af FSM (finite state machine)
#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;
ugyldig opsætning () {
Serial.begin (250000); Serial.println ("Start …"); // Niveau HIGH vil være standard for alle pins pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Både CLK og DT udløser afbrydelser for alle niveauændringer attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Håndtering af den valgfrie switch integreret i nogle roterende encodere hvis (digitalRead (SW) == LOW) {Serial.println ("Presset"); mens (! digitalRead (SW)); } // Enhver ændring i tællerværdi vises i Serial Monitor hvis (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// State Machine -overgange til CLK -niveauændringer
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; ellers hvis (tilstand == SCLK_10) tilstand = SCLK_00; ellers hvis (tilstand == SDT_10) tilstand = SDT_00; } ellers {hvis (tilstand == SCLK_01) tilstand = IDLE_11; ellers hvis (tilstand == SCLK_00) tilstand = SCLK_10; ellers hvis (tilstand == SDT_00) tilstand = SDT_10; ellers hvis (tilstand == SDT_01) {tilstand = IDLE_11; curVal--; }}}
// State Machine -overgange til ændringer på DT -niveau
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; ellers hvis (tilstand == SDT_01) tilstand = SDT_00; ellers hvis (tilstand == SCLK_01) tilstand = SCLK_00; } ellers {hvis (tilstand == SDT_10) tilstand = IDLE_11; ellers hvis (tilstand == SDT_00) tilstand = SDT_01; ellers hvis (tilstand == SCLK_00) tilstand = SCLK_01; ellers hvis (tilstand == SCLK_10) {tilstand = IDLE_11; curVal ++; }}}
Trin 5: Fejlfri integration
![](https://i.ytimg.com/vi/NgMvAgHcgyE/hqdefault.jpg)
Du kan kontrollere i den vedhæftede video, at FSM -løsningen fungerer præcist og hurtigt, selv i tilfælde af lavdistance roterende encodere med forskellige sporadiske bounce -effekter.
Anbefalede:
Løsning af sandhedstabeller: 10 trin
![Løsning af sandhedstabeller: 10 trin Løsning af sandhedstabeller: 10 trin](https://i.howwhatproduce.com/images/005/image-13234-j.webp)
Løsning af sandhedstabeller: En sandhedstabel er en måde at visualisere alle resultaterne af et problem. Dette instruktionssæt er lavet til folk, der kommer i gang med diskret matematik. Vi vil praktisere i dag med et eksempelproblem, der er specifikt for disse instruktioner. Du wi
Løsning af klikstøjsproblem på Apple 27 "skærm: 4 trin
![Løsning af klikstøjsproblem på Apple 27 "skærm: 4 trin Løsning af klikstøjsproblem på Apple 27 "skærm: 4 trin](https://i.howwhatproduce.com/images/011/image-30878-j.webp)
Løsning af problem med klikstøj på Apple 27 "skærm: Har en af dine elskede skærme nogensinde begyndt at lave meget støj, når du bruger den? Dette ser ud til at ske, efter at skærmen har været i brug i flere år. Jeg debugger en af de display tænker der var en fejl fanget i køleventilatoren, b
IOT -løsning til delecyklen: 6 trin
![IOT -løsning til delecyklen: 6 trin IOT -løsning til delecyklen: 6 trin](https://i.howwhatproduce.com/images/004/image-9810-6-j.webp)
IOT -løsning til delecyklen: Delecyklen er meget populær i Kina i disse dage. Der er mere end 10 mærker til deling af cykler på markedet, og “ mobike ” er den mest berømte, den har mere end 100 millioner registrerede brugere og har spredt sig til andre byer end
Brug af fingeraftrykssensor til tidsmøde i kombination med XAMP -løsning: 6 trin (med billeder)
![Brug af fingeraftrykssensor til tidsmøde i kombination med XAMP -løsning: 6 trin (med billeder) Brug af fingeraftrykssensor til tidsmøde i kombination med XAMP -løsning: 6 trin (med billeder)](https://i.howwhatproduce.com/images/005/image-13150-7-j.webp)
Brug af fingeraftrykssensor til tidsmøde i kombination med XAMP -løsning: Til et skoleprojekt ledte vi efter en løsning på, hvordan vi kan spore elevernes fremmøde. Mange af vores elever kommer sent ind. Det er et kedeligt job at kontrollere deres tilstedeværelse. På den anden side er der megen diskussion, fordi eleverne ofte vil sige
En overkommelig vision -løsning med robotarm baseret på Arduino: 19 trin (med billeder)
![En overkommelig vision -løsning med robotarm baseret på Arduino: 19 trin (med billeder) En overkommelig vision -løsning med robotarm baseret på Arduino: 19 trin (med billeder)](https://i.howwhatproduce.com/images/003/image-6590-19-j.webp)
En overkommelig vision -løsning med robotarm baseret på Arduino: Når vi taler om maskinsyn, føles det altid så utilgængeligt for os. Mens vi lavede en open-source vision demo, som ville være super let at lave for alle. I denne video, med OpenMV -kameraet, er robotten ligegyldig, hvor den røde terning er