Stap 3: Code
Er wordt gegenereerd wanneer een stijgende signaal wordt gezien, de encoderPos-functie. Deze functie leest OutB en wordt toegevoegd of afgetrokken van een interval in de positie. Opmerking: Alleen toe te voegen en met behulp van mod, we beter kunt het bereik van de positie, dus beperken van 0 tot 99. EN de globale variabele moet worden aangemerkt als een vluchtige variabele om te werken met interrupts.
De hoofdlus dan vertaalt het nummer shift register instructies.
Shift Registers #define klink 5 Dit is de hexadecimale waarde van elk getal dat is opgeslagen in een array door index-num vluchtige unsigned int pos; VOID Setup {} void loop {}
#define CLK 4
#define gegevens 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};
Shift Register Setup
pinMode (klink, uitvoer);
pinMode (CLK, uitvoer);
pinMode (DATA, uitvoer);
Encoder Setup
pinMode (ENCA, INPUT);
pinMode (ENCB, INPUT);
digitalWrite (ENCA, hoge);
digitalWrite (ENCB, hoge);
attachInterrupt (0, encoderPos, stijgt);
}
krijgen van de afzonderlijke cijfers
byte degenen = pos % 10;
byte tientallen = pos/10;
uitvoer naar 7 seg
digitalWrite (LATCH, laag);
shiftOut (DATA, CLK, MSBFIRST, ~ digitTwo[tens]); digitTwo
shiftOut (DATA, CLK, MSBFIRST, ~ digitOne[ones]); digitOne
digitalWrite (LATCH, hoge);
}
ongeldig encoderPos(void) {}
Controleer B uitvoer voor hoge of lage
HOGE middelen met de klok mee
LAGE middelen tegen de klok
if(digitalRead(ENCB)) {}
POS (pos + 1) = % 100;
}
else {}
POS (pos + 99) = % 100;
}
}