to detect if overtemperatures go in fail
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp
- Committer:
- billycorgan123
- Date:
- 2018-03-20
- Revision:
- 0:c59d5987f1b3
File content as of revision 0:c59d5987f1b3:
#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