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:             14. 05. 2013
  7.  
  8.  Funktion:          RC5-Fernsteuerung: Kanal und Tastencode ausgeben.
  9.                     Ausgabe von Vorwärts/Links/Rechts/Halt/Rückwärts.
  10.                     Verwendet werden die Cursortasten der Fernbedienung.
  11. *******************************************************************************/
  12. // Geeignete Programme der Fernbedienung
  13. // 0027 Kanal 0
  14. // 0223 Kanal 2
  15. // 0334 Kanal 6
  16. // 0335 Kanal 5
  17.  
  18. // 0027 Kanal 0
  19. //      42
  20. // 11   43   10
  21. //      46
  22. //
  23. //0223 Kanal 2
  24. //      42
  25. // 11   43   10
  26. //      xx
  27. //
  28. // 0334 Kanal 6
  29. //      46
  30. // 50   53   52
  31. //      44
  32. //
  33. // 0335 Kanal 5
  34. //      46
  35. // 50   53   52
  36. //      44
  37.  
  38. // Compiler-Direktiven
  39. #define RC5DATAMASK 0b0000000000111111 // 6 Bit Datenwert-Maske
  40. #define RC5CHANNELMASK 0b0000000000011111 // 5 Bit Kanalinfo-Maske
  41.  
  42. int i; // Globale Variable
  43.  
  44. void main(void)
  45. {
  46. PRO_BOT128_INIT();    //PRO-BOT128 Setup
  47. LCD_Init();
  48. RC5_Init(26);
  49. AbsDelay(100);       //Wait 0,1 Sec.
  50. LCD_ClearLCD();
  51.  
  52. int rc5_data;
  53.  
  54. Akkuspg(); // Ausgabe der Akkuspannung
  55. LCD_ClearLCD();
  56.  
  57. i=0;
  58.  
  59. // Endlos-Schleife
  60.     do
  61.       {
  62.       rc5_data=GetRC5Data();
  63.       LCD_Locate(1, 1);
  64.       LCD_WriteWord(rc5_data, 2); // Zur Ausgabe ganzzahliger Werte auf LCD
  65.       LCD_WriteText("_");
  66.       LCD_WriteWord(GetRC5Channel(), 2); // Zur Ausgabe ganzzahliger Werte auf LCD
  67.       LCD_WriteText("_");
  68.       if (i<100)
  69.       {
  70.         LCD_WriteWord(i, 2);
  71.         i++;
  72.       }
  73.       else
  74.       {
  75.       i=0;
  76.       }
  77.       // Entscheidung über Fahrtrichtung
  78.       // Erstmal ohne Kanal für Code 0027 und 0223
  79.       LCD_Locate(2, 1);
  80.       switch(rc5_data) //Fallunterscheidung / Untersuchung
  81.             {
  82.             case 42:
  83.                  LCD_WriteText("Nach vorn!");
  84.                 break;
  85.             case 43:
  86.                 LCD_WriteText("Halt!!!!!!");
  87.                 break;
  88.             case 11:
  89.                 LCD_WriteText("LINKS!!!!!");
  90.                 break;
  91.             case 10:
  92.                         LCD_WriteText("RECHTS!!!!");
  93.                 break;
  94.             case 46:
  95.                 LCD_WriteText("UND ZURÜCK");
  96.                 break;
  97.             }
  98.     }
  99.     while(1);
  100. }
  101.  
  102. int GetRC5Data(void)
  103. {
  104.       int RC5Value; // Hier speichern wir die Roh-Empfangsdaten der FB
  105.       int RC5Data; // Hier nur die letzten 6 Bit von RC5Value speichern
  106.       RC5Value=RC5_Read();
  107.       // RC5-Tastencode ermitteln und ausgeben
  108.       RC5Data=RC5Value;
  109.       RC5Data=RC5Data&RC5DATAMASK; // Maskierung der letzten 6 Bit
  110.       return RC5Data;
  111. }
  112.  
  113. int GetRC5Channel(void)
  114.  
  115. {
  116.       // Definieren von Variablen (Reservierung im RAM-Speicher)
  117.       int RC5Channel; // Kanal der Fernbedienung (5 Bit)
  118.       // Der Rohwert wird in RC5Channel kopiert
  119.       RC5Channel=RC5_Read(); // Gleichheitszeichen ist eine Zuweisung
  120.       // Rechtsverschiebung um 6 Stellen / 6 Bits:
  121.       RC5Channel=RC5Channel>>6; // Rechtsverschiebung / >> Verschiebeoperator
  122.       // Wir haben folgenen Wert in RC5Channel: z.B. 110 00001
  123.       // Die linken 3 Bit müssen weg!
  124.       // Dazu haben wir die RC5CHANNELMASK 000 11111
  125.       // Nach einer UND-Verknüpfung bleiben nur die 5 Bit (rechts) übrig
  126.       // Also in unserem Beispiel bleibt übrig: 000 00001
  127.       RC5Channel= RC5Channel&RC5CHANNELMASK; // Maskierung
  128.       return RC5Channel;
  129. }
  130.  
  131. // Wir lagern Programmcode in eine (Unter-)Funktion aus
  132. int Akkuspg(void)
  133. {
  134.     LCD_ClearLCD();
  135.     //LCD auf Zeile 1 Position 1 setzen:
  136.     LCD_Locate(1, 1);
  137.     LCD_WriteText("Akkuspannung:"); //Begruessung
  138.     LCD_Locate(2, 1);
  139.     float Akkuspannung;
  140.     Akkuspannung=AKKU_SPG();
  141.     LCD_WriteFloat(Akkuspannung, 6);
  142.     AbsDelay(2000);       //Wait 2 Sec.
  143.     return 0;
  144. }
');