wenn sensorwert sieben mal... ist

hallo.

ich habe eine frage an euch :

gibt es die möglickeit in eine ifbedingung eine anzahl einzubauch?
also so:

wenn ... sieben mal ... ist dann ...

vielen dank schon mal

Das geht bestimmt irgendwie.

Genau kann man das erst sagen, wenn du bessere Angaben machst.

Z.B. deinen Sketch postest.

@HotSystems

den sketch habe ich noch nicht wirklich angefangen aber ich kann natürlich genauer schreiben :slight_smile:

ich habe einen LDR der mit einer LED eine lichtschranke bildet. diese wird zur geldzählung eingesetzt.
mein problem war dass eine münze durch dass ständige auslesen des LDR mehrmals regestriert wird. also habe ich ein programm geschrieben was zählt vie viel signale die münze "auslöst" ich nin auf 1-7 signale pro münze gekommen.

um jetzt das geld selbst zu zählen ( sind verschiedene schächte wo immer eine münzsorte hineinfällt) habe ich eine weitere variable. diese möchte ich mit der ifanweisung immer umrechnen.

sozusagen

if (sensorwert < 512 (1-7 mal hintereinander) {
GELD = GELD +1;
}

danke übrigens für die schnelle antwort

Hast Du Dir mal diesen Münssortierer angeschaut? Da haben wir nebenan einen Thread dazu gehabt.

Nur hat der Fragende leider nicht das Ergebnis eingestellt. Man kann es aus den Beiträgen aber ermitteln.

Das ist etwas an Deiner Frage vorbei, aber evtl. bringt es Erkenntnissen.

Gruß Tommy

Man kann das Ganze mit einer while Schleife lösen, die beim zutreffen der Bedingung hoch zählt

Bsp:
int i=0;
while(i<=7){
if("Bedingung"){
i++
}
}

falls sieben Mal hintereinander die Bedingung stimmen soll einfach nach dem if ein else{ i=0} und es muss wieder neu angefangen werden zu zählen

Hi

Da eine Lichtschranke nicht prellt, machst Du was grundlegendes beim Auslesen falsch.
Ein mechanischer Taster prellt (je billiger, desto schlimmer).
Eine Elektronik im Allgemeinen nicht - Die hat zwei Zustände und mit hoher Wahrscheinlichkeit eine Hysterese dazwischen.

MfG

@hendrik5162
Was passiert, wenn nur 3 'Impulse' generiert werden?
Du hängst in der While-Schleife!
Bei >=7 kommst Du durch, hilft Dir aber nur bedingt.
Wesentlich besser wäre Es, das Übel an der Wurzel anzufassen - wo diese Impulse erzeugt werden.

@henrik5162: Wenn sie aus irgendeinen Grund dann einmal nicht 7 wird, hängt Dein ganzes Script.
Wir haben momentan einfach zuwenig Infos, um solche Entscheidungen zu treffen.
Außerdem ist while überflüssig, Du hast doch loop.

Gruß Tommy

Ich würde mir da eine besser funktionierende Lichtschranke aussuchen.
Ein LDR ist da deutlich zu langsam.
Mit einer Fotodiode wirst du da sicher mehr Erfolg haben.

Hi

Ein LDR ist langsam, prellt aber ebenfalls nicht.
Ich denke eher, daß der Sensor gepollt wird und die Münze eben bis zu 7 Durchläufe braucht, die Lichtschranke wieder zu verlassen.

Werden wir Es jemals erfahren?

MfG

Ich denke eher, daß der Sensor gepollt wird und die Münze eben bis zu 7 Durchläufe braucht, die Lichtschranke wieder zu verlassen.

Da stimme ich zu.
Du mußt die Flanken des Signls erkennen. Also L-H Flanke und dann H-L Flanke dann ist genau 1 Münze Vorbeigerutscht.
Grüße Uwe

also dass mit dem ldr ist so :
er wird ja analog augelesen und dann zeigt er den wert im serial monitor an. weil der ldr allerdings sehr oft ausgelesen wird findet sich die münze in mehreren der messungen wieder.

wenn ich jetzt nur schreibe wenn der ausgelesene wert unter 512 ist ( und dann geld + 1) dann weden ja für jede münze mehrere +1 dazugezählt ( wenn die münze in 7 der messungen sichtbar ist dann +7 obwohl +1 richtig wäre)

dann hatte ich gedacht wenn die münze in 7 messungen erkennbar ist kann ich ja einfach schreiben geld + 1/7 was dann bei 7 mal wieder 1 ergeben würde.
wenn die münze aber nur in 6 messungen erkennbar ist dann passt dass wieder nicht .

deshalb will ich in der ifanweisung wenn der wert 1-7 mal unter 512 ist. was dann keinen rechenfehler verursachen würde.

und ja es ist eine selbstgebaute lichtschranke aber sie funktioniert sehr gut da sie nicht zwischen münzen entscheiden soll, sie soll nur pro münzdurchlauf eine variable + 1 rechnen. das die lichtschranke die münze allerdings mehrmals regestriert geht dass nicht so einfach.

ich hoffe ich habe einigermaßen erklärbar geschrieben und nochmal ein riesen dankeschön für eure mithilfe

Das ist ein schlechter Weg. Wenn die Münze mal langsamer ist und 8 mal registriert wird, was ist dann?
Du musst das anders machen.

Wenn der Analogwert kleiner 512 ist und der Merker nicht gesetzt ist, Merker setzen und um 1 hochzählen.
Wenn der Analogwert größer 5XX ist den Merker löschen

Dann wird jede Münze nur einmal registriert.

Uwe sagt das gleiche:

uwefed:
Du mußt die Flanken des Signls erkennen. Also L-H Flanke und dann H-L Flanke dann ist genau 1 Münze Vorbeigerutscht.

Gruß, Jürgen

uwefed:
Da stimme ich zu.
Du mußt die Flanken des Signls erkennen. Also L-H Flanke und dann H-L Flanke dann ist genau 1 Münze Vorbeigerutscht.
Grüße Uwe

bin noch nicht lange am programmieren lernen....
das verstehe ich noch nicht ganz was sind diese flanken?
LG und Dankeschöen

was wäre dann dieser marker ?? :sweat_smile:

Bei Digitaltechnik ist das relativ einfach zu erklären.
Die L-H Flanke ist der Punkt an dem das Signal von L (LOW = z.B. 0V) auf H ( HIGH = z.B. 5V) wechselt.

Bei Analogtechnik gibt es eigentlich keine L-H Flanke. Das macht eigentlich dann eher Dein Programm.
Also L = <512 und H = >512.

Gruß, Jürgen

wenn ich den ldr jetzt digital auslesen würde könnte ich einfach schreiben

wenn der sensorwert weniger als 5v ist dann geld + 1
oder?

Merker nicht Marker

Ein Merker ist eine Variable die dazu dient einen Zustand zu speichern.

In Deinem Fall wird die Variable z.B. auf 1 gesetzt und Dein Münzzähler um 1 hochgezählt wenn der Eingang <512 ist und die Variable vorher <> 1 war.
Wenn beim nächsten Durchlauf der "loop" wieder festgestellt wird das der Eingang <512 ist, ist der "Merker" ja schon 1 und deshalb wird nicht hochgezählt.
Wenn dann irgendwann festgestellt wird das der Eingang >512 ist, wird der "Merker" z.B. wieder auf 0 gesetzt und das Spiel kann wieder von vorne beginnen.

Gruß, Jürgen

MaditaSvenja:
wenn ich den ldr jetzt digital auslesen würde könnte ich einfach schreiben

wenn der sensorwert weniger als 5v ist dann geld + 1
oder?

Eventuell ja, aber nur so ähnlich. Mit digitalRead Zustand auf LOW / HIGH überprüfen.
Geht aber nur wenn der LDR die Spannung so tief runterzieht das auch ein LOW erkannt wird und den Merker brauchst Du da weiterhin.

Gruß, Jürgen

Hi

Da Du mit analogen Messungen auf bis zu 7 Messungen kommst, sollten wir dabei bleiben.
Du als Mensch siehst Dir die Messwerte an und erkennst beim ersten ansteigen der Werte 'aha, Da ist die Münze'.
Dieser Pegel bleibt die nächsten 3...10 Messungen ungefähr auf diesem Level, dann fällt Der wieder ab - Du, als Mensch, erkennst 'Münze ist durch'.
Und genau Das musst Du Deinem Programm beibringen!

Also: Was machst Du?
Du 'guckst Dir die vorbeiflitzenden Messwerte an'.
Das bekommt der Arduino auch hin :wink:
Wenn die Messwerte ansteigen, erkennst Du 'Münze ist drin' - DAS möchte auch der Arduino können.
if (ldr_wert>512 && muenze_drin==false){
muenze_drin=true;
}
Schritt 1 fertig - wir merken uns, wenn eine Münze 'rein kommt'.

Nun 'warten' wir, bis die Münze wieder weg ist - allerdings nicht im Sinne von 'Warten', sondern wir machen erst hier weiter, wenn die Münze weg ist - sonst machen wir halt hier - Nichts!
if (ldr_wert<512 && muenze_drin==true){
einwurf++; //diese Münze zählen
muenze_drin=false; //und den Merker / das Flag (Flagge) wieder zurück setzen/löschen
}

Schritt 2 und fertig.
Damit wertest Du die Flanken aus - wenn vorhin noch keine Münze 'drin' war und jetzt der LDR eine Münze meldet, ist Diese neu und wir merken 'münze_drin' = Flanke von keine Münze -> Münze drin.

Wenn vorhin noch eine Münze gesehen wurde, jetzt aber nicht mehr, dann zählen wir die eingeworfenen Münzen hoch und löschen das Flag für die nächste Münze.

Wenn in den Bedingungen entweder der LDR oder das Flag nicht passt, machen wir hier - genau: Nichts!

Ob's mit digitalRead() klappt - kA - und wenn: für wie lange? Auch bei Vollmond? (oder anderen bisher nicht bedachten Konstellationen).

MfG

danke nochmals

meine programmierung sieht im moment so aus. kann da jemand drüberschauen? bei mir klappt sie noch nicht @postmaster-ino

4_lichtschranken_als_gelderkennung_.ino (1.63 KB)