Kazalo:

Vadnica rotacijskega kodirnika z Arduinom: 6 korakov
Vadnica rotacijskega kodirnika z Arduinom: 6 korakov

Video: Vadnica rotacijskega kodirnika z Arduinom: 6 korakov

Video: Vadnica rotacijskega kodirnika z Arduinom: 6 korakov
Video: LDmicro 19: Навигация по меню поворотного энкодера (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Vadnica rotacijskega kodirnika z Arduinom
Vadnica rotacijskega kodirnika z Arduinom

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 rotacijskega dajalnika
Impulzni tok rotacijskega dajalnika

Impulzni tok, ki ga ustvari naslednji rotacijski dajalnik, je podoben zgornji sliki.

Korak: Pinout rotacijskega dajalnika

Pinout rotacijskega kodirnika
Pinout rotacijskega kodirnika

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

Shematično
Shematično
  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

4. korak: Koda

Koda
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

Izhod
Izhod

1 = vrednost gumba za zagon vrtljivega gumba, ko ni bil pritisnjen

Priporočena: