Ich versuche zur Zeit mit einer Lichtschranke (IR-Diode <-> Phototransistor) für meinen Tischfussballkasten einen Torzähler zu realisieren.
Im Prinzip soll es so funktionieren, dass wenn der Ball bei einem Tor die Lichtschranke unterbricht, soll im Arduino die entsprechende Torzahl um 1 erhöht werden. Nun habe ich in meinem Code allem Anschein nach einen Fehler, da die Variable ohne Auslösung der Schranke beginnt hochzuzählen.
Da ich ein waschechter Frischling bin und auch mit programmieren auf einem noch tiefen Niveau bin, wäre ich froh wenn sich kurz jemand meinen Code anschauen und mir evtl weiterhelfen könnte.
Serial.begin(9600); solltest du ins Setup packen
es sollte zwar auch anders gehen, aber nehme doch
if (digitalRead(ReadPin==LOW)){ //Wenn Lichtschranke unterbrochen, Tore blau 1 hochzählen
was soll exit bewirken?
Serial.beginn kommt ins setup
delay und exit werden nicht benötigt.
Das Tore zählen kannste weiter oben mit erledigen. Die LED abfragen kann man damit einsparen. Wäre eh etwas seltsam gewesen.
Wie sieht denn der Schaltplan aus?
wobei das mit der Datei anhängen auch nicht falsch ist, gerade wenn der Code länger ist. Weil a) das Antwortfenster Zeilen begrenzt ist und b) man sich mit der Datei einen besseren Überblick verschaffen kann. Ich schaue mir das gern erstmal im Editor Notepad++ an oder in der IDE. Aber mach wie dir beliebt.
Hier mal ein Projekt, wo du dir evtl. was abgucken kannst. http://forum.arduino.cc/index.php?topic=73751.0
Ist kein Torzähler, sondern ein Geschwindigkeitszähler.
Aber auch sehr interessant.
Hallo zusammen. Dachte mir mache eine kurze Rückmeldung. Hab noch ein bisschen am Vorschlag von ardubu rumgebastelt und nun funktionierts. Vielen Dank nochmals dafür.
Der Code sieht nun so aus:
const int ReadPin = 2; //EingangsPIN 2
const int ledPin = 13; //LED an Pin 13
int ToreBlau = 0;
boolean state = 0;
boolean gewonnen = 0;
void setup()
{
Serial.begin(9600);
pinMode(ReadPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
Serial.println(ToreBlau); //Ausgangspunktzahl 0
}
void loop()
{
if((!gewonnen) && ((ToreBlau)==10)){ //überprüfen ob blau gewonnen hat (entspricht 10 Toren)
if(ToreBlau = 10){
Serial.println("Team blau gewinnt!!!");
gewonnen = 1;
delay(5000);
Serial.println("Fuer ein neues Spiel, bitte Reset Button druecken!");
}
}
state = digitalRead(ReadPin);
if(state) //PIN auslesen
{
digitalWrite(ledPin, LOW); //Wenn Lichtschranke unterbrochen, LED Aus
}
else
{
digitalWrite(ledPin, HIGH); //Bei nicht unterbrochener Lichtschranke, LED Ein
}
if (state){ //Wenn Lichtschranke unterbrochen, Tore blau 1 hochzählen
ToreBlau++;
Serial.println (ToreBlau);
delay(500);
}
}