Basic example how to use DrawPixel with STM32F746

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Revision:
1:8a54b7de2617
Parent:
0:d421f2c38453
--- a/main.cpp	Sun Jun 12 12:30:54 2016 +0000
+++ b/main.cpp	Wed Feb 21 19:38:50 2018 +0000
@@ -1,22 +1,182 @@
 #include "mbed.h"
+#include "TS_DISCO_F746NG.h"
 #include "LCD_DISCO_F746NG.h"
-#include "prova.c"
+
+#include "Bloccoporta_acceso.c"
+#include "Bloccoporta_spento.c"
+#include "Girarrosto_acceso.c"
+#include "Girarrosto_spento.c"
+#include "Lampadina_acceso.c"
+#include "Lampadina_spento.c"
+#include "Motore_acceso.c"
+#include "Motore_spento.c"
+#include "Resistenza1_acceso.c"
+#include "Resistenza1_spento.c"
+#include "Resistenza2_acceso.c"
+#include "Resistenza2_spento.c"
+#include "Ventilatore1_acceso.c"
+#include "Ventilatore1_spento.c"
+#include "Ventilatore2_acceso.c"
+#include "Ventilatore2_spento.c"
+
+#include "Clean.c"
+#include "Roast.c"
+#include "Stop.c"
+
+#include "functions.h"
+#include "colors.c"
+#include "Output.h"
+#include "Shifter.h"
 
 LCD_DISCO_F746NG lcd;
+TS_DISCO_F746NG ts;
+
+extern void clean(int);
+extern void stop();
+extern void object_update();
+
+TS_StateTypeDef TS_State;
+uint16_t X, Y;
+uint8_t idx;
+uint8_t status;
+uint8_t cleared = 0;
+uint8_t prev_nb_touches = 0;
+int numerotappe=0;
+uint8_t text[30];
+
+Output Bloccoporta;
+Output Girarrosto;
+Output Lampadina;
+Output Motore;
+Output Resistenza1;
+Output Resistenza2;
+Output Ventilatore1;
+Output Ventilatore2;
+
+Shifter scheda_8relay;          //!! pinout defined in library
+bool array[16]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 
 int main()
 {
+    setup_griglia();
     while(1) {
-        // Initial image
-        int riga, colonna;
-        unsigned long contatore=0;
-        for (riga=480; riga>0; riga--)  {
-            for ( colonna=0; colonna<480; colonna++)  {
-                lcd.DrawPixel (colonna, 480-riga, _acprova[contatore]);
-                contatore++;
-            }
-            colonna=0;
+//acquisisco la pressione sullo schermo per attivare i vari oggetti
+        ts.ResetTouchData(&TS_State);
+        ts.GetState(&TS_State);
+        X = TS_State.touchX[0];                             //acquisisco la X
+        Y = TS_State.touchY[0];                             //acquisisco la Y
+        /*
+        if (X>=310 && X<360 && Y>=0 && Y<60)        {
+            Lampadina.stato=!Lampadina.stato;
+            array[0]=Lampadina.stato;
+        }
+        if (X>=310 && X<360 && Y>=60 && Y<120)  {
+            Motore.stato=!Motore.stato;
+            array[1]=Motore.stato;
+        }
+        if (X>=310 && X<360 && Y>=120 && Y<180) {
+            Ventilatore1.stato=!Ventilatore1.stato;
+            array[2]=Ventilatore1.stato;
+        }
+        if (X>=310 && X<360 && Y>=180 && Y<240) {
+            Ventilatore2.stato=!Ventilatore2.stato;
+            array[3]=Ventilatore2.stato;
+        }
+        if (X>=360 && X<410 && Y>=0 && Y<60)        {
+            Bloccoporta.stato=!Bloccoporta.stato;
+            array[4]=Bloccoporta.stato;
         }
-        wait(3.0);
+        if (X>=360 && X<410 && Y>=60 && Y<120)  {
+            Girarrosto.stato=!Girarrosto.stato;
+            array[5]=Girarrosto.stato;
+        }
+        if (X>=360 && X<410 && Y>=120 && Y<180) {
+            Resistenza1.stato=!Resistenza1.stato;
+            array[6]=Resistenza1.stato;
+        }
+        if (X>=360 && X<410 && Y>=180 && Y<240) {
+            Resistenza2.stato=!Resistenza2.stato;
+            array[7]=Resistenza2.stato;
+        }
+        */
+        if (X>=20 && X<120 && Y>=20 && Y<80) {      //ROAST
+
+        }
+        if (X>=20 && X<120 && Y>=90 && Y<150) {     //CLEAN
+            clean(10000);
+        }
+        if (X>=20 && X<120 && Y>=160 && Y<220) {    //STOP
+
+        }
+        if (TS_State.touchDetected) wait(0.1);
+        
+        object_update();
+
+        wait(0.1);
     }//close while(1)
 }//close main
+
+void clean(int clean_time)
+{
+    Timer timer;
+    timer.start();
+    int previous_time, actual_time;
+    previous_time = timer.read();
+    Lampadina.stato=1;
+    Resistenza1.stato=1;
+    Resistenza2.stato=1;
+
+    while(1) {
+        actual_time = timer.read();
+        uint8_t text[30];
+        //acquisisco la pressione sullo schermo per attivare i vari oggetti
+        ts.ResetTouchData(&TS_State);
+        ts.GetState(&TS_State);
+        int X = TS_State.touchX[0];                             //acquisisco la X
+        int Y = TS_State.touchY[0];                             //acquisisco la Y
+        if (X>=20 && X<120 && Y>=160 && Y<220) {                //STOP
+            stop();
+            break;
+        }
+        //countdown dal clean_time a zero
+        if (actual_time-previous_time >=1) {
+            lcd.SetFont(&Font24);
+            lcd.SetTextColor(black);
+            sprintf((char*)text, "%5d", clean_time);
+            lcd.DisplayStringAt(130,100, (uint8_t *)&text, LEFT_MODE);
+            previous_time = actual_time;
+            clean_time--;
+        }
+        //se il tempo di clean è finito porto gli output a zero e aggiorno, poi esco dal ciclo
+        if (clean_time<0) {
+            stop();
+            break;
+        }
+        
+        object_update();
+    }
+}
+void stop()
+{   
+    //imposto gli output a zero, poi aggiorno
+    Lampadina.stato=0;
+    Resistenza1.stato=0;
+    Resistenza2.stato=0;
+    
+    object_update();
+}
+void object_update()
+{   //update delle immagini e dello stato delle uscite
+    //disegno lo stato dei vari oggetti
+    Lampadina.draw_image    (&_acLampadina_acceso[0], &_acLampadina_spento[0], Lampadina.stato, 310, 0);
+    Motore.draw_image       (&_acMotore_acceso[0], &_acMotore_spento[0], Motore.stato, 310, 60);
+    Ventilatore1.draw_image (&_acVentilatore1_acceso[0], &_acVentilatore1_spento[0], Ventilatore1.stato, 310, 120);
+    Ventilatore2.draw_image (&_acVentilatore2_acceso[0], &_acVentilatore2_spento[0], Ventilatore2.stato, 310, 180);
+    Bloccoporta.draw_image  (&_acBloccoporta_acceso[0], &_acBloccoporta_spento[0], Bloccoporta.stato, 360, 0);
+    Girarrosto.draw_image   (&_acGirarrosto_acceso[0], &_acGirarrosto_spento[0], Girarrosto.stato, 360, 60);
+    Resistenza1.draw_image  (&_acResistenza1_acceso[0], &_acResistenza1_spento[0], Resistenza1.stato, 360, 120);
+    Resistenza2.draw_image  (&_acResistenza2_acceso[0], &_acResistenza2_spento[0], Resistenza2.stato, 360, 180);
+    //update uscita 74HC595
+    for (int i=0; i<16; i++) scheda_8relay.setPin(i,array[i]);
+    scheda_8relay.write();
+}
\ No newline at end of file