/*******************************************************************************
Projektname: RC5.cprj
Benötigte Libs´s: IntFunc_lib.cc
Routinen: lcd.cc, PRO-BOT128C_Lib_V2.cc
Autor: Niels
Datum: 14. 05. 2013
Funktion: RC5-Fernsteuerung: Kanal und Tastencode ausgeben.
Ausgabe von Vorwärts/Links/Rechts/Halt/Rückwärts.
Verwendet werden die Cursortasten der Fernbedienung.
*******************************************************************************/
// Geeignete Programme der Fernbedienung
// 0027 Kanal 0
// 0223 Kanal 2
// 0334 Kanal 6
// 0335 Kanal 5
// 0027 Kanal 0
// 42
// 11 43 10
// 46
//
//0223 Kanal 2
// 42
// 11 43 10
// xx
//
// 0334 Kanal 6
// 46
// 50 53 52
// 44
//
// 0335 Kanal 5
// 46
// 50 53 52
// 44
// Compiler-Direktiven
#define RC5DATAMASK 0b0000000000111111 // 6 Bit Datenwert-Maske
#define RC5CHANNELMASK 0b0000000000011111 // 5 Bit Kanalinfo-Maske
int i; // Globale Variable
void main(void)
{
PRO_BOT128_INIT(); //PRO-BOT128 Setup
LCD_Init();
RC5_Init(26);
AbsDelay(100); //Wait 0,1 Sec.
LCD_ClearLCD();
int rc5_data;
Akkuspg(); // Ausgabe der Akkuspannung
LCD_ClearLCD();
i=0;
// Endlos-Schleife
do
{
rc5_data=GetRC5Data();
LCD_Locate(1, 1);
LCD_WriteWord(rc5_data, 2); // Zur Ausgabe ganzzahliger Werte auf LCD
LCD_WriteText("_");
LCD_WriteWord(GetRC5Channel(), 2); // Zur Ausgabe ganzzahliger Werte auf LCD
LCD_WriteText("_");
if (i<100)
{
LCD_WriteWord(i, 2);
i++;
}
else
{
i=0;
}
// Entscheidung über Fahrtrichtung
// Erstmal ohne Kanal für Code 0027 und 0223
LCD_Locate(2, 1);
switch(rc5_data) //Fallunterscheidung / Untersuchung
{
case 42:
LCD_WriteText("Nach vorn!");
break;
case 43:
LCD_WriteText("Halt!!!!!!");
break;
case 11:
LCD_WriteText("LINKS!!!!!");
break;
case 10:
LCD_WriteText("RECHTS!!!!");
break;
case 46:
LCD_WriteText("UND ZURÜCK");
break;
}
}
while(1);
}
int GetRC5Data(void)
{
int RC5Value; // Hier speichern wir die Roh-Empfangsdaten der FB
int RC5Data; // Hier nur die letzten 6 Bit von RC5Value speichern
RC5Value=RC5_Read();
// RC5-Tastencode ermitteln und ausgeben
RC5Data=RC5Value;
RC5Data=RC5Data&RC5DATAMASK; // Maskierung der letzten 6 Bit
return RC5Data;
}
int GetRC5Channel(void)
{
// Definieren von Variablen (Reservierung im RAM-Speicher)
int RC5Channel; // Kanal der Fernbedienung (5 Bit)
// Der Rohwert wird in RC5Channel kopiert
RC5Channel=RC5_Read(); // Gleichheitszeichen ist eine Zuweisung
// Rechtsverschiebung um 6 Stellen / 6 Bits:
RC5Channel=RC5Channel>>6; // Rechtsverschiebung / >> Verschiebeoperator
// Wir haben folgenen Wert in RC5Channel: z.B. 110 00001
// Die linken 3 Bit müssen weg!
// Dazu haben wir die RC5CHANNELMASK 000 11111
// Nach einer UND-Verknüpfung bleiben nur die 5 Bit (rechts) übrig
// Also in unserem Beispiel bleibt übrig: 000 00001
RC5Channel= RC5Channel&RC5CHANNELMASK; // Maskierung
return RC5Channel;
}
// Wir lagern Programmcode in eine (Unter-)Funktion aus
int Akkuspg(void)
{
LCD_ClearLCD();
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("Akkuspannung:"); //Begruessung
LCD_Locate(2, 1);
float Akkuspannung;
Akkuspannung=AKKU_SPG();
LCD_WriteFloat(Akkuspannung, 6);
AbsDelay(2000); //Wait 2 Sec.
return 0;
}