/*
Projektname: LCD Display mit Arduino Ansteuern
Author: T.Griese
Software: Arduino IDE/ Wokwi.com
Hardware: Arduino Uno Rev3/ Wokwi.com
Beschreibung: Winkel der Flugzeugtür wird im LCD Display dargestellt.
Datum: 09:11.2022
Status: in Arbeit
*/
#include <Wire.h> // including the Wire libary
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // including the LiquidCrystal_I2C libary
int ledRed1 = 12;
int ledRed2= 11;
int ledGreen = 10;
int GND = 9;
int taster = 8;
unsigned long timerOut = 8000;
unsigned long timer1;
bool statusTaster = false;
int winkel;
int oldwinkel = 0;
byte grad[] = {
B01100,
B10010,
B10010,
B01100,
B00000,
B00000,
B00000,
B00000
};
void setup() {
pinMode(ledRed1, OUTPUT);
pinMode(ledRed2, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(GND, OUTPUT);
pinMode(taster, INPUT_PULLUP);
digitalWrite(GND, LOW);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.createChar(0, grad);
}
void loop()
{
winkel = map(analogRead(A0),0,1023,0,90); // read in the poti value and maps(convert) it in an angle
if (winkel != oldwinkel)
{
lcd.setCursor(0, 0); //set the Cursor to the First row and first sign
lcd.print("Die T");
lcd.print("\xF5"); // das ist ein ü
lcd.print("r ist ");
lcd.setCursor(12, 0);
lcd.print(" ");
lcd.setCursor(13, 0);
lcd.print(winkel);
lcd.setCursor(15, 0);
lcd.write(0);
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("ge");
lcd.print("\xEF"); // das ist ein ö
lcd.print("ffnet");
}
if (winkel >=45) // light up the LEDs acording to the angle
{
digitalWrite(ledRed1, HIGH);
digitalWrite(ledRed2, HIGH);
digitalWrite(ledGreen, LOW);
}
else if (winkel<=44 && winkel>=1)
{
digitalWrite(ledRed2, HIGH);
digitalWrite(ledRed1, LOW);
digitalWrite(ledGreen, LOW);
}
else if (winkel<=0)
{
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed2, LOW);
digitalWrite(ledRed1, LOW);
}
else // Error Message if the angle is not possible
{
Serial.println("ERROR Angle not possible");
}
if (digitalRead(taster)==LOW) // check for button press and setting the timer funktion
{
timer1 = millis();
statusTaster = true;
Serial.println("Türschließung starten");
}
if(statusTaster && millis() >= timer1 + timerOut) // check if time runs out
{
statusTaster = false;
timer1 = 0;
if (winkel > 0) // if door is still open give an warning
{
Serial.println("WARNING! DOOR STILL OPEN");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WARNING!");
lcd.setCursor(0, 1);
lcd.print("DOOR STILL OPEN");
}
else if(winkel == 0)
{
Serial.println("DOOR IS CLOSED");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DOOR IS CLOSED");
}
}
oldwinkel=winkel;
}