/*******************************************************************************
Projektname: lcdtest
Benötigte Libs´s: IntFunc_lib.cc
Routinen: lcd.cc, PRO-BOT128C_Lib_V2.cc
Autor: Niels
Datum: 22. 05. 2013
Funktion: Anzeigen der Akkuspannung
Test der LEDs
*******************************************************************************/
// Compiler-Direktiven
// Hier wollen wir "Symbolische Konstanten" definieren (GROSSBUCHSTABEN)
#define ZAHL1 10
#define ZAHL2 5
#define ZAHL3 -5
#define PI 3.14159265359
int Zaehler; // Globale Variable
void main(void)
{
PRO_BOT128_INIT(); // Initialisierung des PRO-BOT128
LCD_Init(); // LCD.cc nicht vergessen!
// Akkuspg(); // Ausgabe der Akkuspannung
/* Mehrzeilige Kommentare
müssen nicht aqm Beginn jeder Zeile gekennzeichnet werden. */
// Datentypen und Arithmetik
// 1. Integer-Variable (32 Bit mit Vorzeichen) deklarieren
// Lokale Variable, da nur in Main() zugreifbar!
int Ausgabe; // -32768 bis +32767
Ausgabe = 120 + 32; // Konstante Ausdrücke addieren und in Variable speichern
// LCD-Ausgabe:
LCD_ClearLCD();
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("120 + 32 = ");
LCD_WriteWord(Ausgabe, 4); // Gleich dahinter ausgeben
AbsDelay(2000); //Wait 2 Sec.
// 2. Float-Variable deklarieren
// Für "Zahlen mit Komma"
float Akkuspannung;
Akkuspannung=PI; // 13 Stellen
// Akkuspannung=AKKU_SPG();
LCD_ClearLCD();
LCD_Locate(1, 1);
LCD_WriteText("Akkuspannung:");
LCD_Locate(2, 1);
LCD_WriteFloat(Akkuspannung, 13); // Wird auf 7 Stellen gerundet???
AbsDelay(2000); //Wait 2 Sec.
// 3. Byte-Variable deklarieren
// 0 bis 255 (8 Bit) - braucht weniger Speicher als Integer
byte Zaehler; // Globale Variable "Zaehler" wird verdeckt!
Zaehler = 254;
LCD_ClearLCD();
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("8-Bit-Wert: ");
LCD_WriteWord(Zaehler, 3); // Gleich dahinter ausgeben (max. 3-stellig)
AbsDelay(2000); //Wait 2 Sec.
// 4. Rechnen
int Ergebnis;
// float Ergebnis;
Ergebnis = 2 + 3 - 4; // Konstante Ausdrücke verwenden
Ergebnis = ZAHL1; // 10
Ergebnis = Ergebnis + 3;
Ergebnis++; // Um EINS erhöhen
Ergebnis--; // UM EINS verringern
Ergebnis = Ergebnis<<1; // Multiplikation mit 2
Ergebnis = Ergebnis>>2; // Division durch 4
// Ergebnis = ZAHL1 + ZAHL2 + ZAHL3;
// Ergebnis = sqrt(16);
// Ergebnis = sqrt(16.7); // Ergebnis muss FLOAT sein!
LCD_ClearLCD();
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("Ergebnis = ");
LCD_WriteWord(Ergebnis, 3); // Gleich dahinter ausgeben (max. 3-stellig)
LCD_Locate(2, 1);
LCD_WriteText("Ergebnis = ");
LCD_WriteFloat(Ergebnis, 7);
AbsDelay(2000); //Wait 2 Sec.
// 5. Mischen von Datentypen
int a;
a = 2;
a + 5; // vereinfachend statt a = a + 5
// Das Ergebnis wird nun FLOAT und kann nicht in a gespeichert werden!
float b;
b = a + 5.5;
LCD_ClearLCD();
//LCD auf Zeile 1 Position 1 setzen:
LCD_Locate(1, 1);
LCD_WriteText("INT=");
LCD_WriteFloat(a, 7);
LCD_Locate(2, 1);
LCD_WriteText("FLOAT=");
LCD_WriteFloat(b, 7);
AbsDelay(2000); //Wait 2 Sec.
// Testen der LEDs
// 5x blinken = for-Konstrukt (Kontrollstruktur)
int i;
for(i=0; i<5; i++)
{
BLL_ON(); // Backward
BLR_ON();
FLL_ON(); // Forward
FLR_ON();
DELAY_MS(500);
BLL_OFF(); // Backward
BLR_OFF();
FLL_OFF(); // Forward
FLR_OFF();
DELAY_MS(500);
}
// Endlos-Schleife
while(true)
{
// Ab hier endlos wiederholen
}
}
// 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:");
LCD_Locate(2, 1);
float Akkuspannung;
Akkuspannung=AKKU_SPG();
LCD_WriteFloat(Akkuspannung, 6);
AbsDelay(2000); //Wait 2 Sec.
return 0;
}