#include "C:\Users\andre\Desktop\Arbeitsordner\LCD_Lichtwaechter.h"

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);


boolean_T Spiel_gestartet = 0;
double Fortschritt = 0;
boolean_T Messung_1 = 0;
boolean_T Messung_1_beendet = 0;
boolean_T Hilfe_Messung_1 = 0;
boolean_T Messung_2_vorbereitet = 0;
boolean_T Messung_2 = 0;
boolean_T Messung_2_beendet = 0;
boolean_T Hilfe_Messung_2 = 0;
boolean_T Messung_3_vorbereitet = 0;
boolean_T Messung_3 = 0;
boolean_T Messung_3_beendet = 0;
boolean_T Hilfe_Messung_3 = 0;
boolean_T Messung_4_vorbereitet = 0;
boolean_T Messung_4 = 0;
boolean_T Messung_4_beendet = 0;
boolean_T Hilfe_Messung_4 = 0;
boolean_T Spiel_beendet = 0;

void setupFunctionLCD_Lichtwaechter()
{
    lcd.init();
    lcd.backlight();
}

// Abfrage_1 logical [1,1]
// Abfrage_1_abgeschlossen logical [1,1]
// Abfrage_2 logical [1,1]
// Abfrage_2_abgeschlossen logical [1,1]
// Abfrage_3 logical [1,1]
// Abfrage_3_abgeschlossen logical [1,1]
// Abfrage_4 logical [1,1]
// Abfrage_4_abgeschlossen logical [1,1]
// Starte_Spiel logical [1,1]
// Starte_Messung logical [1,1]
// Hilfe logical [1,1]
// Sensor_Wert uint16 [1,1]
// Zeit_Messung_1 double [1,1]
// Zeit_Messung_1_beendet double [1,1]
// Zeit_Messung_2 double [1,1]
// Zeit_Messung_2_beendet double [1,1]
// Zeit_Messung_3 double [1,1]
// Zeit_Messung_3_beendet double [1,1]
// Zeit_Messung_4 double [1,1]
// Zeit_Messung_4_beendet double [1,1]

void stepFunctionLCD_Lichtwaechter(boolean_T * Abfrage_1,int size_vector_1,boolean_T * Abfrage_1_abgeschlossen,int size_vector_2,boolean_T * Abfrage_2,int size_vector_3,boolean_T * Abfrage_2_abgeschlossen,int size_vector_4,boolean_T * Abfrage_3,int size_vector_5,boolean_T * Abfrage_3_abgeschlossen,int size_vector_6,boolean_T * Abfrage_4,int size_vector_7,boolean_T * Abfrage_4_abgeschlossen,int size_vector_8,boolean_T Starte_Spiel,int size_vector_a,boolean_T Starte_Messung,int size_vector_b,boolean_T Hilfe,int size_vector_c,uint16_T Sensor_Wert,int size_vector_d,double Zeit_Messung_1,int size_vector_e,double Zeit_Messung_1_beendet,int size_vector_f,double Zeit_Messung_2,int size_vector_g,double Zeit_Messung_2_beendet,int size_vector_h,double Zeit_Messung_3,int size_vector_i,double Zeit_Messung_3_beendet,int size_vector_j,double Zeit_Messung_4,int size_vector_k,double Zeit_Messung_4_beendet,int size_vector_l)
{
    //-------------------------------------------------------------------------------------------------
    //Spielstart
    if (Starte_Spiel == 1)                  //Wenn Taster Spiel gestartet gedrückt, dann...
    {   
        Messung_1 = 0;                      //Hilfsvariable für Messung 1 zurücksetzen
        Messung_2_vorbereitet = 0;          //Hilfsvariable für Messung 2 vorbereitet zurücksetzen
        Messung_2 = 0;                      //Hilfsvariable für Messung 2 zurücksetzen
        Messung_3_vorbereitet = 0;          //Hilfsvariable für Messung 3 vorbereitet zurücksetzen
        Messung_3 = 0;                      //Hilfsvariable für Messung 3 zurücksetzen
        Messung_4_vorbereitet = 0;          //Hilfsvariable für Messung 4 vorbereitet zurücksetzen
        Messung_4 = 0;                      //Hilfsvariable für Messung 4 zurücksetzen
        Hilfe_Messung_1 = 0;
        Hilfe_Messung_1 = 0;
        Hilfe_Messung_1 = 0;
        Hilfe_Messung_1 = 0;
        lcd.clear();                        //LCD Display zurücksetzen
        lcd.setCursor(0,0);
        lcd.print("Starte 1. Mess-");       //Text auf Display ausgeben
        lcd.setCursor(0,1);
        lcd.print("ung mit Taster!");
        Spiel_gestartet = 1;                //Setze Hilfsvariable Spiel gestartet auf 1
    }


    //-----------------------------------------------------------------------------------------------------
    //Messung 1
    if (Spiel_gestartet == 1 and Starte_Messung == 1)   //Wenn Spiel gestartet und Taster Starte Messung gedrückt, dann...
    {
        Spiel_gestartet = 0;                            //Hilfsvariable Spiel gestartet zurücksetzen
        Messung_1 = 1;                                  //Hilfsvariable Messung_1 setzen
        lcd.clear();                                    //LCD zurücksetzen
        lcd.setCursor(0,0);
        lcd.print("Fortschritt:");                      //Text auf LCD schreiben
        lcd.setCursor(6,1);
        lcd.print("%");
    }

    if (Messung_1 == 1)                                 //Wenn Messung_1 aktiv
    {
        Fortschritt = (Zeit_Messung_1/5.00)*100;        //Berechne den Fortschritt
        lcd.setCursor(0,1);                             //Und gib ihn auf dem Display aus
        lcd.print("     ");
        lcd.setCursor(0,1);
        lcd.print(Fortschritt);
        if (Hilfe == 1)                                 //Wenn Taster Hilfe gedrückt, dann...
        {
            Hilfe_Messung_1 = 1;                        //Setze Hilfsvariable Hilfe_Messung_1 auf 1
        }
    }

    
    if (Hilfe_Messung_1 == 1)                           //Wenn Hilfe_Messung_1 gesetzt, dann...
    {
        if (Sensor_Wert > 920)                          //Vergleiche den Sensorwert mit dem gesuchten Wert
        {                                               //und gib je nach Höhe der Differenz die Hilfe "++", "+",
            lcd.setCursor(8,1);                         // "-" oder "--" aus
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:-");
        }
        
        if (Sensor_Wert < 860 )
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:+");
        }
        
        if (Sensor_Wert < 690)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:++");
        }
        
        if (Sensor_Wert > 860 and Sensor_Wert < 920)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:  ");
        }
    }

    if (Zeit_Messung_1 > 5 and Messung_1 == 1)              //Wenn der Eingang Zeit_Messung_1 größer als 5 ist 
    {                                                       //und Messung 1 aktiv ist, dann...
        Messung_1 = 0;                                      //setze Hilfsvariable Messung_1 zurück          
        Hilfe_Messung_1 = 0;                                //Hilfe_Messung_1 zurücksetzen
        lcd.clear();                                        //LCD zurücksetzen
        lcd.setCursor(0,0);
        lcd.print("1.Loesungsziffer");                      //Lösungsziffer 1 ausgeben
        lcd.setCursor(0,1);
        lcd.print("ist die 5!");
        Messung_1_beendet = 1;                              //Hilfsvariable Messung_1_beendet
    }

    if (Zeit_Messung_1_beendet > 7)                         //Wenn die Zeit_Messung_1 beendet größer
    {                                                       //als 7 ist, dann ...
        Messung_1_beendet = 0;                              //Messung_1_beendet zurücksetzen
        lcd.clear();                                        //LCD zurücksetzen
        lcd.setCursor(0,0);                                             
        lcd.print("Starte 2. Mess-");                       //Text zum Starten der 2ten Messung ausgeben
        lcd.setCursor(0,1);
        lcd.print("ung mit Taster!");
        Messung_2_vorbereitet = 1;                          //Messung_2_vorbereitet setzen

    }


    //----------------------------------------------------------------------------------------------------------------------------
    //Messung 2
    if (Messung_2_vorbereitet == 1 and Starte_Messung == 1)
    {
        Messung_2_vorbereitet = 0;
        Messung_2 = 1;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Fortschritt:");
        lcd.setCursor(6,1);
        lcd.print("%");
    }
   
    if (Messung_2 == 1)
    {
        Fortschritt = (Zeit_Messung_2/5.00)*100;
        lcd.setCursor(0,1);
        lcd.print("     ");
        lcd.setCursor(0,1);
        lcd.print(Fortschritt);
        if (Hilfe == 1)
        {
            Hilfe_Messung_2 = 1;
        }
    }


     if (Hilfe_Messung_2 == 1)
     {
         if (Sensor_Wert > 350)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:--");
         }

        if (Sensor_Wert > 200)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:-");
        }
        
         if (Sensor_Wert < 100 )
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:+");
        }
        
        
        if (Sensor_Wert > 100 and Sensor_Wert < 200)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:  ");
        }
     }


    if (Zeit_Messung_2 > 5 and Messung_2 == 1)
    {
        Messung_2 = 0;
        Hilfe_Messung_2 = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("2.Loesungsziffer");
        lcd.setCursor(0,1);
        lcd.print("ist die 0!");
        Messung_2_beendet = 1;
    }


     if (Zeit_Messung_2_beendet > 7)
    {
        Messung_2_beendet = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Starte 3. Mess-");
        lcd.setCursor(0,1);
        lcd.print("ung mit Taster!");
        Messung_3_vorbereitet = 1;

    }

    //---------------------------------------------------------------------------------------------------------------------------
    //Messung 3
    if (Messung_3_vorbereitet == 1 and Starte_Messung == 1)
    {
        Messung_3_vorbereitet = 0;
        Messung_3 = 1;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Fortschritt:");
        lcd.setCursor(6,1);
        lcd.print("%");
    }
   
    if (Messung_3 == 1)
    {
        Fortschritt = (Zeit_Messung_3/5.00)*100;
        lcd.setCursor(0,1);
        lcd.print("     ");
        lcd.setCursor(0,1);
        lcd.print(Fortschritt);
        if (Hilfe == 1)
        {
            Hilfe_Messung_3 = 1;
        }
    }


     if (Hilfe_Messung_3 == 1)
     {
         if (Sensor_Wert > 800)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:--");
         }

        if (Sensor_Wert > 650)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:-");
        }
        
        if (Sensor_Wert < 550 )
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:+");
        }
        
        if (Sensor_Wert < 400)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:++");
        }
        
        if (Sensor_Wert > 550 and Sensor_Wert < 650)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:  ");
        }
     }



    if (Zeit_Messung_3 > 5 and Messung_3 == 1)
    {
        Messung_3 = 0;
        Hilfe_Messung_3 = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("3.Loesungsziffer");
        lcd.setCursor(0,1);
        lcd.print("ist die 9!");
        Messung_3_beendet = 1;
    }


     if (Zeit_Messung_3_beendet > 7)
    {
        Messung_3_beendet = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Starte 4. Mess-");
        lcd.setCursor(0,1);
        lcd.print("ung mit Taster!");
        Messung_4_vorbereitet = 1;

    }

    //---------------------------------------------------------------------------------------------------------------------------
    //Messung 4
    if (Messung_4_vorbereitet == 1 and Starte_Messung == 1)
    {
        Messung_4_vorbereitet = 0;
        Messung_4 = 1;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Fortschritt:");
        lcd.setCursor(6,1);
        lcd.print("%");
    }
   
    if (Messung_4 == 1)
    {
        Fortschritt = (Zeit_Messung_4/5.00)*100;
        lcd.setCursor(0,1);
        lcd.print("     ");
        lcd.setCursor(0,1);
        lcd.print(Fortschritt);
        if (Hilfe == 1)
        {
            Hilfe_Messung_4 = 1;
        }
    }


     if (Hilfe_Messung_4 == 1)
     {
         if (Sensor_Wert > 600)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:--");
         }

        if (Sensor_Wert > 450)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:-");
        }
        
        if (Sensor_Wert < 350 )
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:+");
        }
        
        if (Sensor_Wert < 200)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:++");
        }
        
        if (Sensor_Wert > 350 and Sensor_Wert < 450)
        {
            lcd.setCursor(8,1);
            lcd.print("         ");
            lcd.setCursor(8,1);
            lcd.print("Hilfe:  ");
        }
     }



    if (Zeit_Messung_4 > 5 and Messung_4 == 1)
    {
        Messung_4 = 0;
        Hilfe_Messung_4 = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("4.Loesungsziffer");
        lcd.setCursor(0,1);
        lcd.print("ist die 3!");
        Messung_4_beendet = 1;
    }

     if (Zeit_Messung_4_beendet > 7)
    {
        Messung_4_beendet = 0;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Ihr habt das");
        lcd.setCursor(0,1);
        lcd.print("Raetsel geloest!");

     }


    //---------------------------------------------------------------------------------------------------------------------
    //Ausgänge
    *Abfrage_1 = Messung_1;
    *Abfrage_1_abgeschlossen = Messung_1_beendet;
    *Abfrage_2 = Messung_2;
    *Abfrage_2_abgeschlossen = Messung_2_beendet;
    *Abfrage_3 = Messung_3;
    *Abfrage_3_abgeschlossen = Messung_3_beendet;
    *Abfrage_4 = Messung_4;
    *Abfrage_4_abgeschlossen = Messung_4_beendet;
  
}