So...
Habs nun schon mal so hinbekommen, dass es ohne probleme funktioniert... nur teilweise hat er seinen spinnenden momente wo er einfach neustartet, oder einfach einen gedrückten button simuliert und dementsprechend reagiert. Oder manchmal blingt die Statusled gelb grün (abwechselnd) und er sendet unlesbare zeichen ^^
Teilweise aber funktioniert es wieder tadelos... müsste ein hardwarefehler sein oder? Vll mischen sich auch alte programmteile ein?
Vll ist es aber doch mein Code... wer ihn mal anguggen will 
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");
//Rolf wartet erstmal ab
erwarten(1);
//Rolf startet Kollusionsfahrt
collusion(10000);
//miau
RWARD();
Msleep(1000);
STOP();
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");
}
Lesezeichen