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:
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;
}
Gruß
mic
Lesezeichen