Mobile
Enkoder obrotowy to urządzenie generyczne, które umożliwia określenie położenia i prędkości kątowej fizycznie wykonywanego napędu oraz rejestrację pomiaru z procesora lub automatu, takiego jak Arduino .
Enkodery te składają się z dwóch pinów do przycisku (działa jak zwykły przycisk) i trzech pinów do enkodera. Trzy piny enkodera są podłączone jeden do masy, a pozostałe dwa do odpowiednich wejść, które wyznaczamy na płytce Arduino . Te dwa sygnały wychodzące z enkodera dają łącznie 4 kombinacje. 00, 01, 10 i 11. Jest to znane jako 2 bity kodu Graya.
Jeśli potraktujemy piny w kodzie binarnym, odczytujemy je jako 00, 01, 10 lub 11. Sekwencja wyjść enkodera, gdy obrócimy zgodnie z ruchem wskazówek zegara, to 00, 01, 11, 10
Połączenie
Moduł zasilany jest bezpośrednio z Arduino , więc nie potrzebujemy zewnętrznego zasilania. Do podłączenia enkodera do Arduino potrzebujemy trzech wejść cyfrowych, dwóch do wykrywania enkodera i dodatkowego, jeśli chcemy nagrywać naciśnięcie dźwigni (SW)
Piny są połączone zgodnie z tabelą:
Moduł pinów
Przypnij przez Arduino UNO
CLK
D2
DT
D3
południowy zachód
D9
+
5V
GND
Kod
Otwórz nowy szkic i skopiuj następujący kod:
const int channelPinA = 9;
const int channelPinB = 10;
unsigned char stateChannelA;
unsigned char stateChannelB;
unsigned char prevStateChannelA = 0;
const int maxSteps = 255;
int prevValue;
wartość int;
const int timeThreshold = 5;
unsigned long currentTime;
unsigned long loopTime;
bool IsCW = true;
void setup () {
Serial.begin (9600);
pinMode (channelPinA, INPUT);
pinMode (channelPinB, INPUT);
currentTime = millis ();
loopTime = currentTime;
wartość = 0;
prevValue = 0;
}
void loop () {
if (currentTime> = (loopTime + timeThreshold))
{
stateChannelA = digitalRead (channelPinA);
stateChannelB = digitalRead (channelPinB);
if (stateChannelA! = prevStateChannelA) // Dla pojedynczej precyzji if ((! stateChannelA) && (prevStateChannelA))
if (stateChannelB) // B jest HIGH, to CW
if (wartość + 1 <= maxSteps) wartość ++; // Upewnij się, że nie przekraczamy maxSteps
else // B jest LOW, jest CWW
bool IsCW = false;
if (wartość - 1> = 0) wartość = wartość--; // Upewnij się, że nie mamy negatywów
prevStateChannelA = stateChannelA; // Zapisz wartości na następny
// Jeśli wartość uległa zmianie, pokaż ją
if (prevValue! = wartość)
prevValue = wartość;
Serial.print (wartość);
loopTime = currentTime; // Czas aktualizacji
// Inne zadania
Z poziomu Serial Monitor w zakładce Tools możemy obserwować pozycje.