Go Down

Topic: Anfängerfrage: Zählerfunktion (Read 4097 times) previous topic - next topic

Akrlfix

Tach,

hab mir auch vor kurzer zeit ein arduino zugelegt und experimentier damit nu ein bischen rum.

Wollte eine Zählfunktion programmieren die bei jedem Tasterdruck einen Wert um 1 erhöht, egal wie lange der Taster gedrückt wurde.

bekomms einfach net hin, wie würdet ihr das realisieren?

danke schon ma im vorraus
greetz
akrlfix

Joghurt

#1
Oct 25, 2010, 08:06 pm Last Edit: Oct 25, 2010, 08:07 pm by Joghurt Reason: 1
Im Prinzip so.

Und bei "// turn LED on:" dann eben den Zähler hochzählen. ;)

Realizer

#2
Oct 25, 2010, 08:11 pm Last Edit: Oct 25, 2010, 08:14 pm by Realizer Reason: 1
Der Trick dabei ist: Beide Zustände des Tasters auszuwerten. Sprich:

Taster betätigt (und bleibt gedrückt), dann ist die erste Bedingung erfüllt.
Taster losgelassen, dann wird erst gezählt. Somit die zweite Bedingung erfüllt.

Oder eben die Situation umkehren: Taster gedrückt, es zählt um eins weiter. Wartet dann bis der Taster wieder losgelassen wurde, bevor es weitergehen kann ;)

Also ein kompletter High-Low Zyklus muss durchlaufen werden, damit die Zählung passiert.

Bedenke jedoch folgendes: Die meisten Taster sind nicht "entprellt". Dies führt unweigerlich zu Fehlzählungen. Diese kann man wiederrum durch Zeitschleifen minimieren.

Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

Joghurt

Das kommt dabei raus, wenn man programmiert, im Forum liest und gleichzeitig Fernseh guckt...  ;D

Realizer hat natürlich Recht. ;)

Megaionstorm

#4
Oct 25, 2010, 08:29 pm Last Edit: Oct 25, 2010, 08:31 pm by Megaionstorm Reason: 1
Natürlich könnte man jetzt hingehen und sich erst einmal die Beschreibung der Bouce Library anschauen. Dehren Funktion es ist  digitale Eingänge zu entprellen. Und damit auch einen daran angeschlossenen Taster.

Bounce library for Arduino:
http://www.arduino.cc/playground/Code/Bounce
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Akrlfix

#5
Oct 25, 2010, 08:37 pm Last Edit: Oct 25, 2010, 08:47 pm by Akrlfix Reason: 1
habs endlich hinbekommen :)

funzt ganz gut auch ohne debounce, geht aber bestimmt auch eleganter

Code: [Select]
const int buttonPin = 12;

int buttonState = 0;
int counter = 0;
int buttonStateHIGH = 0;

void setup() {
 Serial.begin(9600);
 pinMode(buttonPin, INPUT);    
}

void loop(){
 buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH)
 {    
   buttonStateHIGH = 1;
 }
 if (buttonState == LOW && buttonStateHIGH == 1)
 {
   counter++;
   buttonStateHIGH = 0;
 }
 Serial.println(counter);
}


besten dank für die hilfe

greetz
akrlfix

Go Up