new version of AL96_OT

Dependencies:   mbed LCD_DISCO_F469NI TS_DISCO_F469NI BSP_DISCO_F469NI

main.cpp

Committer:
billycorgan123
Date:
2020-05-18
Revision:
2:ee10ee4002d5
Parent:
1:309cda84edd4

File content as of revision 2:ee10ee4002d5:

#include "mbed.h"

#include "pictures.h"
#include "config.h"
#include "display.h"
#include "functions.h"

int main()
{
    timer.start();
    function_zero_array();
    display_setup();
    display_draw_sheet(actual_sheet);

    //configuro lo switch analogico
    config4051(D6, D5, D4);

    while(1) {
        
        //acquisisco la pressione sullo schermo per attivare i vari oggetti/////
        ts.GetState(&TS_State);
        ////////////////////////////////////////////////////////////////////////
        
        // se premo nella barra inferiore cambio foglio/////////////////////////
        function_PREV_NEXT();
        ////////////////////////////////////////////////////////////////////////

        //comandi dei tasti nei vari fogli//////////////////////////////////////

        //se è attivo FOGLIO_0 /////////////////////////////////////////////////
        if (actual_sheet == 0) {
            display_Error(ERRORE);
            if (is_OT_displayed)
                for (int i=0; i<MAX_OT; i++) {
                    display_mini_state(OT[i].state, 430+40*i, 60);                  //overtemperatures
                }
            if (is_Heater_displayed)
                for (int i=0; i<MAX_HEATER; i++) {
                    display_mini_state(Heater[i].state, 430+40*i, 140);             //heaters
                }
            if (is_Analog_displayed) 
                for (int i=0; i<MAX_ANALOG; i++) {
                    display_mini_state(ANALOG[i].state, 430+40*i, 220);             //analog signals
                }
            if (is_Digital_displayed) 
                for (int i=0; i<MAX_DIGITAL; i++) {
                    display_mini_state(DIGITAL[i].state, 430+40*i, 300);            //digital signals
                }
        }
        //fine FOGLIO_0/////////////////////////////////////////////////////////

        //se è attivo FOGLIO_1 /////////////////////////////////////////////////
        if (actual_sheet == 1) {
            for (int i=0; i<MAX_OT; i++) {
                display_OT_state(OT[i].state, 35+i*95, 60, 8);
                print_OT_alarmed();
            }
            //for (int pi = 0; pi<8; pi++) lcd.DrawRect(35+pi*95, 60, 95, 150);
            if ( (TS_State.touchDetected) && (TS_State.touchX[0]>35 && TS_State.touchX[0]<795 && TS_State.touchY[0]>60 && TS_State.touchY[0]<210) && 
                        OT[(TS_State.touchX[0] - 35)/95].latch_error > 0) {
                //mostra la foto per 5 secondi
                lcd.SetTextColor(BackColor);
                lcd.FillRect(0, 0, 800, 409);
                lcd.SetTextColor(black);
                //qui da mettere il display foto
                display_sfondo_macchina();
                wait (4);
                display_setup();
                display_draw_sheet(actual_sheet);
            }

        }
        //fine FOGLIO_1/////////////////////////////////////////////////////////

        //se è attivo FOGLIO_2 /////////////////////////////////////////////////
        if (actual_sheet == 2) {
            for (int i=0; i<MAX_HEATER; i++) {       
                lcd.SetTextColor(black);  
                sprintf((char*)text, "%2.3f", Heater[i].average);
                lcd.DisplayStringAt(180,LINE(1+2*i), (uint8_t *)&text, LEFT_MODE);
                //if Heater is active = 1, small green square, else red
                (Heater[i].ON_OFF == 1) ? lcd.SetTextColor(forestgreen) : lcd.SetTextColor(red);
                lcd.FillRect(280, LINE(1+2*i), 15, 15);
            }   
            lcd.SetTextColor(BackColor);
            lcd.FillRect(300, 18, 1*MAX_Samples, 75);
            lcd.SetTextColor(black);
            for (int i=0; i<MAX_HEATER; i++) {
                int a_samples = 0;       
                for (a_samples=0; a_samples<MAX_Samples; a_samples++) {
                    lcd.FillRect(300+1*a_samples, LINE(1+2*i), 1, (10*Heater_Samples[i][a_samples]+1) );
                }
                a_samples=0;
            }         
        }
        //fine FOGLIO_2/////////////////////////////////////////////////////////

        //se è attivo FOGLIO_3 /////////////////////////////////////////////////
        if (actual_sheet == 3) {
            function_print_analog();
            function_print_digital();
        }
        //fine FOGLIO_3/////////////////////////////////////////////////////////
        
        //se è attivo FOGLIO_4 /////////////////////////////////////////////////
        if (actual_sheet == 4) {
                     
        }
        //fine FOGLIO_4/////////////////////////////////////////////////////////

        //CONTROLLI COMPONENTI//////////////////////////////////////////////////
        //OVER TEMPERATURES
        function_check_OT();
        //controllo dello stato degli heater, fatto ogni 3000 msec
        //numero di campioni costante di 300 -> con intervallo 1 secondo -> 5 minuti, 
        //numero di campioni costante di 300 -> con intervallo 3 secondi -> 15 minuti //se l' heater non scalda per 15 minuti viene dichiarato ERROR 
        //HEATERS
        if ( (timer.read_ms() - heater_actual_time) > 3000) {
            function_check_heaters(Sample);
            heater_actual_time = timer.read_ms();
            Sample++;
            if (Sample >= MAX_Samples) Sample = 0;
        }
        //ANALOG SIGNALS
        function_check_analog();
        //DIGITAL SIGNALS
        function_check_digital();
        ////////////////////////////////////////////////////////////////////////
        
        //BACK HOME PAGE////////////////////////////////////////////////////////
        //visualizza la pagina 0, in milliseconds (360000=6 minutes)
        function_back_to_home_page(360000);                                     
        display_sheet_number();
        ////////////////////////////////////////////////////////////////////////
        
        //CONTROL ERROR/////////////////////////////////////////////////////////
        //se check_if_error == 1, c'e' l'errore e il relay e' LOW (chiuso)
        //attiva/disattiva il relay 
        
        if (check_if_error())  Relay_Error1 = LOW;                              
        else  Relay_Error1 = HIGH; 
        ////////////////////////////////////////////////////////////////////////
        
        wait(0.1);
    }
}