Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*******************************************************************************
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement