Arduino powered Rotary encoder - jag gjorde det på TechShop (3 / 3 steg)
Steg 3: kod
När en stigande signal ses, utlöser det funktionen encoderPos. Denna funktion läser OutB och lägger till eller drar ifrån ett intervall i position. Obs: Genom att bara lägga till och använda mod, vi kan bättre kontrollera utbudet av position, sätt begränsa det från 0 till 99. OCH den globala variabeln måste identifieras som en flyktig variabel för att arbeta med avbryter.
Huvudloop översätter sedan numret till SKIFT register instruktioner.
Skift register #define spärren 5 Detta är det hex värdet på varje nummer som lagrats i en matris av index num flyktiga unsigned int pos; void setup() { Skift Register Setup Encoder Setup attachInterrupt (0, encoderPos, RISING); void loop() { få de enskilda siffrorna utgång till 7 seg void encoderPos(void) {
#define CLK 4
#define DATA 6
#define ENCA 2
#define ENCB 7
byte digitOne [10] = {0x6F, 0x09, 0x73, 0x3B, 0x1D, 0x3E, 0x7C, 0x0B, 0x7F, 0x1F};
byte digitTwo [10] = {0x7B, 0x11, 0x67, 0x37, 0x1D, 0x3E, 0x7C, 0x13, 0x7F, 0x1F};
pinMode (spärren, OUTPUT);
pinMode (CLK, OUTPUT);
pinMode (DATA, OUTPUT);
pinMode (ENCA, indata);
pinMode (ENCB, indata);
digitalWrite (ENCA, hög);
digitalWrite (ENCB, hög);
}
byte som = pos % 10.
byte tior = pos/10;
digitalWrite (LATCH, låg);
shiftOut (DATA, CLK, MSBFIRST, ~ digitTwo[tens]); digitTwo
shiftOut (DATA, CLK, MSBFIRST, ~ digitOne[ones]); digitOne
digitalWrite (LATCH, hög);
}
Kontrollera B utgång för hög eller låg
HÖG betyder medurs
LÅG medel motsols
IF(digitalRead(ENCB)) {
POS = (pos + 1) % 100;
}
annat {
POS = (pos + 99) % 100;
}
}