Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Rotary encoder är en elektronisk komponent som kan övervaka rörelse och position när den roterar. Rotary encoder använder optiska sensorer som kan generera pulser när roterande encoder roterar. Användning av den roterande kodaren vanligtvis som en mekanisk eller robotisk rörelseövervakare kan också användas för menyval på displayen. Rotary encoder har två utgångar så att den kan skilja mellan negativ (CW) och positiv (CCW) rotation och har också en enda knapp.
Steg 1: Pulsflöde för roterande kodare
Pulsflödet som genereras av följande roterande kodare är som bilden ovan.
Steg 2: Pinout av Rotary Encoder
Förklaring:
- GND GND
- + + 5V
- SW -knapp på roterande pulsgivare när den trycks in
- DT -data
- CLK -data 2
En av DT- eller CLK -stiften måste vara ansluten till avbrottsfoten på Arduino Uno, eller så är både DT och CLK anslutna till avbrottsstiftet.
Steg 3: Schematisk
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Steg 4: Kod
I följande handledning, som kommer att användas som avbrott är PIN 2 för Arduino Uno, medan PIN 3 endast används som en vanlig inmatning.
#define encoder0PinA 2 #definiera encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {
Serial.print ("CCW");
} lastValRotary = valRotary; Serial.println (""); fördröjning (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } annat {encoder0Pos--; } valRotary = encoder0Pos/2.5; }
I rad 10 i skissen ovan används för att möjliggöra avbrott av stift 2 Arduino Uno. I "doEncoder" -funktionen beräknas från den roterande givaren. Om värdet på DT och CLK (stiftavbrott för Arduino Uno) är samma, kommer variabeln "encoder0Pos" att ökas / läggas till, utöver det villkoret, reduceras variabeln "encoder0Pos".
Steg 5: Förklaring
ValRotary value är värdet på antalet steg som har körts. ValRotärt värde erhålls från avläsningsvärdet för roterande sensorgivare dividerat med 2,5. Ett värde på 2,5 erhålls från testet, eftersom ett steg i den roterande kodaren kan överstiga 1, så dividera med 2,5 för dess värde enligt steget och även tillägget av läsfördröjningen.
Medan på linje 19 - 25 är ett program för att avgöra om roterande roterande givare CW eller CCW. Förklaringen av raderna 19 - 25 är när den aktuella avläsningen av roterande kodare är större än de tidigare rotationsdata som sedan uttrycks som CW. Om den aktuella avläsningen är mindre än den föregående avläsningen anges den som CCW.
Steg 6: Utmatning
1 = startknappens värde för rotatorn när den inte har tryckts in