Hallo Forum Mein Promlem ist ein nicht funktionierender Counter, der unkontrolliert Rauf oder Runter zählt. Ein normaler code in dem selbstständig alle zahlen durchlaufen funktioniert.wenn ich aber mit den taster rauf oder runter switche springt er von eins auf drei oder vier, schaltet nicht runter oder reagiert überhaupt nicht!! Fehler im Code oder Defektes board? Hier mal mein Code: #define BUTTON_DOWN 10 #define BUTTON_UP 12 #define BUTTON_RE 11 int ledPinA = 2; int ledPinB = 3; int ledPinC = 4; int ledPinD = 5; int ledPinE = 6; int ledPinF = 7; int ledPinG = 8; int ledPinDP = 9; int gear_down = 0; int old_gear_down = 0; int gear_up = 0; int old_gear_up = 0; int state = 0; int gear = 1; int RE = 1; int old_RE = 0; void setup() { pinMode(BUTTON_DOWN, INPUT); pinMode(BUTTON_UP, INPUT); pinMode(BUTTON_RE,INPUT); pinMode(ledPinA, OUTPUT); pinMode(ledPinB, OUTPUT); pinMode(ledPinC, OUTPUT); pinMode(ledPinD, OUTPUT); pinMode(ledPinE, OUTPUT); pinMode(ledPinF, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinDP, OUTPUT); Serial.begin(9600); } void led0() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, LOW); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, HIGH); digitalWrite(ledPinDP, HIGH); } void led1() { digitalWrite(ledPinA, HIGH); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, HIGH); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, HIGH); digitalWrite(ledPinDP, LOW); } void led2() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, HIGH); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, LOW); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led3() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led4() { digitalWrite(ledPinA, HIGH); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, HIGH); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led5() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, HIGH); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led6() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, HIGH); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, LOW); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led7() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, HIGH); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, HIGH); digitalWrite(ledPinDP, HIGH); } void led8() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, LOW); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void led9() { digitalWrite(ledPinA, LOW); digitalWrite(ledPinB, LOW); digitalWrite(ledPinC, LOW); digitalWrite(ledPinD, LOW); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, LOW); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, HIGH); } void ledDP() { digitalWrite(ledPinA, HIGH); digitalWrite(ledPinB, HIGH); digitalWrite(ledPinC, HIGH); digitalWrite(ledPinD, HIGH); digitalWrite(ledPinE, HIGH); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, HIGH); digitalWrite(ledPinDP, LOW); } void ledRE() { digitalWrite(ledPinA, HIGH); digitalWrite(ledPinB, HIGH); digitalWrite(ledPinC, HIGH); digitalWrite(ledPinD, HIGH); digitalWrite(ledPinE, LOW); digitalWrite(ledPinF, HIGH); digitalWrite(ledPinG, LOW); digitalWrite(ledPinDP, LOW); } void setLed(int number) { switch (number) { case 0: ledDP(); break; case 1: led1(); break; case 2: led2(); break; case 3: led3(); break; case 4: led4(); break; case 5: led5(); break; case 6: led6(); break; case 7: led7(); break; case 8: led8(); break; case 9: led9(); break; } } void oldloop() { ledDP(); delay(1000); led0(); delay(1000); led1(); delay(1000); led2(); delay(1000); led3(); delay(1000); led4(); delay(1000); led5(); delay(1000); led6(); delay(1000); led7(); delay(1000); led8(); delay(1000); led9(); delay(1000); } void loop() { gear_up = digitalRead(BUTTON_UP); if ((gear_up == HIGH) && (old_gear_up == LOW)) { gear += 1; Serial.print("gear number: "); Serial.println(gear, DEC); delay(100); } old_gear_up = gear_up; gear_down = digitalRead(BUTTON_DOWN); if ((gear_down == HIGH) && (old_gear_down == LOW)) { gear -= 1; Serial.print("gear number: "); Serial.println(gear, DEC); delay(100); } old_gear_down = gear_down; if (gear >= 6) { gear = 6; } if (gear <= 1) { gear = 1; } { RE = digitalRead(RE); if ((RE == HIGH) && (old_RE == LOW)) { gear = RE; Serial.print("gear number: "); Serial.println(gear, DEC); delay(100); } } setLed(gear); } Bitte um Hilfe
Anscheinend verwendest du einen Arduino, aber bitte drücke dich klarer aus: Was hast du den wie an welchem Board angeschlossen und was willst du genau erreichen ?
Ich verwende ein Arduino Nano 3.0 Es soll wie eine Ganganzeige funktionieren, einmal Taster betätigen eine Zahl rauf und umgekehrt.
Vielleicht zeigst du mal einen Schaltplan ? Wie sind die Taster angeschlossen ? Active-Low mit externen Pullups ? Die internen Pullups werden, soweit ich das sehen, nicht genutzt. Lass dir nicht alles aus der Nase ziehen. Edit: Sry habe gerade gesehen, das die Taster auf High geprüft werden. Trotzdem bleibt die Frage wie sie angeschlossen sind.
Robert Buchmayer schrieb: > das ist der Schaltplan > > Die 7 Segment anzeigen ist mit 150ohm Wiederstande angeschlossen > und die Taster mit 5V and Den Eingängen Pin10 und 12 Da hätten wir zumindest ein Problem. Wenn der Taster nicht gedrückt ist, hängt der entsprechende Eingang in der Luft und kann alle möglichen Werte annehmen. Besser ist es den Taster an GND zu legen und mit den internen Pullups den Eingang auf einen definierten Wert setzen (=> Siehe Arduino Site). Dann überprüft man ob der Taster gedrückt wurde, in dem man auf LOW testet. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Taster_und_Schalter http://www.mikrocontroller.net/articles/Entprellung Insgesamt würde das gesamte AVR bzw AVR-GCC Tutorial dieser Site dir sehr helfen.
OK danke werde ich morgen gleich mal testen, Hast du sonst im Code einen Fehler gesehen
Ja, würde es. Aber wozu willst 2 Widerstände verbauen, wenn du die im µC schon eingebaut hast und nur einschalten musst?
Robert Buchmayer schrieb: > würde es so auch funktionieren? Man kann auf den Bildern die Beschriftung kaum erkennen. Wenn beide Widerstände an GND und die Taster an 5V hängen sollte es wohl auch gehen.
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.