Go Down

Topic: Lichtschranken Zähler  (Read 887 times) previous topic - next topic

SkobyMobil

Hallo,
mit dem Sketch aus #27 klappt nichts- Tonne!

Der Sketch aus #18 läuft doch.
Dann den Zähler aus #19 dazu.
In #21 läuft der Zähler doch.
In #22 leuchtet die LED nur bei "10" sonst ist sie aus.

Und was gefällt Dir bis hier her nicht?
Bring den Sketch erst einmal wieder bis #21 zum laufen.

Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

#31
Aug 12, 2017, 08:32 pm Last Edit: Aug 12, 2017, 08:40 pm by onal13
 
Code: [Select]
int LEDInaktiv=5; //Led wenn Lichtschranke nicht durchbrochen
int LEDAktiv=6; //Led wenn Lichtschranke durchbrochen
int LEDIr=7; //IR Led
int PD=A0; //Analoger Eingang der Photodiode
int val=0; //Messdaten int do_debug=1;
int do_debug=1;
int Zähler;

void setup()
{
if (do_debug ==1) Serial.begin(9600);
//benötigte Ports aktivieren
pinMode(LEDAktiv, OUTPUT);
pinMode(LEDInaktiv, OUTPUT);
pinMode(LEDIr, OUTPUT);
pinMode(PD, INPUT);
//IR Led einschalten
digitalWrite(LEDIr,HIGH); //einschalten der IR Diode
}

void loop()
{
val=analogRead(PD); //Photodiode auslesen
if (val<60) //Wird der Lichtstrahl unterbrochen...
{
digitalWrite(LEDAktiv, HIGH);
digitalWrite(LEDInaktiv, LOW);
Zähler++;
}
else
{
digitalWrite(LEDAktiv, LOW);
digitalWrite(LEDInaktiv, HIGH);
}
if (do_debug ==1)
{ Serial.println(val); //Werte zum Serial Monitor senden
delay(1);
Serial.println(Zähler);
}
}

  

so den zähler habe ich wieder hinzugefügt aber wie ich dass jetzt schaffe das die Grüne nach 10 mal angeht und die rote dann ausgeht dafür bin ich irgendwie zu blöd

SkobyMobil

#32
Aug 12, 2017, 08:45 pm Last Edit: Aug 12, 2017, 08:45 pm by SkobyMobil
Hallo,
wenn Du den Sketch startest, dann gibt es keinen ZählerWert im seriellen
Monitor?
Wenn Du jetzt einmal die Lichtschranke unterbrichst, was hast Du dann
für einen ZählerWert im seriellen Monitor angezeigt bekommen?
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

da kommt beim Kompilieren eine Fehlermeldung
stray '\344' in program

was bedeutet das ?

mit freundlichen grüßen

SkobyMobil

Hallo,
Mist! Mache aus Zähler mal Zaehler.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

Hallo,

das Zählen klappt jetzt
danke erstmal für die Hilfe aber wie schaffe ich jetzt das nach 10 mal die grüne led angeht und die rote aus ?

mit freundlichen grüßen

SkobyMobil

Hallo,
Wenn Du jetzt einmal die Lichtschranke unterbrichst, was hast Du dann
für einen ZählerWert im seriellen Monitor angezeigt bekommen?
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

Hallo,
Wenn Du jetzt einmal die Lichtschranke unterbrichst, was hast Du dann
für einen ZählerWert im seriellen Monitor angezeigt bekommen?
Gruß und Spaß
Andreas

Er zählt hoch solange ich nicht mehr unterbreche.

mit freundlichen grüßen 

SkobyMobil

Hallo,
wenn Du schnell unterbrichst, dann ist es ein kleiner ZählWert und wenn Du langsam unterbrichst ein großer
Zählwert.
Du solltest erst einmal so abfragen, das bei einer Unterbrechung (egal wie langsam/schnell) nur einmal
gezählt wird.
1. Unterbrechung, Zählwert 1
2. Unterbrechung, Zählwert 2
u.s.w.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

Du solltest erst einmal so abfragen, das bei einer Unterbrechung (egal wie langsam/schnell) nur einmal
gezählt wird.


also ich hab den Zähler den wert 0 gegeben aber das klappt nicht

Deltaflyer

Setzt eine Variable als Merker.

Ist die Lichtschranke NICHT unterbrochen, setzt Du den Merker auf 0.

IST die Lichtschranke unterbrochen, prüfst Du, ob der Merker auf 0 ist. Wenn ja, Zähler um eins erhöhen, und merker auf 1 setzen. Wen merker schon auf 1 ist, Merker auf 1 lassen und Zähler NICHT erhöhen.

So muss die Lichtschranke erst wieder kurz frei werden, bevor das nächste Objekt gezählt werden kann.

LG Stefan

onal13

#41
Aug 13, 2017, 03:02 pm Last Edit: Aug 13, 2017, 03:09 pm by onal13
Setzt eine Variable als Merker.

Ist die Lichtschranke NICHT unterbrochen, setzt Du den Merker auf 0.

IST die Lichtschranke unterbrochen, prüfst Du, ob der Merker auf 0 ist. Wenn ja, Zähler um eins erhöhen, und merker auf 1 setzen. Wen merker schon auf 1 ist, Merker auf 1 lassen und Zähler NICHT erhöhen.

So muss die Lichtschranke erst wieder kurz frei werden, bevor das nächste Objekt gezählt werden kann.

Code: [Select]

 int Led=5; //Led wenn Lichtschranke nicht durchbrochen
 int Ledu=6; //Led wenn Lichtschranke durchbrochen
 int PD=A0; //Analoger Eingang der Photodiode
 int val=0; //Messdaten int do_debug=1;
 int do_debug=1;
 int counter = 0 ;
 int merker = 0;

 void setup()
 {
 if (do_debug ==1) Serial.begin(9600);

 pinMode(Ledu, OUTPUT);
 pinMode(Led, OUTPUT);
 pinMode(PD, INPUT);
 }

 void loop()
 {

 val=analogRead(PD); //Photodiode auslesen
 
 if (val>60) //Wird der Lichtstrahl nicht unterbrochen...
 
 {
   merker = 0;

 digitalWrite(Ledu, LOW);
 digitalWrite(Led, HIGH);
 delay(500);
 }

 if ((val<60) && (merker = 0))
 {
  counter++;
  merker = 1;

   digitalWrite(Led, LOW);
 digitalWrite(Ledu, HIGH);
 delay(500);
  }
 if (do_debug ==1)
 {
 Serial.println(counter);
 Serial.println(merker);
 }
 }



Klappt nicht.
was hab ich falsch gemacht ?

mit freundlichen grüßen

SkobyMobil

Hallo,
Du scheinst da zu machen, was Du willst... ist auch egal. Ich habe da keine Lust mehr zu.
Hier hast Du eine Funktion, die ein bestimmtes Ergeignis nur einmal zuläßt.
Code: [Select]
static boolean MachEinmal = true;

if (Ereignis() == wert)
{
 if(MachEinmal)
 {
  // X soll einmal ausgeführt werden
  MachEinmal = false;
 }
}
else
{
  MachEinmal = true;
}


den Zähler kannst Du nach seinem erreichten Wert wieder mit
Code: [Select]
Zaehler=0;
auf Null (0) setzen.
Nun hast Du alles was Du brauchst.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

onal13

Du scheinst da zu machen, was Du willst... ist auch egal.


ich bitte um Entschuldigung das ich noch Anfänger bin und bisschen rumprobieren will.
trotzdem danke für Hilfe

HotSystems

Klappt nicht.
was hab ich falsch gemacht ?
Du gehst da ran, ohne die Grundlagen überhaupt zu verstehen.
Lerne die Grundlagen und baue es selbst und eigenständig systematisch auf.
Nur so wirst du es verstehen.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up