document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*******************************************************************************
  2.  Projektname:       RC5.cprj
  3.  Benötigte Libs´s:  IntFunc_lib.cc
  4.  Routinen:          lcd.cc, PRO-BOT128C_Lib_V2.cc
  5.  Autor:             Niels
  6.  Datum:             30. 04. 2013
  7.  
  8.  Funktion:          RC5-Fernsteuerung des PRO-BOT
  9. *******************************************************************************/
  10.  
  11. // Der RC-5-Code ist folgendermaßen aufgebaut:
  12. //
  13. // |1|C6|T|A4|A3|A2|A1|A0|C5|C4|C3|C2|C1|C0|
  14. //
  15. // Am Anfang kommt IMMER eine "1"
  16. // A0 bis A4 sind die Geräteadresse (TV1, TV2, usw.)
  17. // C0 bis C6 ist der eigentlich RC-5-Befehl
  18. // T ist das Toggle-Bit, das bei jedem Tastendruck geändert wird.
  19. // Damit kann das mehrfache Drücken einer Taste ermittelt werden.
  20.  
  21. // Compiler-Direktiven
  22. #define RC5DATAMASK 63 // 2. Teilaufgabe - die 6 niederwertigen Bits filtern
  23. #define RC5CHANNELMASK 31 // 3. Teilaufgabe - die 5 niederwertigen Bits filtern
  24.  
  25. void main(void)
  26. {
  27.  
  28. PRO_BOT128_INIT();    //PRO-BOT128 Setup
  29. RC5_Init(26);
  30. LCD_Init();
  31. AbsDelay(100);       //Wait 0,1 Sec.
  32. LCD_ClearLCD();
  33.  
  34. Akkuspg(); // Ausgabe der Akkuspannung
  35. LCD_ClearLCD();
  36.  
  37. int RC5Value; // Zum Abspeichern des eingelesenen RC5-Rohwertes
  38.  
  39. // erst für 2. Teilaufgabe benötigt:
  40. int RC5Data;
  41.  
  42. // erst für 3. Teilaufgabe benötigt:
  43. int RC5Channel;
  44.  
  45. // Endlos-Schleife
  46.     while(true)
  47.     {
  48.         RC5Value=RC5_Read(); // Einlesen des RC5-Rohwertes
  49.  
  50.         // 1. Teilaufgabe: RC5-Rohwert einlesen und ausgeben
  51.         //LCD auf Zeile 1 Position 1 setzen:
  52.         LCD_Locate(1, 1);
  53.         LCD_WriteText("RC5 Value:      ");
  54.         LCD_Locate(2, 1);
  55.         LCD_WriteWord(RC5Value, 5);
  56.         AbsDelay(100);       //Wait 2 Sec.
  57.         // Anmerkung: Bei mehrfachem Drücken derselben Taste an der Fern-
  58.         // bedienung werden nacheinander 2 unterschiedliche Werte angezeigt.
  59.         // WARUM? Weil es das Toggle-Bit gibt, das ein Festhalten oder mehrfaches
  60.         // Drücken derselben Taste signalisiert.
  61.  
  62.          /*
  63.  
  64.         // 2. Teilaufgabe: RC5-Rohwert maskieren
  65.         // RC5Data = dier letzten 6 Bit von RC5Value
  66.         RC5Data=RC5Value&RC5DATAMASK;
  67.         //LCD auf Zeile 1 Position 1 setzen:
  68.         LCD_Locate(1, 1);
  69.         LCD_WriteText("RC5 Data:       ");
  70.         LCD_Locate(2, 1);
  71.         LCD_WriteWord(RC5Data, 3);
  72.         AbsDelay(100);       //Wait
  73.  
  74.         // 3. Teilaufgabe: RC5-Rohwert maskieren
  75.         // RC5Channel = Bit 6 bis 10 von RC5Value
  76.         // FB auf Programm 0334 stellen = Kanal 6
  77.         RC5Channel=RC5Value>>6;
  78.         RC5Channel=RC5Channel&RC5CHANNELMASK;
  79.         //LCD auf Zeile 1 Position 1 setzen:
  80.         LCD_Locate(1, 1);
  81.         LCD_WriteText("RC5 Channel:    ");
  82.         LCD_Locate(2, 1);
  83.         LCD_WriteWord(RC5Channel, 6);
  84.         AbsDelay(100);       //Wait
  85.  
  86.         */
  87.  
  88.         // 4. Teilaufgabe: RC5Data und RC5Channel
  89.         // gleichzeitig auf dem Display ausgeben!
  90.  
  91.     }
  92. }
  93.  
  94. // Wir lagern Programmcode in eine (Unter-)Funktion aus
  95. int Akkuspg(void)
  96. {
  97.     LCD_ClearLCD();
  98.     //LCD auf Zeile 1 Position 1 setzen:
  99.     LCD_Locate(1, 1);
  100.     LCD_WriteText("Akkuspannung:"); //Begruessung
  101.     LCD_Locate(2, 1);
  102.     float Akkuspannung;
  103.     Akkuspannung=AKKU_SPG();
  104.     LCD_WriteFloat(Akkuspannung, 6);
  105.     AbsDelay(2000);       //Wait 2 Sec.
  106.     return 0;
  107. }
');