document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. // PRO_BOT zeigt die Akkuspannung, zeigt die Helligkeit der LDRs
  2. // und folgt einer Lichtquelle (z.B. einer Taschenlampe)
  3. // Niels Nikolaisen, 25.2.2014
  4. //
  5. // Symbolische Konstanten für die Geschwindigkeiten einrichten:
  6. #define SPEED1 150
  7. #define SPEED2 255
  8. // Unterhalb des  START_VALUE fährt der PRO-BOT128 erst los
  9. // Kleine Messwerte/Zahlenwerte = große Helligkeit
  10. #define START_VALUE 100
  11. // Die Messwerte sollen nur bei jedem 1000. Durchlauf der WHILE(1)-Schleife
  12. // ausgegeben werden!
  13. // Zähler für die Ausgabe der Messwerte auf Display
  14. #define ZAEHLER 1000
  15.  
  16. void main(void)
  17. {
  18.       PRO_BOT128_INIT();
  19.       DELAY_MS(100);
  20.       LCD_Init();
  21.  
  22.       // Variablen für Messwerterfassung
  23.       int VarLightLeft;
  24.       int VarLightRight;
  25.  
  26.       LCD_ClearLCD();
  27.       Akkuspg();
  28.       DELAY_MS(2000);
  29.       LCD_ClearLCD();
  30.  
  31.       // Zähler vorbereiten
  32.       int i;
  33.       i=0;
  34.  
  35.       // Ab hier Endlosschleife
  36.       while(1)
  37.       {
  38.         // Messwerte einlesen
  39.         VarLightLeft = LDR_LEFT();
  40.         VarLightRight = LDR_RIGHT();
  41.  
  42.         // Ausgabe der Messwerte auf Display
  43.         if (i<ZAEHLER)
  44.             {
  45.               i++;
  46.             }
  47.             else
  48.             {
  49.               i=0;
  50.               LCD_Locate(1, 1);
  51.               LCD_WriteText("L: ");
  52.               LCD_WriteWord(VarLightLeft, 4);
  53.               LCD_WriteText("R: ");
  54.               LCD_WriteWord(VarLightRight, 4);
  55.             }
  56.     // Wenn links ODER rechts der Helligkeitsmesswert kleiner als START_VALUE ist,
  57.     // dann soll der PRO-BOT erst losfahren (kleiner Messwert = große Helligkeit):
  58.     // if ((VarLightLeft||VarLightRight)<START_VALUE) -> funktioniert nicht
  59.     // So muss es gemacht werden:
  60.         if ((VarLightLeft<START_VALUE)||(VarLightRight<START_VALUE))
  61.           {
  62.                 // Messwerte vergleichen:
  63.                 if(VarLightLeft < VarLightRight)
  64.                     {
  65.                          // Rechts muss schneller drehen
  66.                          FAHR(SPEED1, SPEED2);
  67.                     }
  68.                 else
  69.                     {
  70.                          // Linkss muss schneller drehen
  71.                          FAHR(SPEED2, SPEED1);
  72.                     }
  73.                  // DELAY_MS(500);
  74.           }
  75.         else
  76.           {
  77.             DRIVE_OFF();
  78.           }
  79.         }
  80. }
  81.  
  82. //Eine eigene (Unter-)Funktion für die Motorsteuerung
  83. void FAHR(byte left, byte right)
  84.     {
  85.     DRIVE_ON();//Einschalten der Motore
  86.     MOTOR_DIR(1,1); //Richtung "Vorwärts"
  87.     MOTOR_POWER(left, right);
  88.     }
  89.  
  90. //Eine eigene (Unter-)Funktion für die Spannungsanzeige
  91. void Akkuspg(void)
  92. {
  93. LCD_ClearLCD();
  94.       LCD_Locate(1,1);
  95.       LCD_WriteText("Akkuspannung");
  96.       float Akkuspannung; //32 Bit Datentyp
  97.       //Wir weisen der Variablen die Akkuspannung  zu
  98.       Akkuspannung=AKKU_SPG();
  99.       LCD_Locate(2,1);
  100.       LCD_WriteFloat(Akkuspannung, 3);
  101. }
');