Hallo zusammen,
ich habe eine kleine SucheBall Funktion geschrieben, mit der der Asuro einen LED-Ball detektieren soll. Diese Funktion klappt an sich ganz gut, jedoch gibt es Probleme, wenn ich die PollSwitch Funktion implementiere. Kommentiere ich die PollSwitch Funktion aus und ersetze die Abfrage der Taster in der letzten while Schleife durch while (1) springt er in diese Schleife und steuert auf den Ball zu. Im anderen Fall dreht er sich nur im Kreis und scheint nicht in diese Schleife zu springen. Jedoch möchte ich den Asuro wissen lassen, wann er gegen den Ball "geknallt" ist
Hoffe mal jemand hat ne Idee, woran es liegen könnte.
Gruß
Code:void SucheBall(void) { Timer_Overflow_Count=0; while(Timer_Overflow_Count<360) { if (Timer_Overflow==1) { TCNT0=0; //Register auf Startwert 0 setzen MotorDir(FWD,RWD); MotorSpeed(120,120); LineData(lData); Mittelwert_aktuell=(lData[0]+lData[1])/2; if (Mittelwert_aktuell>Mittelwert_max) {Mittelwert_max=Mittelwert_aktuell;} Timer_Overflow_Count++; Timer_Overflow=0; } } //Timer stoppen TCCR0 &=~(1<<CS02); // löscht Bit an CS02 while (Mittelwert_aktuell2<=Mittelwert_max-50) //vergleiche neuen mittelwert mit gespeichertem Mittelwert_max { MotorDir(RWD,FWD); MotorSpeed(120,120); LineData(lData); Mittelwert_aktuell2=(lData[0]+lData[1])/2; } t1=PollSwitch(); Sleep(216); Sleep(216); t2=PollSwitch(); while ((t1==0)&&(t2==0)) //Solange Taster nicht gedrückt.... { BackLED(ON,ON); LineData(lData); if(lData[0]>lData[1]) //Wenn linker Phototransistor "heller" ist als rechter {Forward(100,200);} //fahre links rum else {Forward(200,100);} //sonst rechts rum t1=PollSwitch(); Sleep(216); Sleep(216); t2=PollSwitch(); } BackLED(OFF,ON); for(;;) Forward(0,0); TCNT0 = 0; //Register auf Startwert 0 setzen} TCCR0 |=(1<<CS02);//Prescaler:256 "clkI/O/256" } SIGNAL(SIG_OVERFLOW0) //Funktion wird aufgerufen, wenn Timer überläuft { Timer_Overflow=1; }







Zitieren

Lesezeichen