Ich versuche für ein Projekt immer wenn mein MH-Sensor unterbrochen wird, um 1 Hochzuzählen bis zu einem maximum von 6 und dann wieder von vorne zu beginnen. Mit meinem aktuellen Code zählt mein Wert für count aber immer solange die Lichtschranke unterbrochen ist wie wild von 1- 6.
Wie kann ich dem Programm sagen, dass es bei jedem trigger nur einmal hochzählen soll?
if(count<6){
switch (state)
{
case wait2start:
if (wert <= 300) // Der Näherungssensor hat ausgelöst
{
state = triggerOne;
} // ersten Schritt machen
break;
case triggerOne:
count++;
if (wert > 300) // Warten, das der Sensor frei ist
{
state = waitForAnker; // nächsten Schritt machen
}
break;
case waitForAnker:
if (wert <= 300) // Der Näherungssensor hat zum zweiten Mal ausgelöst
{
state = triggerTwo; // nächsten Schritt machen
}
break;
case triggerTwo:
count++;
if (wert > 300) // Und hier ist der Punkt, wo was neues passieren muss
{
state = wait2start;
}
break;
}}
Versuche es mal durch Versetzen von count++; (ungetestet):
if(count<6){
switch (state)
{
case wait2start:
if (wert <= 300) // Der Näherungssensor hat ausgelöst
{
count++;
state = triggerOne;
} // ersten Schritt machen
break;
case triggerOne:
if (wert > 300) // Warten, das der Sensor frei ist
{
state = waitForAnker; // nächsten Schritt machen
}
break;
case waitForAnker:
if (wert <= 300) // Der Näherungssensor hat zum zweiten Mal ausgelöst
{
count++;
state = triggerTwo; // nächsten Schritt machen
}
break;
case triggerTwo:
if (wert > 300) // Und hier ist der Punkt, wo was neues passieren muss
{
state = wait2start;
}
break;
}}
Super das geht auch und ist etwas übersichtlicher
Wie wäre es wenn ich zwei Sensoren an verschiedenen Positionen hab und jede Unterbrechung von einem dieser Sensoren den Zähler hochsetzen soll ginge das irgendwie mit einem Oder befehlt?
Also sozusagen Sensor 1 wird unterbrochen Zähler geht von 0 auf 1 dann wird Sensor 2 Unterbrochen und der zähler geht von 1 auf 2 usw.
"usw. " ist unklar.
Soll völlig egal sein, welcher Sensor wann anspricht ?
Können beide gleichzeitig, also ein Sensor geht in state = trigger, während der andere auch in trigger ist?
Und dann werden beide gezählt?
Im gleichen Zähler oder wäre nicht je ein Zähler für jeden Sensor netter?
Beide Zähler vergleichen oder zusammenaddieren?
Klar, alles geht. Nur nicht alles gleichzeitig.
Und ein "Oder-Befehl" alleine reicht nicht,
zwei analogRead Aufrufe brauchst du auch...
Ich habe einen Rotor mit 3 Ankern und jedes mal wenn einer dieser Anker einen der Sensoren Unterbricht soll der Zähler um eins hoch gehen. Es werden dabei nie beide Schranken gleichzeitig unterbrochen.
Ja.
Wobei das mit dem befehl wohl eher nicht.
Frage sensor 1 ab.
Wenn der auslöst, incremtiere den counter.
Frage sensor 2 ab.
Wenn der auslöst, incremtiere den counter.
Bei C++ gibt es gar keine Befehle. @my_xy_projekt hat dir 4 Zeilen hingeschrieben.
Die ersten zwei hast du schon realisiert.
Das musst du also für den zweiten Sensor also einfach nochmal machen.
Wobei "musst" eher "kannst du" heißt, eleganter gehts immer