Zähler mit einer Lichtschranke

Hallo zusammen,
in einem Schulprojekt wollen wir einen “smarten” Tischkicker mittels Arduino realisieren.
Zunächst haben wir erstmal einen Torzähler mithilfe von einer Lichtschranke entwickelt, der im späteren Verlauf sein Ergebnis auf eine 7-Segmentanzeige und ein LCD bringt.
Jedoch scheitert es momentan schon am Zähler.

Wir haben die Lichtschranke aus einer LED und einem Fotowiderstand zusammengebaut und bereits einen Code programmiert. Das zählen gelingt bereits, jedoch soll der Zähler von 0 bis 10 zählen und dann nach ca 30s wieder auf 0 gestellt werden.

Hier das Programm:

#include "SevSeg.h"
SevSeg sevseg;
int eingang= A0; // Fotowiderstand
int LED_weiss=  8; //Beleuchtungsled
int sensorWert=0; // Variable für Startwert
int counter1=0;  // Zähler für team 1

void setup() {
Serial.begin(9600);
pinMode (LED_weiss, OUTPUT); // beleuchtungsled

byte numDigits = 4; // Anzahl der ziffern
byte digitPins[] = {7, 6, 5, 4}; //pins der ziffern
byte segmentPins[] = {14, 15, 16, 17, 18, 19, 20, 21}; // Segmentpins
sevseg.begin (COMMON_CATHODE, numDigits, digitPins, segmentPins); // Art von Anzeige wird festgelegt, wenn alle led's gleichzeitig leuchten auf COMMON_ANODE ändern
}

void loop() {  
digitalWrite(LED_weiss, HIGH);
sensorWert=analogRead(eingang); //Wert vom Fotowiderstand auslesen und in der Variable speichern
Serial.print ("Zählerstand");
Serial.println (counter1);

if (sensorWert < 500) // wenn LS unterbrochen Zähle +1
{ counter1= counter1 +1;
delay(500); 
}

while (counter1=10)
{
  delay(1000);                                        //in diesem Fall wird der Counter mit eintreffen des 10. 
                                                           //signals auf 0 gesetzt, er zeigt also die 10 nicht mehr an
  (counter1 =0);
}
}

Ich habe bereits mehrere Sachen ausprobiert, jedoch hats nie wirklich so geklappt wie ich wollte.

Also nochmal: Der Zähler zählt von 0-9 und wird bei eintreffen von “10” zurückgesetzt.
er soll aber von 0-10 zählen und dann erst nach 30s auf 0 springen.

auch Befehle wie

while (counter1>=10)
{
  delay(1000);                                     
  (counter1 =0);
}
}

oder

while (counter1>=11)
{
  delay(1000);                                     
  (counter1 =0);
}
}

oder if schleifen funktionieren nicht

Ich hoffe jemand hat eine Idee um das Problem zu lösen.
Gruß

Hallo,

if (zähler == 10)
{
delay (30000);
zähler = 0;
}

so könnte man es machen, könnte! ich würde jedes delay() durch millis() ersetzen Gruß und Spaß Andreas

Da ja das Zählen an erster Stelle steht, möchte ich vorschlagen einen Fototransistor zu nehmen, und eine InterruptRoutine zu benutzen. Genaueres findet sich HIER

const byte interruptPin = 2;
volatile byte state = LOW;
//(Rest deines Sketches)

void setup() {
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), count, CHANGE);
//(Rest deines Sketches)
}

void loop() {
 //Deine Auswertung
// Rest Deines Sketches
}


void count() {   // Interrupt Routine (Unterfunktion)
  counter1= counter1 +1;
}

Das ist jetzt zwar ein Einstieg ins Volle, aber ich finde das nicht kompliziert. Und es ist ein sehr guter Weg, sporadisch auftretende Ereignisse zu detektieren.

Die Funktionen im Loop laufen wie gewohnt ab. NUR wenn sich am Eingang 2 was tut, wird NUR die Funktion count() aufgerufen. (hier Zähler + 1) und direkt wieder loop() ausgeführt. mit " if (counter1 = 10) kannst Du ja dann im loop() alles mögliche anstellen.

Bleib von dem delay() weg... das macht nur Ärger...

Ah.. edit... das INPUT_PULLUP bedeutet, dass der Pin D2 auf MASSE gezogen werden muss, um zu schalten. Macht die Verdrahtung auch nochmal einfacher...

Stefan

Hallo, "mit " if (counter1 = 10) kannst Du ja dann im loop() alles mögliche anstellen."

Was denn zum Beispiel? Gruß und Spaß Andreas

Sorry, es muss heißen: if (counter1 ==10). Mein Fehler nach drei Gläsern Wein. :confused:

Stefan

Hallo mecham

Wir haben an unserer Schule vor kurzem genau ein solches Projekt zu Ende geführt. Ich hoffe, ihr findet die nötige Hilfe, ohne dass sie euch zum "Spielverderber" wird, weil bereits fertig.

|500x281

Die Projektbeschreibung hier auf unserer Schulwebseite

Der lange Weg zum fertigen Kickerzähler in einem Forum

Das Projekt mit allem Drum und Dran und auf Englisch vorgestellt auf Hackster

OSZT