/*******************************************************************************
Projektname: RC5.cprj
Benötigte Libs´s: IntFunc_lib.cc
Routinen: lcd.cc, PRO-BOT128C_Lib_V2.cc
Autor: Niels
Datum: 30. 04. 2013
Funktion: RC5-Fernsteuerung des PRO-BOT
*******************************************************************************/
// Der RC-5-Code ist folgendermaßen aufgebaut:
//
// |1|C6|T|A4|A3|A2|A1|A0|C5|C4|C3|C2|C1|C0|
//
// Am Anfang kommt IMMER eine "1"
// A0 bis A4 sind die Geräteadresse (TV1, TV2, usw.)
// C0 bis C6 ist der eigentlich RC-5-Befehl
// T ist das Toggle-Bit, das bei jedem Tastendruck geändert wird.
// Damit kann das mehrfache Drücken einer Taste ermittelt werden.
// Compiler-Direktiven
#define RC5DATAMASK 63 // 2. Teilaufgabe - die 6 niederwertigen Bits filtern
#define RC5CHANNELMASK 31 // 3. Teilaufgabe - die 5 niederwertigen Bits filtern
void main(void)
{
PRO_BOT128_INIT(); //PRO-BOT128 Setup
RC5_Init(26);
LCD_Init();
AbsDelay(100); //Wait 0,1 Sec.
LCD_ClearLCD();
Akkuspg(); // Ausgabe der Akkuspannung
LCD_ClearLCD();
int RC5Value; // Zum Abspeichern des eingelesenen RC5-Rohwertes
// erst für 2. Teilaufgabe benötigt:
int RC5Data;
// erst für 3. Teilaufgabe benötigt:
int RC5Channel;
// Endlos-Schleife
while(true)
{
RC5Value=RC5_Read(); // Einlesen des RC5-Rohwertes
// 1. Teilaufgabe: RC5-Rohwert einlesen und ausgeben
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("RC5 Value: ");
LCD_Locate(2, 1);
LCD_WriteWord(RC5Value, 5);
AbsDelay(100); //Wait 2 Sec.
// Anmerkung: Bei mehrfachem Drücken derselben Taste an der Fern-
// bedienung werden nacheinander 2 unterschiedliche Werte angezeigt.
// WARUM? Weil es das Toggle-Bit gibt, das ein Festhalten oder mehrfaches
// Drücken derselben Taste signalisiert.
/*
// 2. Teilaufgabe: RC5-Rohwert maskieren
// RC5Data = dier letzten 6 Bit von RC5Value
RC5Data=RC5Value&RC5DATAMASK;
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("RC5 Data: ");
LCD_Locate(2, 1);
LCD_WriteWord(RC5Data, 3);
AbsDelay(100); //Wait
// 3. Teilaufgabe: RC5-Rohwert maskieren
// RC5Channel = Bit 6 bis 10 von RC5Value
// FB auf Programm 0334 stellen = Kanal 6
RC5Channel=RC5Value>>6;
RC5Channel=RC5Channel&RC5CHANNELMASK;
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("RC5 Channel: ");
LCD_Locate(2, 1);
LCD_WriteWord(RC5Channel, 6);
AbsDelay(100); //Wait
*/
// 4. Teilaufgabe: RC5Data und RC5Channel
// gleichzeitig auf dem Display ausgeben!
}
}
// 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;
}