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: 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement