also kann ich assembler gleich mal vergessen ^^
Also ich habe nun Rolfs ablauf in eine unendliche schleife gepackt... und darunter auch eine die den Atmega am laufen hält, wenn er aus der ersten schleife ausbrechen sollte.
Jedoch spinnt er so genauso... hmmh.. sagen wir mal... sogar noch einwenig mehr ^^
Hier der geänderte code:
Er macht nur das was er soll wenn ich auf keinen taster drücke... warum bringen die taster alles durcheinander? Eine sehr sehr nervige angelegenheit.. grmlCode:#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 { zeit = Gettime(); t1 = PollSwitch(); t2 = PollSwitch(); if (t1 == 0 && t2 == 0 && zeit < (startzeit+lang)) //Keine Taste gedrueckt, Rolf feahrt vorwaerts { FWARD(); //Auf gehts } else if (t1 && t2 && t1 == t2 && zeit < (startzeit+lang)) { STOP(); //Stoppen if (t1 & 0x07 && zeit < (startzeit+lang)) //Linke tasten beruehrt { RWDL(); //LinksRueckwaerts ausweichen SerPrint("\r\n Hab links was beruehrt, weiche aus...\r\n"); } if (t1 & 0x38 && zeit < (startzeit+lang)) //Rechte tasten beruehrt { RWDR(); //RechtsRueckwearts ausweichen SerPrint("\r\n Hab rechts was beruehrt, weiche aus...\r\n"); } Msleep(1000); //Eine Sekunde rueckwarts fahren } SerPrint("\r\nWiederhohle Schleife fuer Collisionsfahrt\r\n"); PrintLong(zeit); } STOP(); SerPrint("\r\nVerlasse Collisionsschleife.\r\n"); }
Gibt es noch eine möglichkeit, die rolf das machen lässt was man ihn auch vorschreibt?![]()







Zitieren

Lesezeichen