to detect if overtemperatures go in fail

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
billycorgan123
Date:
Tue Mar 20 19:42:27 2018 +0000
Revision:
0:c59d5987f1b3
AL96OT overtemperature;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
billycorgan123 0:c59d5987f1b3 1 #include "mbed.h"
billycorgan123 0:c59d5987f1b3 2 #include "TS_DISCO_F746NG.h"
billycorgan123 0:c59d5987f1b3 3 #include "LCD_DISCO_F746NG.h"
billycorgan123 0:c59d5987f1b3 4 #include "OverTemp.h"
billycorgan123 0:c59d5987f1b3 5 #include "colors.c"
billycorgan123 0:c59d5987f1b3 6 #include "AL96OTPICTURE.c"
billycorgan123 0:c59d5987f1b3 7
billycorgan123 0:c59d5987f1b3 8 extern LCD_DISCO_F746NG lcd;
billycorgan123 0:c59d5987f1b3 9 extern TS_DISCO_F746NG ts;
billycorgan123 0:c59d5987f1b3 10 extern TS_StateTypeDef TS_State;
billycorgan123 0:c59d5987f1b3 11 extern uint8_t text[30];
billycorgan123 0:c59d5987f1b3 12
billycorgan123 0:c59d5987f1b3 13 OverTemp sensore[7];
billycorgan123 0:c59d5987f1b3 14
billycorgan123 0:c59d5987f1b3 15 const int Ycerchio=35;
billycorgan123 0:c59d5987f1b3 16 DigitalOut activeRelay (D2);
billycorgan123 0:c59d5987f1b3 17 bool ERRORE=0;
billycorgan123 0:c59d5987f1b3 18 static bool myDataIn[8] = {1,0,1,0,1,0,1,0};
billycorgan123 0:c59d5987f1b3 19
billycorgan123 0:c59d5987f1b3 20
billycorgan123 0:c59d5987f1b3 21 bool * getData()
billycorgan123 0:c59d5987f1b3 22 { //define where your pins are
billycorgan123 0:c59d5987f1b3 23 DigitalOut latchPin(D5);
billycorgan123 0:c59d5987f1b3 24 DigitalOut clockPin(D6);
billycorgan123 0:c59d5987f1b3 25 DigitalIn dataPin(D7);
billycorgan123 0:c59d5987f1b3 26 float tempoattesa = 20;
billycorgan123 0:c59d5987f1b3 27 //acquiring values
billycorgan123 0:c59d5987f1b3 28 latchPin.write(1);
billycorgan123 0:c59d5987f1b3 29 wait_us(tempoattesa);
billycorgan123 0:c59d5987f1b3 30 //read values acquired and store in array
billycorgan123 0:c59d5987f1b3 31 latchPin.write(0);
billycorgan123 0:c59d5987f1b3 32 for (int i=7; i>=0; i--)
billycorgan123 0:c59d5987f1b3 33 {
billycorgan123 0:c59d5987f1b3 34 wait_us(tempoattesa);
billycorgan123 0:c59d5987f1b3 35 clockPin.write(0);
billycorgan123 0:c59d5987f1b3 36 wait_us(tempoattesa);
billycorgan123 0:c59d5987f1b3 37 myDataIn[i] = dataPin.read(); //1 if OT open, 0 if OT close
billycorgan123 0:c59d5987f1b3 38 clockPin.write(1);
billycorgan123 0:c59d5987f1b3 39 }
billycorgan123 0:c59d5987f1b3 40 return myDataIn;
billycorgan123 0:c59d5987f1b3 41 }
billycorgan123 0:c59d5987f1b3 42
billycorgan123 0:c59d5987f1b3 43 void INIZIALIZZAZIONE()
billycorgan123 0:c59d5987f1b3 44 {//inizializzazione dello stato degli OT
billycorgan123 0:c59d5987f1b3 45 //lettura dello stato, e disegno a pannello
billycorgan123 0:c59d5987f1b3 46 for (int i=0; i<7; i++)
billycorgan123 0:c59d5987f1b3 47 {
billycorgan123 0:c59d5987f1b3 48 sensore[i].State=*(getData()+i);
billycorgan123 0:c59d5987f1b3 49 sensore[i].Tripped=0;
billycorgan123 0:c59d5987f1b3 50 sensore[i].wasActive = *(getData()+i);
billycorgan123 0:c59d5987f1b3 51 sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State);
billycorgan123 0:c59d5987f1b3 52 }
billycorgan123 0:c59d5987f1b3 53 }
billycorgan123 0:c59d5987f1b3 54
billycorgan123 0:c59d5987f1b3 55 void DRAW(){
billycorgan123 0:c59d5987f1b3 56 //Disegna l'immagine di sfondo
billycorgan123 0:c59d5987f1b3 57 lcd.Clear(lightskyblue);
billycorgan123 0:c59d5987f1b3 58 int riga, colonna;
billycorgan123 0:c59d5987f1b3 59 unsigned long contatore=0;
billycorgan123 0:c59d5987f1b3 60 for (riga=480; riga>0; riga--) {
billycorgan123 0:c59d5987f1b3 61 for ( colonna=0; colonna<480; colonna++) {
billycorgan123 0:c59d5987f1b3 62 lcd.DrawPixel (colonna, 480-riga, _acAL96OTPICTURE[contatore]);
billycorgan123 0:c59d5987f1b3 63 contatore++;
billycorgan123 0:c59d5987f1b3 64 }
billycorgan123 0:c59d5987f1b3 65 colonna=0;
billycorgan123 0:c59d5987f1b3 66 }
billycorgan123 0:c59d5987f1b3 67 }
billycorgan123 0:c59d5987f1b3 68
billycorgan123 0:c59d5987f1b3 69
billycorgan123 0:c59d5987f1b3 70 int main() {
billycorgan123 0:c59d5987f1b3 71 lcd.Clear(lightskyblue);
billycorgan123 0:c59d5987f1b3 72 INIZIALIZZAZIONE();
billycorgan123 0:c59d5987f1b3 73
billycorgan123 0:c59d5987f1b3 74 while(1)
billycorgan123 0:c59d5987f1b3 75 {
billycorgan123 0:c59d5987f1b3 76 for (int i=0; i<7; i++)
billycorgan123 0:c59d5987f1b3 77 {
billycorgan123 0:c59d5987f1b3 78 //acquisisco lo stato degli OT, in caso di faulty .Tripped viene messo a 1
billycorgan123 0:c59d5987f1b3 79 sensore[i].isActive = *(getData()+i);
billycorgan123 0:c59d5987f1b3 80 if (sensore[i].isActive==1) sensore[i].Tripped=1;
billycorgan123 0:c59d5987f1b3 81 //se lo stato dell'OT è cambiato rispetto lo stato precedente ne ridisegno il cerchio
billycorgan123 0:c59d5987f1b3 82 if (sensore[i].isActive!=sensore[i].wasActive) {
billycorgan123 0:c59d5987f1b3 83 if (sensore[i].isActive==1) sensore[i].State=1; //rosso
billycorgan123 0:c59d5987f1b3 84 if ((sensore[i].isActive==0) && sensore[i].Tripped==0) sensore[i].State=0; //verde
billycorgan123 0:c59d5987f1b3 85 if ((sensore[i].isActive==0) && sensore[i].Tripped==1) sensore[i].State=2; //verderosso
billycorgan123 0:c59d5987f1b3 86 sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State);
billycorgan123 0:c59d5987f1b3 87 }
billycorgan123 0:c59d5987f1b3 88 //sono sotto un ciclo for, se almeno uno OT è andato in errore viene segnalato
billycorgan123 0:c59d5987f1b3 89 ERRORE = ERRORE || sensore[i].Tripped;
billycorgan123 0:c59d5987f1b3 90 if ( ERRORE ) {
billycorgan123 0:c59d5987f1b3 91 lcd.SetFont(&Font24);
billycorgan123 0:c59d5987f1b3 92 lcd.SetTextColor(red);
billycorgan123 0:c59d5987f1b3 93 lcd.DrawRect(120, 73, 240, 35);
billycorgan123 0:c59d5987f1b3 94 lcd.DisplayStringAt(0, LINE(4)-17, (uint8_t *)" E R R O R ", CENTER_MODE);
billycorgan123 0:c59d5987f1b3 95 if (sensore[i].Tripped) sensore[i].Write(i);
billycorgan123 0:c59d5987f1b3 96 //qui da mettere il relay
billycorgan123 0:c59d5987f1b3 97 activeRelay.write(0);
billycorgan123 0:c59d5987f1b3 98 }
billycorgan123 0:c59d5987f1b3 99 else {
billycorgan123 0:c59d5987f1b3 100 lcd.SetFont(&Font24);
billycorgan123 0:c59d5987f1b3 101 lcd.SetTextColor(lime);
billycorgan123 0:c59d5987f1b3 102 lcd.DrawRect(120, 73, 240, 35);
billycorgan123 0:c59d5987f1b3 103 lcd.DisplayStringAt(0, LINE(4)-17, (uint8_t *)" O K ", CENTER_MODE);
billycorgan123 0:c59d5987f1b3 104 //qui da mettere il relay
billycorgan123 0:c59d5987f1b3 105 activeRelay.write(1);
billycorgan123 0:c59d5987f1b3 106 }
billycorgan123 0:c59d5987f1b3 107
billycorgan123 0:c59d5987f1b3 108 if ( sensore[i].isTouched(50+65*i, Ycerchio) && (sensore[i].Tripped) )
billycorgan123 0:c59d5987f1b3 109 {
billycorgan123 0:c59d5987f1b3 110 DRAW();
billycorgan123 0:c59d5987f1b3 111 sensore[i].DrawOTPosition(i);
billycorgan123 0:c59d5987f1b3 112 wait(6);
billycorgan123 0:c59d5987f1b3 113 lcd.Clear(lightskyblue);
billycorgan123 0:c59d5987f1b3 114 for (int i=0; i<7; i++) {sensore[i].DrawCircle(50+65*i, Ycerchio, sensore[i].State); }
billycorgan123 0:c59d5987f1b3 115 }
billycorgan123 0:c59d5987f1b3 116
billycorgan123 0:c59d5987f1b3 117 sensore[i].wasActive = sensore[i].isActive;
billycorgan123 0:c59d5987f1b3 118 }
billycorgan123 0:c59d5987f1b3 119 wait(0.1);
billycorgan123 0:c59d5987f1b3 120 }//close while(1)
billycorgan123 0:c59d5987f1b3 121 }//close main