Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Rotacijski dajalnik je elektronska komponenta, ki lahko spremlja vrtenje in položaj. Rotacijski dajalnik uporablja optične senzorje, ki lahko generirajo impulze, ko se vrtljivi dajalnik vrti. Uporaba rotacijskega dajalnika običajno kot mehanskega ali robotskega monitorja gibanja se lahko uporablja tudi za izbiro menija na zaslonu. Rotacijski dajalnik ima dva izhoda, tako da lahko razlikuje med negativnim (CW) in pozitivnim (CCW) vrtenjem in ima tudi en sam gumb.
Korak 1: Impulzni tok rotacijskega dajalnika
Impulzni tok, ki ga ustvari naslednji rotacijski dajalnik, je podoben zgornji sliki.
Korak: Pinout rotacijskega dajalnika
Pojasnilo:
- GND GND
- + 5V
- Gumb SW vrtljivega dajalnika ob pritisku
- Podatki DT
- Podatki CLK 2
Eden od nožic DT ali CLK mora biti priključen na prekinitveno nogo Arduino Uno, ali pa sta oba DT in CLK priključena na prekinitveni zatič.
3. korak: Shema
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
4. korak: Koda
V naslednji vadnici bo kot prekinitev uporabljena PIN 2 Arduino Uno, medtem ko se PIN 3 uporablja le kot običajen vnos.
#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodirnik0PinA, INPUT_PULLUP); pinMode (kodirnik0PinB, INPUT_PULLUP); pinMode (kodirnik0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serijski.tisk (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); zamuda (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = kodirnik0Pos/2.5; }
V vrstici 10 zgornje skice se uporablja za omogočanje prekinitve nožice 2 Arduino Uno. V funkciji "doEncoder" se izračuna iz vrtljivega dajalnika. Če je vrednost DT in CLK (prekinitev zatiča Arduino Uno) enaka, se bo spremenljivka "encoder0Pos" povečala / dodala, poleg tega pa se spremenljivka "encoder0Pos" zmanjša.
5. korak: Pojasnilo
ValRotary value je vrednost števila izvedenih korakov. ValRotary vrednost dobimo z vrednostjo odčitavanja dajalnika rotacijskega senzorja, deljeno s 2,5. Iz preskusa dobimo vrednost 2,5, saj lahko en korak vrtljivega dajalnika preseže 1, zato delite z 2,5 za njegovo vrednost glede na korak in dodajanje zakasnitve branja.
Medtem ko je v vrstici 19 - 25 program za ugotavljanje, ali rotacijski rotacijski dajalnik CW ali CCW. Razlaga vrstic 19 - 25 je, ko je trenutni odčitek rotacijskega dajalnika večji od prejšnjih rotacijskih podatkov, izraženih kot CW. Če pa je trenutni odčitek manjši od prejšnjega, se navede kot CCW.
6. korak: Izhod
1 = vrednost gumba za zagon vrtljivega gumba, ko ni bil pritisnjen