visualman
26.02.2007, 18:45
Hallo,
ich versuche über RS232 dem RN-MotorControl Rev 1.3 mit RNV2-DualMotor zu sagen, dass es links bzw. rechts rum drehen soll. Aber leider nimmt er diesen Befehl nicht an. Der Befehl für die Geschwindigkeit funktioniert. Was ich wiederum nicht verstehen kann, weil ich da ja nur den Befehlscode ändere.
Ich habe mir diese drei Funktionen geschrieben. Wie gesagt die Variante für setMotorspeed() funktioniert.
#define waitAfterSend 1
#define waitAfterCheck 1
#define Timeout 10
char waitForRCV(int ms){
char c;
int i=0;
while(!((c=uart_getc()) & UART_NO_DATA)){
delay1ms(1);
if(++i>=ms) return 0;
}; //TODO 500ms Time out verbessern*/
//c=uart_getc();
return c;
}
int checkResults(){
int error=1;
char result[9];
int i=1;
result[0]=waitForRCV(Timeout);//warten bis erste Z.
while(i<=9){
result[i]=uart_getc();
i++;
if(result[i] & UART_NO_DATA) break;
}
if(result[0]=='9' && result[1]=='9'){
LEDS = resetBit(LEDS,LED3);
error=0;
}else{
LEDS = setBit(LEDS,LED3);
}
if(result[0]=='5' || result[0]=='1' || result[0]=='2' || result[0]=='3' || result[0]=='4'|| result[0]=='6' || (result[0]=='2' && result[1]=='0')){
LEDS = setBit(LEDS,LED4);
}else{
LEDS = resetBit(LEDS,LED4);
}
delay1ms(waitAfterCheck);
return error;
}
void setMotorSpeed(int a,int b){
char res[10];
do{
sprintf(res,"%s%c","##",(char) 3);
sprintf(res,"%s%c", res,(char) 2);
sprintf(res,"%s%c", res,(char) a);
sprintf(res,"%s%c", res,(char) b);
uart_puts(res);
delay1ms(waitAfterSend);
}while(checkResults()!=1);//Solange bis 99 zurück
};
void setDirection(int a,int b){
char res[10];
do{
sprintf(res,"%s%c","##",(char) 3);
sprintf(res,"%s%c", res,(char) 5);
sprintf(res,"%s%c", res,(char) a);
sprintf(res,"%s%c", res,(char) b);
uart_puts(res);
delay1ms(waitAfterSend);
}while(checkResults()==1);//Solange bis 99 zurück
};
Seht ihr noch nen Fehler oder hattet ihr schonmal etwas ähnliches?
Viele Dank für eure Antworten :cry:
ich versuche über RS232 dem RN-MotorControl Rev 1.3 mit RNV2-DualMotor zu sagen, dass es links bzw. rechts rum drehen soll. Aber leider nimmt er diesen Befehl nicht an. Der Befehl für die Geschwindigkeit funktioniert. Was ich wiederum nicht verstehen kann, weil ich da ja nur den Befehlscode ändere.
Ich habe mir diese drei Funktionen geschrieben. Wie gesagt die Variante für setMotorspeed() funktioniert.
#define waitAfterSend 1
#define waitAfterCheck 1
#define Timeout 10
char waitForRCV(int ms){
char c;
int i=0;
while(!((c=uart_getc()) & UART_NO_DATA)){
delay1ms(1);
if(++i>=ms) return 0;
}; //TODO 500ms Time out verbessern*/
//c=uart_getc();
return c;
}
int checkResults(){
int error=1;
char result[9];
int i=1;
result[0]=waitForRCV(Timeout);//warten bis erste Z.
while(i<=9){
result[i]=uart_getc();
i++;
if(result[i] & UART_NO_DATA) break;
}
if(result[0]=='9' && result[1]=='9'){
LEDS = resetBit(LEDS,LED3);
error=0;
}else{
LEDS = setBit(LEDS,LED3);
}
if(result[0]=='5' || result[0]=='1' || result[0]=='2' || result[0]=='3' || result[0]=='4'|| result[0]=='6' || (result[0]=='2' && result[1]=='0')){
LEDS = setBit(LEDS,LED4);
}else{
LEDS = resetBit(LEDS,LED4);
}
delay1ms(waitAfterCheck);
return error;
}
void setMotorSpeed(int a,int b){
char res[10];
do{
sprintf(res,"%s%c","##",(char) 3);
sprintf(res,"%s%c", res,(char) 2);
sprintf(res,"%s%c", res,(char) a);
sprintf(res,"%s%c", res,(char) b);
uart_puts(res);
delay1ms(waitAfterSend);
}while(checkResults()!=1);//Solange bis 99 zurück
};
void setDirection(int a,int b){
char res[10];
do{
sprintf(res,"%s%c","##",(char) 3);
sprintf(res,"%s%c", res,(char) 5);
sprintf(res,"%s%c", res,(char) a);
sprintf(res,"%s%c", res,(char) b);
uart_puts(res);
delay1ms(waitAfterSend);
}while(checkResults()==1);//Solange bis 99 zurück
};
Seht ihr noch nen Fehler oder hattet ihr schonmal etwas ähnliches?
Viele Dank für eure Antworten :cry: