Hallo, ich habe für meinen Arduino ein kleines Menü programmiert, bei dem ich die Zeilen mit einem Taster durchschalten kann. Nun habe ich einen Drehknopf gefunden der beim drehen seinen Zustand immer zwischen 1 & 0 ändert. Wie kann ich nun mit jedem Wechsel des Zustandes eine Variable addiern bzw. eine andere Funktion ausführen? Mfg. Christoph
Interrupt z.B. attachInterrupt(pin (interrupt), die void die gemacht werden soll, CHANGE); http://arduino.cc/de/Reference/AttachInterrupt In der "funcion" änderst du deine Variable
Immer diese Deppen die einen Taster an den Interrupt hängen wollen. Sowas macht man nicht!!! Zum Thema. Das hier lesen und einprogrammieren: http://www.mikrocontroller.net/articles/Drehgeber
@ Martin Wende > Immer diese Deppen die einen Taster an den Interrupt hängen > wollen. > Sowas macht man nicht!!! Immer diese Deppen, die keinen Taster mit Interrupt ordentlich einlesen können! ;-)
So müsste das ganz gut gehen :
1 | |
2 | /* Read Quadrature Encoder |
3 | * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V. |
4 | */ |
5 | |
6 | |
7 | int val; |
8 | int encoder0PinA = 3; |
9 | int encoder0PinB = 4; |
10 | int encoder0Pos = 0; |
11 | int encoder0PinALast = LOW; |
12 | int n = LOW; |
13 | |
14 | void setup() { |
15 | pinMode (encoder0PinA,INPUT); |
16 | pinMode (encoder0PinB,INPUT); |
17 | Serial.begin (9600); |
18 | } |
19 | |
20 | void loop() { |
21 | n = digitalRead(encoder0PinA); |
22 | if ((encoder0PinALast == LOW) && (n == HIGH)) { |
23 | if (digitalRead(encoder0PinB) == LOW) { |
24 | encoder0Pos--; |
25 | } else { |
26 | encoder0Pos++; |
27 | } |
28 | Serial.print (encoder0Pos); |
29 | Serial.print ("/"); |
30 | } |
31 | encoder0PinALast = n; |
32 | } |
Gruß
Bernie schrieb: > @ Martin Wende > >> Immer diese Deppen die einen Taster an den Interrupt hängen >> wollen. >> Sowas macht man nicht!!! > > Immer diese Deppen, die keinen Taster mit Interrupt > ordentlich einlesen können! ;-) uh sehr peinlich bernie ... das sind grundlagen ;) hat schon seinen grund das man einen taster nicht an den externen interrupt hängt... das mag in deiner bastellösung funktionieren.. kann aber auch böse enden mit stackoverlow etc.. und das will man bestimmt nicht in einem kommerziellen projekt! darum taster pollen.. mit timer fertig aus!
Muss auch nochmal meinen Senf dazugeben. Ich habe Drehgeber früher auch immer an einen Ext. Int. gehangen, dann innerhalb der ISR gewartet (prellen), anderen Pin eingelesen usw. Dann habe ich versuchsweise PeDas Drehgeber Routinen implementiert und bin nun geheilt - die Routinen sind idiotensicher, funktionieren auch mit richtig ollen Drehgebern noch zuverlässig und der Timerinterrupt kann zusätzlich noch für jeden möglichen anderen Krams gebraucht werden (Taster usw.). Ein nettes Feature ist ausserdem die problemlose Anpassung an die verschiedensten Geber - Kontakt auf Rastung, zwischen den Rastungen, 2- und 4-fach Schritte usw. Es lohnt sich also nicht, das Rad neu zu erfinden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.