new version of AL96_OT
Dependencies: mbed LCD_DISCO_F469NI TS_DISCO_F469NI BSP_DISCO_F469NI
Diff: functions.h
- Revision:
- 0:c980456a5562
- Child:
- 1:309cda84edd4
diff -r 000000000000 -r c980456a5562 functions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/functions.h Wed May 30 14:59:27 2018 +0000 @@ -0,0 +1,430 @@ +#ifndef FUCTIONS_H +#define FUNCTIONS_H + +#include "colors.c" +#include "mbed.h" +#include "Output.h" +#include "Shifter.h" +#include "LCD_DISCO_F469NI.h" +#include "display.h" + +Serial pc(SERIAL_TX, SERIAL_RX); +//MAX31865_RTD( ptd_type type,PinName mosi, PinName miso, PinName sclk, PinName nss); +MAX31865_RTD PT1(MAX31865_RTD::RTD_PT100, D11, D12, D13, A0); +MAX31865_RTD PT2(MAX31865_RTD::RTD_PT100, D11, D12, D13, A1); +MAX31865_RTD PT3(MAX31865_RTD::RTD_PT100, D11, D12, D13, A2); + +TS_DISCO_F469NI ts; +TS_StateTypeDef TS_State; +uint8_t status; +uint8_t cleared = 0; +uint8_t prev_nb_touches = 0; +uint8_t text[30]; + +int temp_safe=150; //temperatura di sicurezza per la quale non è possibile aprire la porta (150) +int MAXtemp_safe=450; //temperatura di sicurezza per la quale non è possibile aprire la porta (450) +float setpointHIGH = 450; //setpoint temperatura high per il clean, temperatura per il cleaning +float setpointLOW = (setpointHIGH-20); //setpoint temperatura low per il clean +int clean_time=1800; //tempo di clean, (1800) +int tempo_roast =1200; //tempo di roasting, posso variare con le frecce (1200) +int temperatura_roast = 200; //temperatura di roasting, posso variare con le frecce (200) +int step_clean=0; +int step_roast=0; + + +/// dichiarazione variabili //////////////////////////////////////////////////// +//per i sensori +static bool myDataIn[8] = {1,0,1,0,1,0,1,0}; +//myDataIn[0] tappo caffè chiuso; +//myDataIn[1] sensore porta chiusa; +//myDataIn[2] finecorsa sarico aperto; +//myDataIn[3] finecorsa scarico chiuso; +//myDataIn[4]; //da dare un nome +//myDataIn[5]; //da dare un nome +//myDataIn[6]; //da dare un nome +//myDataIn[7]; //da dare un nome + +//per i relay +Shifter scheda_8relay; //!! pinout defined in library +Output Bloccoporta; // +Output Giracaffe; // 24V, palette agita caffé +Output Lampadina; // Lampadina +Output VTangenziale; // 1 +Output VRadiale; // 2 +Output Scarico_caffe; // motore scarico caffé +Output Resistenza1; // Heater 1, centrale +Output Resistenza2; // Heater 2, più esterno +Output Ventola; // Cooling, 24V, ventola cassetto caffè + +bool Activate_Door; //sul SSR per comandare il bloccoporta + +extern bool Apro_porta(); //definita più in basso +bool Chiudo_scarico(); //definita più in basso +/// funzioni /////////////////////////////////////////////////////////////////// +//------------------------------------------------------------------------------ +void object_update() +{ + //update delle immagini e dello stato delle uscite + Lampadina.draw_image (&_acLampadina_acceso[0], &_acLampadina_spento[0], Lampadina.stato, 230, 20); + Resistenza1.draw_image (&_acResistenza1_acceso[0], &_acResistenza1_spento[0], Resistenza1.stato, 300, 20); + Resistenza2.draw_image (&_acResistenza2_acceso[0], &_acResistenza2_spento[0], Resistenza2.stato, 370, 20); + Giracaffe.draw_image (&_acGiracaffe_acceso[0], &_acGiracaffe_spento[0], Giracaffe.stato, 440, 20); + Bloccoporta.draw_image (&_acPorta_aperto[0], &_acPorta_chiuso[0], Bloccoporta.stato, 230, 90); + VTangenziale.draw_image (&_acVTangenziale_acceso[0], &_acVTangenziale_spento[0], VTangenziale.stato, 300, 90); + VRadiale.draw_image (&_acVRadiale_acceso[0], &_acVRadiale_spento[0], VRadiale.stato, 370, 90); + Ventola.draw_image (&_acVentola_acceso[0], &_acVentola_spento[0], Ventola.stato, 440, 90); + //update uscita 74HC595 + bool array[16]= {!Lampadina.stato, !Giracaffe.stato, !VTangenziale.stato, !Resistenza1.stato, !Resistenza2.stato, !VRadiale.stato, !Scarico_caffe.ON_OFF, !Scarico_caffe.CW_CCW, !Ventola.stato, !Activate_Door,1,1,1,1,1,1}; + for (int i=0; i<16; i++) { + scheda_8relay.setPin(i,array[i]); + wait_us(2); + scheda_8relay.write(); + //sprintf((char*)text, "%d ", array[i]); + //lcd.DisplayStringAt(200+20*i, LINE( 7),(uint8_t *)&text, LEFT_MODE); + } +} +//------------------------------------------------------------------------------ +/// Lampadina +void Lampadina_acceso() +{ + Lampadina.stato=1; + object_update(); +} +void Lampadina_spento() +{ + Lampadina.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +bool setup_griglia() +{ + lcd.Clear(light_sky_blue); + lcd.SetBackColor(light_sky_blue); + lcd.SetFont(&Font24); + lcd.SetTextColor(black); + lcd.DisplayStringAt(670, LINE(0), (uint8_t *)"Ver 2.0", LEFT_MODE); + Lampadina_acceso(); + wait(0.1); + Lampadina_spento(); + wait(0.1); + + //update delle immagini e dello stato delle uscite + Lampadina.draw_image (&_acLampadina_acceso[0], &_acLampadina_spento[0], Lampadina.stato, 230, 20); + Resistenza1.draw_image (&_acResistenza1_acceso[0], &_acResistenza1_spento[0], Resistenza1.stato, 300, 20); + Resistenza2.draw_image (&_acResistenza2_acceso[0], &_acResistenza2_spento[0], Resistenza2.stato, 370, 20); + Giracaffe.draw_image (&_acGiracaffe_acceso[0], &_acGiracaffe_spento[0], Giracaffe.stato, 440, 20); + Bloccoporta.draw_image (&_acPorta_aperto[0], &_acPorta_chiuso[0], Bloccoporta.stato, 230, 90); + VTangenziale.draw_image (&_acVTangenziale_acceso[0], &_acVTangenziale_spento[0], VTangenziale.stato, 300, 90); + VRadiale.draw_image (&_acVRadiale_acceso[0], &_acVRadiale_spento[0], VRadiale.stato, 370, 90); + Ventola.draw_image (&_acVentola_acceso[0], &_acVentola_spento[0], Ventola.stato, 440, 90); + + //disegno bottoni + disegna_pulsanti(STOP); + disegna_pulsanti(CLEAN); + disegna_pulsanti(ROAST); + disegna_pulsanti(PULSANTI); + + lcd.DisplayStringAt(200, LINE( 8), (uint8_t *)"Time:", LEFT_MODE); + lcd.DisplayStringAt(330, LINE(8), (uint8_t *)"'", LEFT_MODE); + lcd.DisplayStringAt(385, LINE(8), (uint8_t *)"''", LEFT_MODE); + lcd.DisplayStringAt(200, LINE( 10), (uint8_t *)"Temp:", LEFT_MODE); + lcd.DrawCircle(355, LINE(10)+3, 4); + lcd.DisplayStringAt(360, LINE( 10), (uint8_t *)"C", LEFT_MODE); + lcd.DisplayStringAt(620, LINE( 9), (uint8_t *)"T1:", LEFT_MODE); + lcd.DisplayStringAt(620, LINE(11), (uint8_t *)"T2:", LEFT_MODE); + lcd.DisplayStringAt(620, LINE(13), (uint8_t *)"T3:", LEFT_MODE); + + //per prova, da togliere dopo + lcd.SetTextColor(red); + lcd.FillRect (620, 20, 70, 70); + lcd.SetTextColor(green); + lcd.FillRect (620, 100, 70, 70); + lcd.SetTextColor(black); + lcd.SetBackColor(red); + lcd.DisplayStringAt(620, 40, (uint8_t *)"OPEN", LEFT_MODE); + lcd.SetBackColor(green); + lcd.DisplayStringAt(620, 120, (uint8_t *)"CLOS", LEFT_MODE); + lcd.SetBackColor(light_sky_blue); + //fino qui + + PT1.configure( true, true, false, false, MAX31865_FAULT_DETECTION_NONE, + true, true, 0x0000, 0x7fff ); + PT2.configure( true, true, false, false, MAX31865_FAULT_DETECTION_NONE, + true, true, 0x0000, 0x7fff ); + PT3.configure( true, true, false, false, MAX31865_FAULT_DETECTION_NONE, + true, true, 0x0000, 0x7fff ); + //Apro_porta(); + return 0; +} +//------------------------------------------------------------------------------ +bool * getData() +{ + //define where your pins are + DigitalOut latchPin(D7); + DigitalOut clockPin(D6); + DigitalIn dataPin(D5); + 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); + } + + //per prova da togliere dopo + for (int i=7; i>=0; i--) { // D7,D6,.....,D1,D0 + sprintf((char*)text, "%d", myDataIn[0+i]); + lcd.DisplayStringAt(580+20*i,LINE(8), (uint8_t *)&text, LEFT_MODE); + } + // + + return myDataIn; +} +//------------------------------------------------------------------------------ +/// Resistenza 1 +void Resistenza1_acceso() +{ + Resistenza1.stato=1; + object_update(); +} +void Resistenza1_spento() +{ + Resistenza1.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +/// Resistenza 2 +void Resistenza2_acceso() +{ + Resistenza2.stato=1; + object_update(); +} +void Resistenza2_spento() +{ + Resistenza2.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +void temperature_update() +{ + lcd.DisplayStringAt(680, LINE( 9), (uint8_t *)" ", LEFT_MODE); + lcd.DisplayStringAt(680, LINE(11), (uint8_t *)" ", LEFT_MODE); + lcd.DisplayStringAt(680, LINE(13), (uint8_t *)" ", LEFT_MODE); + PT1.read_all( ); + if (PT1.temperature( )>150) lcd.SetTextColor(red); + else lcd.SetTextColor(black); + sprintf((char*)text, "%1.0f", PT1.temperature( )); + lcd.DisplayStringAt(680, LINE(9), (uint8_t *)&text, LEFT_MODE); + PT2.read_all( ); + if (PT2.temperature( )>150) lcd.SetTextColor(red); + else lcd.SetTextColor(black); + sprintf((char*)text, "%1.0f", PT2.temperature( )); + lcd.DisplayStringAt(680, LINE(11), (uint8_t *)&text, LEFT_MODE); + PT3.read_all( ); + if (PT3.temperature( )>150) lcd.SetTextColor(red); + else lcd.SetTextColor(black); + sprintf((char*)text, "%1.0f", PT3.temperature( )); + lcd.DisplayStringAt(680, LINE(13), (uint8_t *)&text, LEFT_MODE); + lcd.SetTextColor(black); + + //per sicurezza la temperatura non può superare la MAX temperaratura di sicurezza (450 gradi) + if (PT1.temperature( )>MAXtemp_safe || PT2.temperature( )>MAXtemp_safe) { + Resistenza1_spento(); + Resistenza2_spento(); + wait(1.0); + } +} +//------------------------------------------------------------------------------ +/// Ventola 12/24 volt +void Ventola_acceso() +{ + Ventola.stato=1; + object_update(); +} +void Ventola_spento() +{ + Ventola.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +/// Ventola Radiale +void VRadiale_acceso() +{ + VRadiale.stato=1; + object_update(); +} +void VRadiale_spento() +{ + VRadiale.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +/// Ventola Tangenziale +void VTangenziale_acceso() +{ + VTangenziale.stato=1; + object_update(); +} +void VTangenziale_spento() +{ + VTangenziale.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +/// Giracaffe +void Giracaffe_acceso() +{ + Giracaffe.stato=1; + object_update(); +} +void Giracaffe_spento() +{ + Giracaffe.stato=0; + object_update(); +} +//------------------------------------------------------------------------------ +///Apro scarico caffe +bool Apro_scarico() +{ + getData(); + while(!myDataIn[2]) { + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"COFFE UNLOAD IS OPENING ", LEFT_MODE); + Scarico_caffe.CW_CCW=1; + wait(0.1); + Scarico_caffe.ON_OFF=1; + temperature_update(); + object_update(); + wait(0.012); + getData(); + } + Scarico_caffe.ON_OFF=0; + object_update(); + wait(0.012); + getData(); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)" ", LEFT_MODE); + wait(0.1); + return 0; +} +///Chiudo scarico caffe +bool Chiudo_scarico() +{ + getData(); + while(!myDataIn[3]) { + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"COFFE UNLOAD IS CLOSING ", LEFT_MODE); + Scarico_caffe.CW_CCW=0; + wait(0.1); + Scarico_caffe.ON_OFF=1; + temperature_update(); + object_update(); + wait(0.012); + getData(); + } + Scarico_caffe.ON_OFF=0; + object_update(); + wait(0.012); + getData(); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)" ", LEFT_MODE); + wait(0.1); + return 0; +} +//------------------------------------------------------------------------------ +///Porta +bool Apro_porta() +{ +/* + int time_door=5; + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"WAIT TO OPEN DOOR ", LEFT_MODE); + while(time_door>0) { + sprintf((char*)text, "%5d", time_door); + lcd.DisplayStringAt(600,LINE(18), (uint8_t *)&text, LEFT_MODE); + time_door--; + temperature_update(); + wait(1); + } + //attivazione del relay per aprire la porta + for (int i=0; i<2; i++) { + Activate_Door=1; + object_update(); + //wait_us(20); + wait(0.02); + Activate_Door=0; + object_update(); + wait(4); + //wait_us(20); + } + /// + lcd.DisplayStringAt(600, LINE(18), (uint8_t *)" ", LEFT_MODE); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"DOOR IS OPEN ", LEFT_MODE); + wait(1.0); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)" ", LEFT_MODE); + Bloccoporta.stato=0; + object_update(); +*/ + return 0; +} +bool Chiudo_porta() +{ +/* + int time_door=5; + bool stato_porta; + getData(); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"WAIT TO CLOSE DOOR ", LEFT_MODE); + while(time_door>0) { + sprintf((char*)text, "%5d", time_door); + lcd.DisplayStringAt(600,LINE(18), (uint8_t *)&text, LEFT_MODE); + time_door--; + temperature_update(); + wait(1); + } + lcd.DisplayStringAt(600, LINE(18), (uint8_t *)" ", LEFT_MODE); +//attivazione del relay per chiudere la porta + if (!myDataIn[1]) { + for (int i=0; i<1; i++) { + Activate_Door=1; + object_update(); + wait(0.02); + //wait_us(20); + Activate_Door=0; + object_update(); + wait(0.05); + //wait_us(20); + } + /// + Bloccoporta.stato=1; + object_update(); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"DOOR IS CLOSED ", LEFT_MODE); + stato_porta=0; + wait(2.0); + } else { + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"CLOSE THE DOOR PLEASE ", LEFT_MODE); + stato_porta=1; + } + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)" ", LEFT_MODE); +*/ + return stato_porta; +} +//------------------------------------------------------------------------------ +///Tappo caffè +bool tappo_caffe() +{ + bool stato_tappo_caffe; + getData(); + if (myDataIn[0]) { + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"COFFE COVER IS CLOSED ", LEFT_MODE); + stato_tappo_caffe=0; + } else { + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)"CLOSE COFFE COVER PLEASE ", LEFT_MODE); + stato_tappo_caffe=1; + } + wait(1.0); + lcd.DisplayStringAt(10, LINE(18), (uint8_t *)" ", LEFT_MODE); + return stato_tappo_caffe; +} +//End of Functions// +#endif