Galtonbrett - Punktestandanzeige

Gast #2901134
Lesenswert?

Hallo,

ich habe ein Galtonbrett( http://de.wikipedia.org/wiki/Galtonbrett ) 
gebaut, bei dem der Punktestand an einem LCD angezeigt werden soll. 
Jeder Schacht besitzt jedoch eine andere Punktzahl. Ich verwende einen 
Arduino Uno duemillanove. Ich habe 14 Schächte, auf die die Punktzahlen 
symmetrisch verteilt sind, also sieben verschiedene Punktzahlen. Ich 
hatte das Programm getestet bevor ich alles zusammengebaut und verlötet 
habe und da hat alles funktioniert, wenn ich jetzt den fünften und den 
siebten wert freigebe, so wird von selbst begonnen zu zählen und nicht 
mehr aufgehört. Alle anderen Schächte funktionieren tadellos. Ich habe 
je Schalter - da symmetrisch angeordnet- auf einen input geklemmt, die 6 
analogen, die der arduino hat und einen digitalen. Zusätzlich ist jeder 
Input mit einem Pull down widerstand von 100 kOhm auf Masse gelegt. 
bezüglich der +5V sind die Schalter in reihe geschaltet.

#include <LiquidCrystal.h>


LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int Punktestand;

void setup() {

  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  //pinMode(PIN0,INPUT);



}
void loop(){
  lcd.begin(16,2);
    int WertS1 = 1;
    int WertS2 = 2;
    int WertS3 = 3;
    int WertS4 = 4;
    int WertS5 = 5;
    int WertS6 = 6;
    int WertS7 = 7;
    int Schalter1 = digitalRead(A0);
    int Schalter2 = digitalRead(A1);
    int Schalter3 = digitalRead(A2);
    int Schalter4 = digitalRead(A3);
    //int Schalter5 = digitalRead(A4);
    int Schalter6 = digitalRead(A5);
    int Schalter7 = digitalRead(PIN0);
    lcd.clear();
    lcd.print("Punktestand:");
    lcd.setCursor(0, 1);

    if ( Schalter1 == HIGH ){
     Punktestand += WertS1;
     }
    else if ( Schalter2 == HIGH ) {
      Punktestand += WertS2;
     }
    else if ( Schalter3 == HIGH ) {
      Punktestand += WertS3;
     }
     else if ( Schalter4 == HIGH ) {
      Punktestand += WertS4;
     }

     /*else if ( Schalter5 == HIGH ) {
      Punktestand += WertS5;
     }*/
     else if ( Schalter6 == HIGH ) {
      Punktestand += WertS6;
     }
     //else if ( Schalter7 == HIGH ) {
     // Punktestand += WertS7;
     //}
     lcd.print(Punktestand);
     delay(100);

}

Könnt ihr mir sagen wo der Hase begraben liegt. Oder habt ihr 
verbesserungsvorschläge für meinen Quelltext?
Vielen dank im vorraus
Angehängte Dateien:
Gast #2901179
Lesenswert?

Moritz schrieb:
> Zusätzlich ist jeder Input mit einem Pull down widerstand von 100 kOhm
> auf Masse gelegt. bezüglich der +5V sind die Schalter in reihe geschaltet.

Ich würde vermuten, dass du statt "in Reihe" "parallel" meinst.
Den Arduino kenne ich leider nicht, aber die Beschaltung mit ein 
Pulldown-Widerstand ist eher unüblich, da die Controller alle einen 
internen Pullup besitzen.

So, jetzt zu deinem Problem:
Ich vermute, dass deine "Problem"-Schalter durch einen Kurzuschluss 
überbrückt werden.
Du solltest mal die Verbindung über die Schalter überprüfen.
Gast #2901201
Lesenswert?

Als ich den Pull-down noch nicht hatte, waren die microschalter gegen 
Masse, +5V und den entsprechenden Pin gelegt, da ich jedoch immer zwei 
schalter an einem Pin hatte, gab es bei dem betätigen des Schalters 
immer einen kurzen. Deshalb wurde die Masse dann weggelassen und der 
Pull-down angeschlossen. Als ich zu testzwecken lediglich zwei Schalter 
angeschlossen hatte, wurde auf den restlichen 5 munter hochgezählt. Dies 
ist bei Schacht 5 & 7 wieder der Fall.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren