Förbättrad Arduino Rotary Encoder behandlingen (3 / 4 steg)

Steg 3: Koden


Om du inte är bekant med programmering Arduinos, vänligen komma igång med detta resurs från Arduino själva.

Denna kod är gratis för din användning (som i utan kostnad och ändras så mycket du vill), vänligen attributet dit du ska.

/ *** Avbrott-baserade Rotary Encoder skiss ***
av Simon Merrett, baserat på insikt från Oleg Mazurov, Nick Gammon, rt, Steve Spence
*/

statisk int pinA = 2; Vår första hårdvara avbryta stift är digital stift 2
statisk int pinB = 3; Vår andra hårdvara avbryta stift är digital stift 3
flyktiga byte aFlag = 0; låter veta oss när vi väntar en stigande kanten på pinA att signalera att kodaren har kommit på en spärr
flyktiga byte bFlag = 0; låter oss veta när vi väntar en stigande kanten på pinB att signalera att kodaren har kommit på en spärr (motsatt riktning till när aFlag är inställd)
flyktiga byte encoderPos = 0; Denna variabel lagrar våra nuvarande värde av kodaren position. Ändra till int eller uin16_t i stället för byte om du vill spela in ett större utbud än 0-255
flyktiga byte oldEncPos = 0; innehåller senaste encoder position så vi kan jämföra med den aktuella behandlingen och se om det har ändrats (så vi vet när du ska skriva ut till den seriella bildskärmen)
flyktiga byte läsning = 0; någonstans att lagra direkt värden vi läser från våra avbrott pins innan kontroll för att se om vi har flyttat en hel spärr

void setup() {
pinMode (pinA, INPUT_PULLUP); ställa in pinA som indata, drog hög logik spänningen (5V eller 3.3V för mest fall)
pinMode (pinB, INPUT_PULLUP); ställa in pinB som indata, drog hög logik spänningen (5V eller 3.3V för mest fall)
attachInterrupt(0,PinA,RISING); Ange ett avbrott på PinA, söker en stigande kanten signal och köra den "PinA" avbryta tjänsten rutin (nedan)
attachInterrupt(1,PinB,RISING); Ange ett avbrott på PinB, söker en stigande kanten signal och köra den "PinB" avbryta tjänsten rutin (nedan)
Serial.BEGIN(115200); Starta seriell övervaka länken
}

void PinA() {
CLI(); STOP avbryter händer innan vi läser pin värden
läsning = PIND & 0xC; Läs alla åtta pin värden sedan skala bort alla men pinA och Pinb's värden
om (läser == B00001100 & & aFlag) {//check att vi har båda stiften på spärr (hög) och att vi förväntar oss spärr på detta stift stigande kanten
encoderPos--; stegvis minskning av kodaren läge count
bFlag = 0; återställa flaggor för nästa sväng
aFlag = 0; återställa flaggor för nästa sväng
}
annars om (läser == B00000100) bFlag = 1; signalera att vi väntar pinB att signalera övergången till spärr från fri rotation
SEI(); starta om avbrott
}

void PinB() {
CLI(); STOP avbryter händer innan vi läser pin värden
läsning = PIND & 0xC; Läs alla åtta pin värden sedan skala bort alla men pinA och Pinb's värden
om (läser == B00001100 & & bFlag) {//check att vi har båda stiften på spärr (hög) och att vi förväntar oss spärr på detta stift stigande kanten
encoderPos ++; ökar värdet av kodaren läge count
bFlag = 0; återställa flaggor för nästa sväng
aFlag = 0; återställa flaggor för nästa sväng
}
annars om (läser == B00001000) aFlag = 1; signalera att vi väntar pinA att signalera övergången till spärr från fri rotation
SEI(); starta om avbrott
}

void loop() {
om (oldEncPos! = encoderPos) {
Serial.println(encoderPos);
oldEncPos = encoderPos;
}
}

Det är det!

Se Steg
Relaterade Ämnen

Arduino Nano och Visuino: kontrollera stegmotor med Rotary Encoder

Ibland är det nödvändigt att ha en Stepper Motor Följ rotation av en Rotary Encoder för exakt positionering. Jag har planerat Instructable på detta under en lång tid, men äntligen par dagar sedan efter ännu en fråga av Visuino användare, på hur man g...

Arduino Nano och Visuino: styr Servo med Rotary Encoder

Det finns en hel del Instructables på hur man styr Servo med potentiometer, men ibland är det bra att styra med en Rotary Encoder. I detta Instructable kommer jag visa dig hur lätt det är att genomföra detta med hjälp av Visuino - en enkel att använd...

Arduino powered Rotary encoder - jag gjorde det på TechShop

som i några av mina senaste instructables, arduino handlar om kontroll. Förmågan att kontrollera vissa saker som visar, servon, motorer och andra elektriska mekaniska apparater på ett meningsfullt sätt. Jag har täckt med potentiometrar för att bestäm...

Arduino Nano: Rotary Encoder med Visuino

De roterande pulsgivare är mycket användbar exakt rotation sensorer, också ofta används som användaren kontrollerade indataenheter i stället för potentiometrar. De är lätta att ansluta till Arduino, och med hjälp av Visuino - en enkel att använda gra...

Rotary Encoder LED Strip ljusstyrka Controller

Helt enkelt LED strip ljusstyrka controller med roterande kodare och attiny 85 mikrokontrollerSteg 1: Intro:Jag kommer att visa dig hur du enkelt styra ljusstyrkan på LED strip. Detta är faktiskt en PWM controller. Det är endast avsedd för DC. Glömma...

ESP8266 och Visuino: fjärrstyra Servo över Wi-Fi med Rotary Encoder

ESP8266 -moduler är stor låg kostnad fristående styrsystem med inbyggd Wi-Fi. I detta Instructable kommer jag visa dig hur du kan fjärrstyra en Servo över Wi-Fi med en Rotary Encoder. Instructable är en liknande men mer avancerad version av "Arduino...

RGB Rotary Encoder exempel (ATmega328, AVR)

ovan installationsprogrammet använder avbryta tjänsten rutiner (ISRs) att tolka en rotationsencoder. Den särskild rotationsencoder används innehåller också en RGB LED, som drivs av PWM. Det finns en video i hela artikeln.Här är en länk till hela arti...

Vända mig Kit: Rotary Encoder till bakbord Access

roterande pulsgivare är enheter som kan förmedla position och riktning av rotation med hjälp av två ljudutgångar, A och B. Så har vi gjort en utbrytning styrelse som är både bakbord och super lätt att sätta ihop!Du hittar den här: https://www.tindie....

LED Dawn / Sunrise väckarklocka, nattlampa & säkerhet ljus - Arduino kompatibel

som nätterna förlängs successivt under hösten 2011, jag upptäckt glädjen med Arduino och trodde att det skulle vara ett bra sätt att genomföra något som jag har velat ha en lång stund - ett skonsamt sätt att vakna upp på en vintermorgon. Tyvärr, det...

Arduino programmerbar konstant nuvarande Power motstånd konstlast

Kul att se du har kommit på denna sida att lära sig hur man bygger en programmerbar konstant likström konstlast. Denna belastning kan du rita en uppsättning aktuella från någon källa. Denna belastning kan också anges till en konstant motstånd eller e...

Fristående WiFi Radio Control Panel (Arduino Powered)

jag ville ha en Internet-Radio för en lång tid, och var mycket glad över att hitta Tinkernut's Wifi-radion projekt (http://tinkernut.com/archives/2387 ), som jag byggt och har haft i några månader.Men brydde jag mig verkligen för Ario baserad kontrol...

Google spelar musik Internet Radio (Raspberry Pi och Arduino)

jag letade efter ett projekt att göra med min Raspberry Pi och hittade detta Instructable och tänkte jag skulle ha en gå på något liknande som arbetat med Google spela musik. Jag hade en ungefärlig uppfattning om vad jag ville ha det sista objektet t...

Lätt Arduino menyer för rotationsencoder

Roterande pulsgivare med centrum - tryckknappar är cool ingång hårdvara för projekt, särskilt om du vill kunna bläddra igenom menyer och väljer alternativ. Förhoppningsvis detta Instructable kommer att ge dig självförtroende att prova grundläggande m...

Bygga IllyClock - baserade Arduino väckarklocka i en kaffe kan

uppdaterad augusti 4, 2011En strömlinjeformad version är nu beskrivs här.Syftet med detta projekt är att bygga en väckarklocka som liknar den som presenteras i videon nedan.Bredvid inhägnad, den ursprungliga inslaget i IllyClock visar tiden i färger:...

Anpassade Arduino MIDI Controller

Hej och Välkommen till detta instructable om hur man bygger en anpassad, Billigt och enkelt USB MIDI-controller, baserat på Arduino. Den bästa nyheten: inget krångel med USB-till-MIDI-gränssnitt eller programvaruverktyg som Hårlösa MIDI, bara plug 'n...

Automatisk Arduino Powered sällskapsdjur mataren

Detta är min Automatisk Sällskapsdjur Mataren. Drivs med arduino, med hjälp av en 3D tryckt skruv och programmerbar med två utfodring gånger med en användare ange mängd livsmedel, med batteri backas upp interna klocka.Min katt köra mig nötter i morgo...

Baserade Arduino Bi-color LED Matrix Pong spel

Vi har skapat två game-projekt instructables hittills använda jolliFactory Bi-color LED Matrix Driver modul DIY kit vi har utformat. Denna ledde matrisen modul är utformad för att kunna kedja-så du kan seriekoppla moduler tillsammans med antalet modu...

Arduino + AD9850 30MHZ DDS Signal Generator i 12$

An Precession Signal generator är mycket enkel och prisvärd gör med hjälp av en arduino och dds synthesizer (ad9850). Dess världens första minsta bärbara signalgenerator bygga.Kan du göra anständiga 0-30 MHZ frekvens signalgenerator endast i 12$. Om...

Arduino LCD Metronome

Metronomer kan vara dyrt men med en Arduino och några delar kan du göra en extensible metronome.Steg 1: delarDelar:-Arduino (någon normal storlek Arduino kommer att vara bra)-Arduino IDE och kunskapen att använda den-Massor av ledningar-HD44780 LCD-s...