Hallo
Aber es passiert gar nichts nur die LED leuchtet grün
Das liegt in erster Linie daran, dass die StatusLED schon bei Init() auf grün geschaltet wird und sich das im Programm nie mehr ändert...
Dieser Programmteil
Code:
while(PollSwitch()==0){
MotorDir(FWD,FWD);
MotorSpeed(120,120);
StatusLED(GREEN);
}
wird solange ausgeführt bis mit PollSwitch() ein Tastenwert eingelesen wird der ungleich null ist. Blöderweise ist PollSwitch() ziemlich zickig und meldet gelegentlich auch einen Wert ungleich null wenn keine Taste gedrückt wird. Ursache dafür ist zum einen die Bauteilestreuung der Tastenbeschaltung (R24-32) die man eventuell durch eine bessere Kalibrierung der Tasten ausgleichen kann. Zum anderen stören die Motoren enorm, dies kann man durch Mehrfachabfragen und Plausibilitätsprüfungen ausmerzen.
Wenn nun eine Taste erkannt wird, wird die Schleife verlassen, mit
Code:
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
werden die Motoren abgeschaltet und mitwird endlos zum aufrufenden Programm zurückgesprungen. Da bei den AVRs kein aufrufendes Programm existiert, springt das erste return() irgendwo in den Speicher des AVRs und dieser stürzt dadurch ab.
Ungetestet:
Code:
#include "asuro.h"
int main(void)
{
Init();
StatusLED(YELLOW); // starten
MotorDir(FWD,FWD);
MotorSpeed(120,120);
// weiterfahren solange bei drei Lesungen mindestens einmal null dabei war
while((PollSwitch()==0) || (PollSwitch()==0) || (PollSwitch()==0));
StatusLED(RED); // anhalten
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
while(1); // Endlosschleife (mit Semikolon an Ende!)
return 0; // dieser Befehl wird nie erreicht
}
Infos zu den Tasten:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Tasten
Gruß
mic
Lesezeichen