Wegweiser

Titelseite

Gabi

Haus

Bernd

Mobil

Schweden

Imperium

Dies & Das

Programm-Code Timer

#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();
}