So ich habe die änderungen vorgenommen... teilweise funktioniert es... nur teilweise spinnt er wieder völlig, schaltet sich manchmal sogar ab, oder startet einfach von neu. Ich hab wirklich keine ahnung ^^ warum er so ein eigenleben entwickelt ^^ ist ja auch irgendwie beabsichtigt, nur irgendwie kontrollierter ^^Code:#include "asuro.h" void erwarten(unsigned int male); //Rufe Wartemodus ab void collusion(unsigned int lang); //Rufe Collusion ab int main(void) { Init(); //Ab hier beginnt Rolf zu "Leben" //Morgenmassage senden SerPrint("\r\nMuah... muss ich aufstehen?\r\n"); //Rolfs ablaufchema in eine unendliche schleife setzen while (1) { //Rolf wartet erstmal ab erwarten(1); //Rolf startet Kollusionsfahrt collusion(10000); //miau RWARD(); Msleep(1000); STOP(); } //Rolfs durchdrehverhinderungsschleife while (1); return 0; } //Funktionen //Rolf wartet auf etwas void erwarten(unsigned int male) { unsigned int i; for (i = 0; i <= male; i++) { Msleep(500); StatusLED(GREEN); Msleep(10); BackLED (OFF, ON); Msleep(500); StatusLED(OFF); Msleep(10); BackLED (ON, OFF); Msleep(500); BackLED (OFF, ON); Msleep(500); BackLED (ON, OFF); if (i == male) BackLED (OFF, OFF); //Schalte Alles ab wenn am ende } } //Rolf vorwaerts void FWARD(void) { FrontLED(ON); //Kuendige Anfahren an Msleep(300); FrontLED(OFF); Msleep(150); FrontLED(ON); Msleep(300); FrontLED(OFF); MotorDir(FWD,RWD); //Beide Motoren vorwaerts MotorSpeed(150,150); //Los gehts } //Rolf rueckwaerts void RWARD(void) { MotorDir(RWD,FWD); //Beide Motoren rueckwearts MotorSpeed(120,120); //Los gehts } //Rolf rueckwaerts links void RWDL(void) { MotorDir(RWD,FWD); //Beide Motoren rueckwearts MotorSpeed(120,0); //Los gehts } //Rolf rueckwaerts rechts void RWDR(void) { MotorDir(RWD,FWD); //Beide Motoren rueckwearts MotorSpeed(0,120); //Los gehts } //Rolf stoppen void STOP(void) { MotorSpeed(0,0); FrontLED(OFF); } //Rolf kollusionsprogramm void collusion(unsigned int lang) { unsigned long zeit = 0; unsigned long startzeit = Gettime(); unsigned char t1; unsigned char t2; while (zeit < (startzeit+lang)) //Fahre so lange wie zeit gegeben ist { t1 = PollSwitch(); t2 = PollSwitch(); if (t1 == 0 && t2 == 0) //Keine Taste gedrueckt, Rolf feahrt vorwaerts { FWARD(); //Auf gehts } else if (t1 && t2 && t1 == t2) { STOP(); //Stoppen if (t1 & 0x07) //Linke tasten beruehrt { RWDL(); //LinksRueckwaerts ausweichen SerPrint("\r\n Hab links was beruehrt, weiche aus...\r\n"); } if (t1 & 0x38) //Rechte tasten beruehrt { RWDR(); //RechtsRueckwearts ausweichen SerPrint("\r\n Hab rechts was beruehrt, weiche aus...\r\n"); } Msleep(1000); //Eine Sekunde rueckwarts fahren } zeit = Gettime(); SerPrint("\r\nWiederhohle Schleife fuer Collisionsfahrt\r\n"); PrintLong(zeit); } STOP(); SerPrint("\r\nVerlasse Collisionsschleife.\r\n"); }
Lesezeichen