|
#include <LiquidCrystal.h>
#include <EEPROM.h>
int S1=7; //Stunden "H"
int S2=3; //Minuten "M"
int S3=4; //Start "GO/STOP"
int S4=2; //Zeit aus EEPROM "RAM"
int LS=13; //Speaker
// LCD-Pin 4, 6,11,12,13,14
// (RS, E,D4,D5,D6,D7)
LiquidCrystal LCD( 5, 6, 9,10,11,12);
unsigned long ZIEL;
unsigned long X;
int FERTIG,ALARM_AUS;
int STUNDEN,MINUTEN,SEKUNDEN,ZEIT,REST,MODUS;
int ST,MI,SK,NOCH;
int SEE,MEE;
int DR1,DR2,DR3,DR4;
//++++++++++++++++++++++++++++
void setup()
{
//Serial.begin(9600);
LCD.begin(8,2);
MASKE();
pinMode(S1,INPUT);digitalWrite(S1,HIGH);
pinMode(S2,INPUT);digitalWrite(S2,HIGH);
pinMode(S3,INPUT);digitalWrite(S3,HIGH);
pinMode(S4,INPUT);digitalWrite(S4,HIGH);
pinMode(LS,OUTPUT);
MINUTEN=0;STUNDEN=0;REST=0;MODUS=0;
ST=0;MI=0;SK=0;
tone(LS,440,50);
}
//++++++++++++++++++++++++++++
void loop()
{
if(MODUS==0)
{
DR1=digitalRead(S1);
DR2=digitalRead(S2);
DR3=digitalRead(S3);
DR4=digitalRead(S4);
if(DR1==HIGH&&DR2==HIGH&&DR3==LOW&&DR4==LOW){SETR();} //Eingabe auf Null
if(DR1==LOW&&DR2==HIGH&&DR3==HIGH&&DR4==HIGH){SETH();} //Stunden setzen
if(DR1==HIGH&&DR2==LOW&&DR3==HIGH&&DR4==HIGH){SETM();} //Minuten setzen
if(DR1==HIGH&&DR2==HIGH&&DR3==HIGH&&DR4==LOW){SETE();} //Vorherige Zeit aus EEPROM
if(DR1==HIGH&&DR2==HIGH&&DR3==LOW&&DR4==HIGH){SETG();} //Timer starten/Alarm beenden
}
if(MODUS==1)
{
//delay(100);
for(X=0;X<98;X++)
{delayMicroseconds(10000);}
delayMicroseconds(6400);
SEKUNDEN++;
if(SEKUNDEN>59){REST++;MINUTEN++;SEKUNDEN=0;NOCH--;}
if(MINUTEN>59){STUNDEN++;MINUTEN=0;}
ST=NOCH/60;MI=(NOCH-(ST*60))-1;SK=59-SEKUNDEN;
if(MI<0){MI=59;ST--;}
/*
Serial.print(ST);Serial.print(" ");
Serial.print(MI);Serial.print(" ");
Serial.print(SK);Serial.print(" ");
Serial.println(NOCH);
*/
LCD.setCursor(0,0);LCD.print(" Noch");
if(ST==0){if(MI==1){if(SK==0){tone(LS,440,10);}}}
ANZEIGE_SOLL();
if(REST==ZEIT)
{
STUNDEN=EEPROM.read(100);
MINUTEN=(EEPROM.read(101)+1);
ANZEIGE_IST();
LCD.setCursor(0,1);LCD.print("bernd.se");
ZIEL=millis()+60000;
ALARM();
MODUS=0;
}
}
}
//++++++++++++++++++++++++++++
void MASKE()
{
LCD.clear();
LCD.print("Eingabe");
LCD.setCursor(2,1);LCD.print("h");
LCD.setCursor(6,1);LCD.print("m");
LCD.setCursor(1,1);LCD.print("0");
LCD.setCursor(4,1);LCD.print("00");
}
//++++++++++++++++++++++++++++
void ANZEIGE_IST()
{
LCD.setCursor(2,0);LCD.print(":");
LCD.setCursor(5,0);LCD.print(":");
if(STUNDEN<10)
{LCD.setCursor(0,0);LCD.print(" ");LCD.setCursor(1,0);}
if(STUNDEN>9)
{LCD.setCursor(0,0);}
LCD.print(STUNDEN);
if(STUNDEN==0)
{LCD.setCursor(0,0);LCD.print(" ");}
if(MINUTEN<10)
{LCD.setCursor(3,0);LCD.print("0");LCD.setCursor(4,0);}
if(MINUTEN>9)
{LCD.setCursor(3,0);}
LCD.print(MINUTEN-1);
if(STUNDEN==0)
{if(MINUTEN==0)
{LCD.setCursor(0,0);LCD.print(" ");}
}
if(SEKUNDEN<10)
{LCD.setCursor(6,0);LCD.print("0");LCD.setCursor(7,0);}
if(SEKUNDEN>9)
{LCD.setCursor(6,0);}
LCD.print(SEKUNDEN);
}
//++++++++++++++++++++++++++++
void ANZEIGE_SOLL()
{
LCD.setCursor(2,1);LCD.print(":");
LCD.setCursor(5,1);LCD.print(":");
//+++++++++++++++++++++++++++++++++ Stunden +++++++++++++++++++++
if(ST<10)
{LCD.setCursor(0,1);LCD.print(" ");LCD.setCursor(1,1);}
if(ST>9)
{LCD.setCursor(0,1);}
LCD.print(ST);
if(ST==0)
{LCD.setCursor(0,1);LCD.print(" ");}
//+++++++++++++++++++++++++++++++++ Minuten +++++++++++++++++++++
if(MI<10)
{
if(ST>0)
{LCD.setCursor(3,1);LCD.print("0");LCD.setCursor(4,1);}
if(ST==0)
{LCD.setCursor(3,1);LCD.print(" ");LCD.setCursor(4,1);}
}
if(MI>9)
{LCD.setCursor(3,1);}
LCD.print(MI);
//+++++++++++++++++++++++++++++++++ Sekunden ++++++++++++++++++++
if(ST==0)
{if(MI==0)
{LCD.setCursor(0,1);LCD.print(" ");} //"00:00:" weg
}
if(SK<10)
{
if(MI>0)
{LCD.setCursor(6,1);LCD.print("0");LCD.setCursor(7,1);}
if(MI==0)
if(ST==0)
{LCD.setCursor(6,1);LCD.print(" ");LCD.setCursor(7,1);}
if(ST>0)
{LCD.setCursor(6,1);LCD.print("0");LCD.setCursor(7,1);}
}
if(SK>9)
{LCD.setCursor(6,1);}
LCD.print(SK);
}
//++++++++++++++++++++++++++++ Stunden
void SETH()
{
STUNDEN++;
if(STUNDEN>99){STUNDEN=0;}
ANZEIGE();
delay(500);
}
//++++++++++++++++++++++++++++ Minuten
void SETM()
{
MINUTEN++;
if(MINUTEN>59){MINUTEN=0;}
ANZEIGE();
delay(500);
}
//++++++++++++++++++++++++++++ Reset
void SETR()
{
STUNDEN=0;
MINUTEN=0;
MASKE();
}
//++++++++++++++++++++++++++++ Vorherige Zeit
void SETE()
{
STUNDEN=EEPROM.read(100);
MINUTEN=EEPROM.read(101);
ANZEIGE();
}
//++++++++++++++++++++++++++++ Timer starten
void SETG()
{
ZEIT=((STUNDEN*60)+MINUTEN);
NOCH=ZEIT;
if(ZEIT>0)
{
tone(LS,440,50);
SEE=EEPROM.read(100);
MEE=EEPROM.read(101);
FERTIG=0;
if(SEE!=STUNDEN){FERTIG=1;}
if(MEE!=MINUTEN){FERTIG=1;}
if(FERTIG==1)
{
EEPROM.write(100,STUNDEN);
delay(100);
EEPROM.write(101,MINUTEN);
delay(100);
}
LCD.clear();
SEKUNDEN=0;
MINUTEN=0;
STUNDEN=0;
REST=0;
MODUS=1;
}
}
//++++++++++++++++++++++++++++
void ANZEIGE()
{
LCD.clear();
LCD.print("Eingabe");
LCD.setCursor(6,1);LCD.print("m");
LCD.setCursor(2,1);LCD.print("h");
if(MINUTEN>9)
{LCD.setCursor(4,1);LCD.print(MINUTEN);}
if(MINUTEN<10)
{
LCD.setCursor(4,1);LCD.print(" ");
LCD.setCursor(5,1);LCD.print(MINUTEN);
}
if(MINUTEN==0)
{LCD.setCursor(4,1);LCD.print(" ");}
if(STUNDEN>0)
{
if(STUNDEN<10){LCD.setCursor(1,1);}
if(STUNDEN>9){LCD.setCursor(0,1);}
LCD.print(STUNDEN);
}
if(STUNDEN==0)
{
LCD.setCursor(0,1);LCD.print(" ");
}
}
//++++++++++++++++++++++++++++
void ALARM()
{
ALARM_AUS=0;
while(millis()<ZIEL)
{
for(X=1;X<40000;X++)
{
DR3=digitalRead(S3);
if(DR3==LOW)
{
ALARM_AUS=1;
break;
}
if(X==1){tone(LS,440,50);}
if(X==20000){tone(LS,440,50);}
}
if(ALARM_AUS==1){break;}
}
noTone(LS);
MODUS=0;
MINUTEN=0;
STUNDEN=0;
MASKE();
}
|
|