Hi,

also so lobe ich es mir schon mehr...


der compiler sagt, dass die variable rc5data nicht deklariert ist und das stimmt, ist aber auch anders zu verstehen...

versuche doch mal den code so zu kompilieren:

Code:
// RP6 steuert ein Servo an der SL1-LED mit Sleep() 

#include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen 

#define RC_PROMO8 

#ifdef RC_PROMO8 

#define RC5_KEY_SERVO_RIGHT 46 
#define RC5_KEY_SERVO_LEFT 60 

#endif 

void receiveRC5Data(RC5data_t rc5data) 
{ 
writeString_P("Toggle Bit:"); 
writeChar(rc5data.toggle_bit + '0'); 
writeString_P(" | Device Address:"); 
writeInteger(rc5data.device, DEC); 
writeString_P(" | Key Code:"); 
writeInteger(rc5data.key_code, DEC); 
writeChar('\n');
servoTaskRight(); 
servoTaskLeft();} 

void servoTaskRight(RC5data_t rc5data) 
{ if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
{setLEDs(1); 
sleep(10); 
setLEDs(0); 
sleep(200-10);} 
} 

void servoTaskLeft(RC5data_t rc5data) 
{ if (rc5data.key_code == RC5_KEY_SERVO_LEFT) 
{setLEDs(1); 
sleep(20); 
setLEDs(0); 
sleep(200-20);} 
} 


int main(void) 
{ 
initRobotBase(); 
IRCOMM_setRC5DataReadyHandler(receiveRC5Data); 
powerON(); 
setLEDs(0); 

while(true) 
{ 
task_RP6System(); 
} 
return 0; 
}
denn wenn du dir das nochmal genau überlegst:

der Eventhandler ruft die Funktion receiveRC5Data auf, dann gibt das Programm zwar im Terminal alles zum RC5-Code aus, der empfangen wurde, aber die Servos werden ja nicht gestellt. wenn du jetzt aber deine Funktionen in der Hauptschleife aufrufst stehen die Variablen, die du auslesen willst nichtmehr zur Verfügung, da es lokale Variablen sind.

du musst also aus der Funktion raus deine Servos bewegen bzw. so wie ich oben dann über Parameter die Variablen in die Servofunktionen bringen

dein Compiler gibt dir doch

'rc5data' undeclared (first use in this function)
für jede Servofunktion aus, das heisst, er weiss nicht, wo er das rc5data bitte hernehmen soll, also geben wir es ihm einfach über Parameter, soweit verstanden?

Wenn dich die Ausgaben im Terminal stören kannst du die Funktion receiveRC5Data auch bis auf die Aufrufe der Servofunktionen mit Parametern leeren, bzw. einfach die Inhalte der beiden Servofunktionen in die receiveRC5Data kopieren, z.B. so:

Code:
void receiveRC5Data(RC5data_t rc5data) 
{  if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) 
{setLEDs(1); 
sleep(10); 
setLEDs(0); 
sleep(200-10);}

if (rc5data.key_code == RC5_KEY_SERVO_LEFT) 
{setLEDs(1); 
sleep(20); 
setLEDs(0); 
sleep(200-20);} 
}
verstanden?

so kannst du die 3 Funktionen in eine zusammenfassen, und natürlich auch in der gleichen Funktion noch Ausgaben im Terminal machen, wie das mit Device Adresse oder Togglebit etc...



MfG Pr0gm4n


EDIT: Ich war wohl zu lange am schreiben, um es ja richtig gut zu erklären, da war DIRK mit der gleichen Lösung wohl schneller