Das wird so nichts werden. Um zu erkennen, ob während der Fahrt eine Taste gedückt wird, muss man den Tastenstatus im Programm auch einlesen. Wenn dein Programm also in einer while-Schleife ala
while (Licht[links] < white)
hängt und Licht[links] nie kleiner als white wird, wird auch nie etwas anderes gemacht, also auch kein PollSwitch(). Kein Einlesen der Tasten bedeutet eben auch, keine Reaktion auf Tasten.
Du könntest nun alle while-Schliefen um ein zusätzliches Ende per Tastendruck ergänzen, oder du überdenkst deinen Code nochmals komplett und trennst dich von deinen vielen Whiles.
Der Einbau der Tastenabfrage (keine Taste: Linienfolgen; Taste: Stopp) in deinen Code würde etwa so aussehen:
GrußCode:#include "asuro.h" #define dunkel 50 #define rechts 1 #define links 0 void warte (int s) { int x = 0; for (x = 0; x <s; x++) Sleep(72); } int main(void) { Init(); unsigned int Licht[2]; int white; FrontLED(ON); warte(1000); LineData(Licht); white = (Licht[links]+Licht[rechts])/2-60; MotorDir(FWD,FWD); MotorSpeed(180,180); //int i = 0; while (1) /* Abfrage der Tasten 1 Wenn (PINC & (1<<PC4)) == true dann keine Taste gedrückt Es wird dann die grüne StatusLED eingeschaltet und der Linie gefolgt Durch die verschachtelten while-Anweisungen kommt das Programm aber aus manche Stellen der Liniensuche nicht mehr raus, so dass weitere Tastenabfragen nur in Abhängigkeit der Liniesitiation erfolgen. */ if (PINC & (1<<PC4)) { StatusLED(GREEN); LineData(Licht); MotorSpeed(180,180); while (Licht[links] > white && Licht[rechts] > white) { MotorDir(FWD,FWD); LineData(Licht); } MotorSpeed(180,180); while (Licht[links] < white) { MotorDir(FWD,BREAK); LineData(Licht); while (Licht[rechts] < white) { MotorSpeed(255,180); LineData(Licht); while (Licht[links] > white) { MotorSpeed(255,180); LineData(Licht); } } MotorSpeed(180,180); } MotorSpeed(180,180); while (Licht[rechts] < white) { MotorDir(BREAK,FWD); LineData(Licht); while (Licht[links] < white) { MotorSpeed(180,255); LineData(Licht); while (Licht[rechts] > white) { MotorSpeed(180,255); LineData(Licht); } } MotorSpeed(180,180); } } /* Abfrage der Tasten 2 Bei gedrückter Taste wird dann der folgende Code ausgeführt, vorrausgesetzt, beim Linienfolgen wurde die Kette der while-Anweisungen durchlaufend und der neue Status der Tasten wird eingelesen. */ else { StatusLED(RED); } return 0; }
mic







					
					
					
						
Zitieren

Lesezeichen