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.
Code:
#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;
}
Schon einmal Danke im Vorraus
Lesezeichen