to detect if overtemperatures go in fail

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Revision:
0:c59d5987f1b3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 20 19:42:27 2018 +0000
@@ -0,0 +1,121 @@
+#include "mbed.h"
+#include "TS_DISCO_F746NG.h"
+#include "LCD_DISCO_F746NG.h"
+#include "OverTemp.h"
+#include "colors.c"
+#include "AL96OTPICTURE.c"
+
+extern  LCD_DISCO_F746NG lcd;
+extern  TS_DISCO_F746NG ts;
+extern  TS_StateTypeDef TS_State;
+extern  uint8_t text[30]; 
+      
+OverTemp sensore[7];
+
+const int Ycerchio=35;
+DigitalOut activeRelay (D2);      
+bool ERRORE=0;
+static bool myDataIn[8] = {1,0,1,0,1,0,1,0};
+
+
+bool * getData()
+{   //define where your pins are
+    DigitalOut latchPin(D5);
+    DigitalOut clockPin(D6);
+    DigitalIn  dataPin(D7); 
+    float tempoattesa = 20;              
+    //acquiring values
+    latchPin.write(1);
+    wait_us(tempoattesa);  
+    //read values acquired and store in array     
+    latchPin.write(0);
+    for (int i=7; i>=0; i--) 
+    {
+        wait_us(tempoattesa);
+        clockPin.write(0);
+        wait_us(tempoattesa);
+        myDataIn[i] = dataPin.read();      //1 if OT open, 0 if OT close
+        clockPin.write(1);
+    }
+    return myDataIn;
+}
+
+void INIZIALIZZAZIONE()
+{//inizializzazione dello stato degli OT
+ //lettura dello stato, e disegno a pannello
+ for (int i=0; i<7; i++)                     
+    {   
+    sensore[i].State=*(getData()+i); 
+    sensore[i].Tripped=0; 
+    sensore[i].wasActive = *(getData()+i);  
+    sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State);
+    }
+}
+
+void DRAW(){
+//Disegna l'immagine di sfondo
+lcd.Clear(lightskyblue);
+int riga, colonna;
+unsigned long contatore=0;
+for (riga=480; riga>0; riga--)  {
+    for ( colonna=0; colonna<480; colonna++)  {   
+        lcd.DrawPixel (colonna, 480-riga, _acAL96OTPICTURE[contatore]);
+        contatore++;
+        }
+    colonna=0;
+    }
+}
+
+
+int main() { 
+lcd.Clear(lightskyblue);
+INIZIALIZZAZIONE();
+
+while(1)                                    
+    {
+        for (int i=0; i<7; i++)
+        {
+    //acquisisco lo stato degli OT, in caso di faulty .Tripped viene messo a 1    
+        sensore[i].isActive = *(getData()+i);
+        if (sensore[i].isActive==1) sensore[i].Tripped=1;
+    //se lo stato dell'OT è cambiato rispetto lo stato precedente ne ridisegno il cerchio
+        if (sensore[i].isActive!=sensore[i].wasActive) { 
+            if (sensore[i].isActive==1)  sensore[i].State=1;                                    //rosso
+            if ((sensore[i].isActive==0) && sensore[i].Tripped==0) sensore[i].State=0;          //verde
+            if ((sensore[i].isActive==0) && sensore[i].Tripped==1) sensore[i].State=2;          //verderosso
+            sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State);
+            }
+    //sono sotto un ciclo for, se almeno uno OT è andato in errore viene segnalato
+        ERRORE = ERRORE || sensore[i].Tripped;
+        if ( ERRORE ) {   
+            lcd.SetFont(&Font24);
+            lcd.SetTextColor(red);
+            lcd.DrawRect(120, 73, 240, 35);
+            lcd.DisplayStringAt(0, LINE(4)-17, (uint8_t *)" E R R O R ", CENTER_MODE);
+            if (sensore[i].Tripped) sensore[i].Write(i);
+            //qui da mettere il relay 
+            activeRelay.write(0);
+            }
+        else {   
+            lcd.SetFont(&Font24);
+            lcd.SetTextColor(lime);
+            lcd.DrawRect(120, 73, 240, 35);
+            lcd.DisplayStringAt(0, LINE(4)-17, (uint8_t *)" O K ", CENTER_MODE);
+            //qui da mettere il relay
+            activeRelay.write(1);
+            }
+    
+        if ( sensore[i].isTouched(50+65*i, Ycerchio) && (sensore[i].Tripped) )  
+            { 
+            DRAW();
+            sensore[i].DrawOTPosition(i);
+            wait(6);
+            lcd.Clear(lightskyblue);
+            for (int i=0; i<7; i++) {sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State); }
+            } 
+   
+        sensore[i].wasActive = sensore[i].isActive;           
+        }       
+        wait(0.1); 
+    }//close while(1)
+}//close main