das geht am einfachsten mit ifs:
NACHTEIL: der fährt dann erstmal 2m, oder eben 2cm an die wand und dann x sec gegen die wand, bis er es merktCode:if(bumper nicht gedrückt) { // hier dein Programmteil } else { // die Bumperauswertung }
Bessere und schonenedere Variante:
mit Zähler und while-schleife
setze für "(keine) Bumper gedrückt" eben den passenden Ausdruck ein (also z.B. "if(PIND & (1 << PD5))" )Code:// benötigt Variable zaehler (für 2m fahren wird die wohl seeeehr hoch gezählt, mach also am besten long int oder mehr) void main(void) { // initialisierungscode usw. zaehler=0; // Motoren an while((zaehler < wasweißichwieviel) && (kein Bumper gedrückt)) { zaehler++ ; // wenn zaehler für die Zeitverzögerung nicht ausreicht, // nochmal so ne "while"-schleife (MIT "&&(Bumper.... )" ) // evtl Batteriestand ausgeben } // Motoren aus if(BumperX gedrükt) // auswertung für Bumper X { // deine Reaktion { // Auswertung der anderen Bumper // dann dasselbe noch mit den anderen wende- und vorwärtsbewegungen // NICHT VERGESSEN: zaehler nach jeder while-schleife wieder auf 0 setzen, aber NIE in einer while-schleife }
und für "wasweißichwieviel" eben den Maximalwert, bis zu dem dein Robby die Variable "zaehler" zählen soll (die ist für die Zeitverzögerung zuständig)
EDIT: dann brauchst du deine stopwatch auch nicht mehr.
habs auch nochn bissle lesbarer gemacht








Zitieren

Lesezeichen