O.Code:#include "asuro.h" int main(void) { int diff; Init(); // Nur einmal initilisieren vor der Hauptschleife... Encoder_Init(); while(1){ // Wie soll die LED aus gehen wenn sie nicht // ausgeschaltet wird? // switched muss auch restauriert werden auf // den Urzustand. BackLED(OFF,OFF); StatusLED(RED); switched = 0; StartSwitch(); while (!switched) { MotorDir(RWD,RWD); MotorSpeed(130,130); // Die variable diff bildet die Differenz aus rechtem und // linkem Encoder stand ab, d.h. also die (pseudo) // differenz in der Wegstrecke. // Durch addition/subtraktion dieser Differenz auf die // PWM des jeweils anderen Rades wird dieser Fehler // im Zeitmittel ausgeglichen und dein ASURO fährt // geradeaus. Natürlich ist dass keine exakte // Herangehensweise, aber eine gute Näherung. // Klar?! :) diff = encoder[RIGHT]-encoder[LEFT]; MotorSpeed(175+diff,175-diff); Msleep(100); } // ...sorry, aber dein else Zweig wird niemals // ausgeführt... // Dass If-Konstrukt ist somit überflüssig. /*if(switched){ */ BackLED(OFF,ON); StatusLED(YELLOW); /*} else { BackLED(OFF,OFF); StatusLED(RED);} }*/ Msleep(100); // sonst sieht man die LED nicht... } // Nie vergessen, reine Vorsichtsmassnahme.. while(1){} return 0; }![]()
Lesezeichen