/*******************************************************************************
Projektname: RC5.cprj
Benötigte Libs´s: IntFunc_lib.cc
Routinen: lcd.cc, PRO-BOT128C_Lib_V2.cc
Autor: Niels
Datum: 6. 6. 2013
Funktion: RC5-Fernsteuerung zum Steuern des PRO-BOT verwenden
Nur für RCX161-Fernsteuerung!
Nur Kanal 0 ist möglich über "TV"!
Mehrere Fernsteuerungen und PRO-BOTs sind nicht gleichzeitig
verwendbar!
*******************************************************************************/
// Compiler-Direktiven
#define RC5DATAMASK 0b0000000000111111 // Konstante definieren (10 Nullen + 6 Einsen)
#define SPEED1 225
#define SPEED2 250
void main(void)
{
PRO_BOT128_INIT(); //PRO-BOT128 Setup
LCD_Init();
RC5_Init(26); // 26 ist die Hardwareadresse
AbsDelay(100); //Wait 0,1 Sec.
LCD_ClearLCD();
Akkuspg(); // Ausgabe der Akkuspannung
LCD_ClearLCD();
// Wie funktioniert RC5?
// Theorie an der Tafel (-;
// Fernbedienung RCX161:
// TV = Kanal 0
// 32
// 17 41 16
// 33
//
int RC5Value; // Rohwert von der Fernsteuerung
int RC5Data; // Variable für den Tastencode (die letzten 6 Bit von RC5Value)
while(1)
{
RC5Value=RC5_Read(); // Übergibt dem Programm die RC5-Rohdaten (14 Bit)
// Wir wollen den Tastencode ermitteln (die ganz rechten 6 Bit)
// Den "Rest" (links) müssen wir maskieren
RC5Data=RC5Value&RC5DATAMASK;
// Ausgabe auf Display
LCD_Locate(1, 1);
LCD_WriteText("Tastencode: ");
LCD_WriteWord(RC5Data, 2); //
LCD_Locate(2, 1);
switch(RC5Data)
{
case 32: LCD_WriteText("Vorwaerts!!");
MOTOR_DIR(1,1); //MOTOR DIRECTION
DRIVE_ON(); //Motorspannung an
MOTOR_POWER(SPEED2, SPEED1);
break;
case 17: LCD_WriteText("Links!!!!!!");
MOTOR_DIR(1,1); //MOTOR DIRECTION
DRIVE_ON(); //Motorspannung an
MOTOR_POWER(0, SPEED1);
break;
case 16: LCD_WriteText("Rechts!!!!!");
MOTOR_DIR(1,1); //MOTOR DIRECTION
DRIVE_ON(); //Motorspannung an
MOTOR_POWER(SPEED2, 0);
break;
case 41: LCD_WriteText("Stopp!!!!!!");
DRIVE_OFF(); //Motorspannung aus
break;
case 33: LCD_WriteText("Rueckwaerts");
break;
}
}
}