// PRO_BOT zeigt die Akkuspannung, zeigt die Helligkeit der LDRs
// und folgt einer Lichtquelle (z.B. einer Taschenlampe)
// Niels Nikolaisen, 25.2.2014
//
// Symbolische Konstanten für die Geschwindigkeiten einrichten:
#define SPEED1 150
#define SPEED2 255
// Unterhalb des START_VALUE fährt der PRO-BOT128 erst los
// Kleine Messwerte/Zahlenwerte = große Helligkeit
#define START_VALUE 100
// Die Messwerte sollen nur bei jedem 1000. Durchlauf der WHILE(1)-Schleife
// ausgegeben werden!
// Zähler für die Ausgabe der Messwerte auf Display
#define ZAEHLER 1000
void main(void)
{
PRO_BOT128_INIT();
DELAY_MS(100);
LCD_Init();
// Variablen für Messwerterfassung
int VarLightLeft;
int VarLightRight;
LCD_ClearLCD();
Akkuspg();
DELAY_MS(2000);
LCD_ClearLCD();
// Zähler vorbereiten
int i;
i=0;
// Ab hier Endlosschleife
while(1)
{
// Messwerte einlesen
VarLightLeft = LDR_LEFT();
VarLightRight = LDR_RIGHT();
// Ausgabe der Messwerte auf Display
if (i<ZAEHLER)
{
i++;
}
else
{
i=0;
LCD_Locate(1, 1);
LCD_WriteText("L: ");
LCD_WriteWord(VarLightLeft, 4);
LCD_WriteText("R: ");
LCD_WriteWord(VarLightRight, 4);
}
// Wenn links ODER rechts der Helligkeitsmesswert kleiner als START_VALUE ist,
// dann soll der PRO-BOT erst losfahren (kleiner Messwert = große Helligkeit):
// if ((VarLightLeft||VarLightRight)<START_VALUE) -> funktioniert nicht
// So muss es gemacht werden:
if ((VarLightLeft<START_VALUE)||(VarLightRight<START_VALUE))
{
// Messwerte vergleichen:
if(VarLightLeft < VarLightRight)
{
// Rechts muss schneller drehen
FAHR(SPEED1, SPEED2);
}
else
{
// Linkss muss schneller drehen
FAHR(SPEED2, SPEED1);
}
// DELAY_MS(500);
}
else
{
DRIVE_OFF();
}
}
}
//Eine eigene (Unter-)Funktion für die Motorsteuerung
void FAHR(byte left, byte right)
{
DRIVE_ON();//Einschalten der Motore
MOTOR_DIR(1,1); //Richtung "Vorwärts"
MOTOR_POWER(left, right);
}
//Eine eigene (Unter-)Funktion für die Spannungsanzeige
void Akkuspg(void)
{
LCD_ClearLCD();
LCD_Locate(1,1);
LCD_WriteText("Akkuspannung");
float Akkuspannung; //32 Bit Datentyp
//Wir weisen der Variablen die Akkuspannung zu
Akkuspannung=AKKU_SPG();
LCD_Locate(2,1);
LCD_WriteFloat(Akkuspannung, 3);
}