Ohh man, das ich da nicht früher drauf gekommen bin![]()
Wenn ich mit encoder[0] arbeite hab ich genau das gleiche Problem.
Werd also die Schaltung noch mal in diese Richtung prüfen müssen.
Vielen Vielen Dank!!!!
Hab da aber ein anderes kleines Programmtechnisches Problem.
Vielleicht kann mir da mal jemand helfen. Hab wahrscheinlich ne kleine Denkblockade.
Denn jedesmal wenn ein case im Switch fertig ist hängt sich mein Programm auf.
Schon einmal Danke im VorrausCode:#include "asuro.h" #include "myasuro.h" int x=0; //Zählvariablen für diverse Zählschleifen char emfangene_daten[10]; void Goo(int d,int l) //eigene go anweisung { StatusLED(GREEN); SetMotorPower(d,d+5); //Fahr los mit vorgegebenem Tempo,richtung über +/- Wert l=l*38/10; //l ist die Strecke die zurück gelegt werden soll. 1cm = 3.8 ticks EncoderInit(); for(encoder[1]=0; encoder[1]<=l; ) //Abfrage nur von einem Encoder, da der andere defekt ist! { Msleep (10); } MotorSpeed(BREAK,BREAK); } int main(void) { Init(); //Devinierter Zustand vom ATMEL while(1) { while (PollSwitch() == 0) { StatusLED (GREEN); Msleep (500); StatusLED (RED); Msleep (500); } switch (PollSwitch()) //Auswahlmenü gesteuert über Pollswitch { case 1:emfang(); //aufruf von Emfang break; case 4: //Kleine Fahranweisung zu Demo zwecken. StatusLED (YELLOW); //Funktioniert nicht!!!! Msleep (2000); EncoderInit (); for (x=1; x<=4; x++) //Asuro fährt ein quadrat {GoTurn ( 0, 45, 200); //45° hier entspricht 90° drehung im real, da "grobe" encoderscheibe eingebaut GoTurn (150, 0, 200);} Msleep(1000); for (x=1; x<=2; x++) //Asuro fährt einen kreis vorwärts und rückwärts {if (x==1) GoTurn (300, 90, 255); else GoTurn (-300, -90, 255); Msleep(500);} break; default: //Bei falscheingabe blinkt die Status LED 5x Gelb for(x=1; x<=5; x++) {StatusLED(OFF); Msleep(500); StatusLED(YELLOW); Msleep(500);} break; } return 0; } } int emfang(void) //Steuerung über Seriel { EncoderInit (); StatusLED (YELLOW); BackLED (ON, OFF); Msleep (500); BackLED (OFF,ON); Msleep (500); BackLED (OFF,OFF); //AUS damit, sonst probleme mit Odometrie!!!! SerWrite ("READY", 10); SerPrint ("\n\r"); SerRead (emfangene_daten, 1, 0); //Warte auf Daten, ohne timeout!! switch (emfangene_daten[0]) { case'T': //keine Daten erhalten break; case '1': //Wenn daten =1 fahr vor. Goo( 100, 10); break; case '2': //wenn daten =2 fahr zurück Goo (-100, 10); break; default: //sonst sendefehler 5xgelb for(x=1; x<=5; x++) { StatusLED(OFF); Msleep(500); StatusLED(YELLOW); Msleep(500); } break; } return 0; }![]()






Zitieren


Lesezeichen