KY-040 Kodierter Drehschalter (Rotary Encoder): Unterschied zwischen den Versionen
Aus Linkerkit.de
(Die Seite wurde neu angelegt: „==Bild== none ==Technische Daten / Kurzbeschreibung== Die aktuelle Position des Drehschalters wird kodiert über die Ausgänge…“) |
(→Keine Zusammenfassung) |
||
Zeile 1: | Zeile 1: | ||
==Bild== | ==Bild== | ||
− | [[Datei:ky-040.jpg | + | [[Datei:ky-040.jpg|none|358x358px]] |
==Technische Daten / Kurzbeschreibung== | ==Technische Daten / Kurzbeschreibung== | ||
Zeile 9: | Zeile 9: | ||
==Kodierung== | ==Kodierung== | ||
<div class="level2"><div class="table sectionedit5"> | <div class="level2"><div class="table sectionedit5"> | ||
− | {| class="inline" style="height: 178px;" width="359" | + | {| class="inline" style="height: 178px; border-color: #000000;" width="359" |
|- class="row0" | |- class="row0" | ||
! class="col0"|A | ! class="col0"|A | ||
! class="col1"|B | ! class="col1"|B | ||
− | |- class="row1" | + | |- class="row1" style="border-color: #000000;" |
| class="col0"|1 | | class="col0"|1 | ||
| class="col1"|1 | | class="col1"|1 | ||
Zeile 38: | Zeile 38: | ||
| class="col1"|1 | | class="col1"|1 | ||
|}</div> | |}</div> | ||
− | |||
</div> | </div> | ||
==Pin-Belegung== | ==Pin-Belegung== | ||
Zeile 75: | Zeile 74: | ||
int change = getEncoderTurn (); | int change = getEncoderTurn (); | ||
int newPeriod = longPeriod + (change * 1000); | int newPeriod = longPeriod + (change * 1000); | ||
− | if (newPeriod >= 1000 && newPeriod <= 10000) { | + | if (newPeriod >= 1000 && newPeriod <= 10000) { longPeriod = newPeriod; |
− | + | ||
} | } | ||
if (count> targetCount) | if (count> targetCount) |
Version vom 16. Februar 2016, 16:01 Uhr
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
Die aktuelle Position des Drehschalters wird kodiert über die Ausgänge gegeben.
Kodierung
A | B |
---|---|
1 | 1 |
0 | 1 |
0 | 0 |
1 | 0 |
1 | 1 |
1 | 0 |
0 | 0 |
0 | 1 |
Pin-Belegung
Codebeispiel Arduino
int redPin = 2; int yellowPin = 3; int greenPin = 4; int aPin = 6; int bPin = 7; int buttonPin = 5; int state = 0; int longPeriod = 5000; // Time at green or red int shortPeriod = 700; // Time period when changing int targetCount = shortPeriod; int count = 0; void setup () { pinMode (aPin, INPUT); pinMode (bPin, INPUT); pinMode (buttonPin, INPUT); pinMode (redPin, OUTPUT); pinMode (yellowPin, OUTPUT); pinMode (greenPin, OUTPUT); } void loop () { count++; if (digitalRead (buttonPin)) { setLights (HIGH, HIGH, HIGH); } else { int change = getEncoderTurn (); int newPeriod = longPeriod + (change * 1000); if (newPeriod >= 1000 && newPeriod <= 10000) { longPeriod = newPeriod; } if (count> targetCount) { setState (); count = 0; } } delay (1); } int getEncoderTurn () { // Return -1, 0, or +1 static int oldA = LOW; static int oldB = LOW; int result = 0; int newA = digitalRead (aPin); int newB = digitalRead (bPin); if (newA != oldA || newB != oldB) { //Something has changed if (oldA == LOW && newA == HIGH) { result = - (oldB * 2 - 1); } } oldA = newA; oldB = newB; return result; } int setState () { if (state == 0) { setLights (HIGH, LOW, LOW); targetCount = longPeriod; state = 1; } else if (state == 1) { setLights (HIGH, HIGH, LOW); targetCount = shortPeriod; state = 2; } else if (state == 2) { setLights (LOW, LOW, HIGH); targetCount = longPeriod; state = 3; } else if (state == 3) { setLights (LOW, HIGH, LOW); targetCount = shortPeriod; state = 0; } } void setLights (int red, int yellow, int green) { digitalWrite (redPin, red); digitalWrite (yellowPin, yellow); digitalWrite (greenPin, green); }