Forum: Mikrocontroller und Digitale Elektronik Drehknopf mit Arduino auslesen


von Christoph Fuggersberger (Gast)


Lesenswert?

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

von Musik_LED (Gast)


Lesenswert?

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

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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

von Bernie (Gast)


Lesenswert?

@ 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!  ;-)

von sly (Gast)


Lesenswert?

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ß

von luckystrike (Gast)


Lesenswert?

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!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
Noch kein Account? Hier anmelden.