das geht am einfachsten mit ifs:
Code:
if(bumper nicht gedrückt)
{
// hier dein Programmteil
}
else
{
// die Bumperauswertung
}
NACHTEIL: der fährt dann erstmal 2m, oder eben 2cm an die wand und dann x sec gegen die wand, bis er es merkt
Bessere und schonenedere Variante:
mit Zähler und while-schleife
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
}
setze für "(keine) Bumper gedrückt" eben den passenden Ausdruck ein (also z.B. "if(PIND & (1 << PD5))" )
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
Lesezeichen