PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flags setzen (?)



outdoorgamer
05.08.2006, 08:12
Hi Leute. Danke fürs lesen. Hab folgendes Problem.
Ich habde den Roboter Asuro, und möchte die Odometriedaten auslesen und speichern.
z.B. ein Stück vor fahren und die hell/dunkel Stellen zählen.

Ich kann zwr die Odometriedaten einlesen

a=OdometrieData(odo);

a verändert sich je nach hell,dunkel stelle

bei dunkelstellen nehme ich einen wert von a >=500 an ( dunkel=höherer wert)

also mache ich
if (a>=500)
Zaehler++;

---

Nun das Problem: Der dunkelwert ist nicht nur einmal erreicht sondern bei
Prozessordurchlauf mehrmals vorhanden, also würde eine einzige Dunkelstelle den Zähler hochschießen lassen ;(

Was kann ich tun ? Hab in anderen Programmen Flags entdeckt, die sind mir leider noch nicht bekannt. Kann es mir jemand erklären oder einen Lilnk schicken wo der Syntax erklärt ist ??

Vielen Dank

batti112
05.08.2006, 09:24
Flags sind eine meist boolsche Variable.
Du sicherst mit dem Flag ab das eine Operation nur einmal ausgeführt wird. Ein Beispiel:

flag = false;

tue dinge...
if(!flag) { flag = true; zaehler++;..}

Ich hoffe ich konnte dir ein wenig helfen.

mfg Batti

outdoorgamer
05.08.2006, 10:42
Danke für die schnelle Antwort.
Hab ich glaub ich noch nicht ganz verstanden :-(
Aber werde ich mal ausprobieren.

Wenn mit einem Flag abgesichert wird, dass der Zähler nur einmal hochgezählt wird, was ist, wenn sich das Gebilde in einer While Schleife befindet ? Der Prozessor geht beim Asuro das ganze Programm ja ständig durch
while (1)
{
(Programmm)
}

batti112
05.08.2006, 10:54
Du möchtest eine Aktion nur einmal ablaufen lassen...
Was musst du also tun? Du musst dir merken ob du dies schon einmal getan hast -> Flag



flag nicht gesetzt

while(1) {
if(!FlagGesetzt) tue aktion + flag setzen
}

outdoorgamer
06.08.2006, 19:17
Okay, Prinzip ist verstanden ;))

Mal schauen ob es klappt
Kann man das Flag auch wieder wegnehmen ?
Weil das Rad des Roboters dreht sich ja,
und nachdem eine hellstelle gekommen ist, kommt eine Dunkelstelle, danach aber WIEDER eine hellstelle.
Der Zähler soll ja permanent bei jeder neuen Hellstelle hochzählen und nicht nur einmal ;)))

Aber ich probiere das erstmal aus, viell. beinhaltet das ja schon die Lösung