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;
}
O.
Lesezeichen