1st Fork

Dependencies:   mbed QEI DmTftLibrary

Files at this revision

API Documentation at this revision

Comitter:
lex9296
Date:
Tue Feb 15 07:22:09 2022 +0000
Parent:
26:bfca0c471a87
Commit message:
Release "Stabile"

Changed in this revision

Display/DisplayDriver.cpp Show annotated file Show diff for this revision Revisions of this file
Display/DisplayDriver.h Show annotated file Show diff for this revision Revisions of this file
Display/Menu.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Display/DisplayDriver.cpp	Thu Feb 10 13:46:17 2022 +0000
+++ b/Display/DisplayDriver.cpp	Tue Feb 15 07:22:09 2022 +0000
@@ -19,7 +19,6 @@
 #include "DmTouch.h"
 #include "DmTouchCalibration.h"
 
-
 //If DISPLAY_INVERT is defined as 1 then the display will be inverted from its native orientation
 #define DISPLAY_INVERT      1
 
@@ -44,7 +43,6 @@
 MenuSettings_t MenuSettings;
 char GoTmpString[MAX_GO_STRING];
 
-
 static int BmpWidth;
 static int BmpHeight;
 static uint8_t BmpImageoffset;
@@ -55,20 +53,19 @@
 static void DrawBmpFromFlash( uint8_t *thisBmp, int x, int y );
 
 
-void DisplayDriverInit( void )
-{
-    Tft.init( );
-    Touch.init( );
+void    DisplayDriverInit   (void) {
+    Tft.init();
+    Touch.init();
 
-    DisplayDriverCalibrate( );
-    Tft.clearScreen( );
+    DisplayDriverCalibrate();
+    Tft.clearScreen();
 
-    for( uint8_t i = 0; i < MAX_GO_STRING; i++) GoTmpString[i] = SPACE_ASCII;
+    for (uint8_t i = 0; i < MAX_GO_STRING; i++)
+        GoTmpString[i] = SPACE_ASCII;
 }
 
 // Calibrates the touch screen
-void DisplayDriverCalibrate( void )
-{
+void    DisplayDriverCalibrate  (void) {
     uint16_t x, y = 0;
     bool touched = false;
 
@@ -103,8 +100,7 @@
             Tft.clearScreen( );
             Tft.drawString( 5, 5, "Calibration failed" );
             Tft.drawString( 5, 25, "Please try again." );
-//            delay( 2000 );
-            wait(2000);
+            delay( 2000 );
 
             Tft.clearScreen( );
             return;
@@ -480,3 +476,50 @@
     }
 }
 
+void    LCM_ClearScreen (uint16_t color) {
+    Tft.clearScreen (color);
+}
+
+void    LCM_DrawString  (uint16_t x, uint16_t y, const char *p) {
+    Tft.drawString  (x, y, (char *)p);
+}
+
+void    LCM_SetTextColor    (uint16_t background, uint16_t foreground) {
+    Tft.setTextColor    (background, foreground);
+}
+
+// LA:  Color RGB Component(s)
+//      ======================
+//
+//  RED     0000 1000 0000 0000     min     0x0800  02048
+//          1111 1000 0000 0000     max     0xf800  63488
+//
+//  GREEN   0000 0000 0010 0000     min     0x0020  00032   Real
+//          0000 0111 1110 0000     max     0x07e0  02016
+//
+//  GREEN   0000 0000 0100 0000     min     0x0040  00064   This
+//          0000 0111 1100 0000     max     0x07c0  01984
+//
+//  BLUE    0000 0000 0000 0001     min     0x0001  00001
+//          0000 0000 0001 1111     max     0x001f  00031
+//
+//  La componente ROSSA ha  5 bit di escursione (0.. 31),
+//  La componente VERDE ha  6 bit di escursione (0.. 63),   Normalmente
+//  La componente VERDE ha  5 bit di escursione (0.. 31),   In qst applicazione
+//  La componente BLU ha    5 bit di escursione (0.. 31),
+//
+//  Le componenti RGB di "Color" sono quindi scritte negli appropriati registri come segue:
+//
+//  writeReg(RED,   (Color & 0xf800) >> 11);
+//  writeReg(GREEN, (Color & 0x07e0) >> 5);
+//  writeReg(BLUE,  (Color & 0x001f));
+//
+uint16_t    Scale2RGBColor   (uint16_t R, uint16_t G, uint16_t B) {
+
+    R = ((R& 0x1f)<< 11)& 0xf800;
+    G = ((G& 0x1f)<< 6)& 0x07c0;
+    B &=    0x001f;
+    //
+    return  (R+ G+ B);
+}
+
--- a/Display/DisplayDriver.h	Thu Feb 10 13:46:17 2022 +0000
+++ b/Display/DisplayDriver.h	Tue Feb 15 07:22:09 2022 +0000
@@ -15,10 +15,8 @@
 #ifndef TFT_DISPLAY_DRIVER_H
 #define TFT_DISPLAY_DRIVER_H
 
-
 #include "DmTftBase.h"
 
-
 #define SCREEN_WIDTH                240
 #define SCREEN_HEIGHT               320
     
@@ -135,5 +133,15 @@
  */
 void DisplayDriverDrawLogo( uint8_t *thisBmp, uint8_t xPos, uint8_t yPos );
 
+// LA:  Addon(s)
+//      ========
+//
+
+void    LCM_ClearScreen (uint16_t color);
+void    LCM_DrawString  (uint16_t x, uint16_t y, const char *p);
+void    LCM_SetTextColor    (uint16_t background, uint16_t foreground);
+//
+uint16_t    Scale2RGBColor   (uint16_t R, uint16_t G, uint16_t B);
+
 #endif //TFT_DISPLAY_DRIVER_H
 
--- a/Display/Menu.cpp	Thu Feb 10 13:46:17 2022 +0000
+++ b/Display/Menu.cpp	Tue Feb 15 07:22:09 2022 +0000
@@ -1,7 +1,6 @@
 
 #include <stdio.h>
 #include "mbed.h"
-//#include "QEI.h"
 
 #include "Menu.h"
 #include "DisplayDriver.h"
@@ -21,26 +20,6 @@
  */
 extern uint8_t SemtechLogo[];
 
-/*!
- * \brief This ticker give the rythme to check X and Y coordinates of activated
- * touched region (if pressed). CheckScreenFlag keep the status if Touchscreen
- * has been checked or not, until checked.
- */
-//Ticker CheckScreenTouch;
-volatile bool CheckScreenFlag = false;
-
-/*!
- * \brief This ticker give the rythme to refresh a page when continuous info
- * has to be printed in the same page.
- */
-//Ticker CheckPageRefresh;
-volatile bool PageRefresh = false;
-
-/*!
- * \brief This ticker give the rythme to avoid quick menu change
- */
-//Ticker DebouncedScreenTouch;
-volatile bool ScreenBeenDebounced = false;
 
 /*!
  * \brief List og graphical object in the application.
@@ -241,8 +220,9 @@
 
 void MenuInit( void )
 {
-    DisplayDriverInit( );
-    GraphObjectDraw( &( MenuObjects[PAGE_BORDER] ), NULL, false, false );
+    DisplayDriverInit   ();
+//    GraphObjectDraw( &( MenuObjects[PAGE_BORDER] ), NULL, false, false );
+
 //    GraphObjectDraw( &( MenuObjects[TITLE_LINE] ), NULL, false, false );
 //    MenuSetPage( START_PAGE );
 
--- a/main.cpp	Thu Feb 10 13:46:17 2022 +0000
+++ b/main.cpp	Tue Feb 15 07:22:09 2022 +0000
@@ -4,7 +4,6 @@
 #define MBED_RAM_SIZE 0x00018000
 #endif
 
-//#include "mbed.h"
 #include "QEI.h"
 #include "SWPos.h"
 
@@ -14,6 +13,17 @@
 //#include "main.h"
 //#include "app_config.h"
 
+#define MAX_CHAR_PER_LINE   28
+#define TEXT_ROW_SPACING    16
+#define FONT_CHAR_WIDTH 8
+#define FONT_CHAR_HEIGHT    16
+
+//#include "mbed.h"
+#include "DisplayDriver.h"
+//#include "DmTftIli9341.h"
+//#include "DmTouch.h"
+//#include "DmTouchCalibration.h"
+
 // LA:  Theory of Operation
 //      ===================
 //
@@ -98,7 +108,13 @@
         FactoryReset();
     }
 
-    MenuInit();                                             // LA:  Inizializza il Display
+    DisplayDriverInit();
+//    LCM_SetTextColor(BLUE, BLACK);
+//    LCM_SetTextColor(GRAY1, BLACK);
+//    LCM_SetTextColor(GRAY2, WHITE);
+    LCM_SetTextColor(BLACK, WHITE);
+
+//    MenuInit();                                             // LA:  Inizializza il Display
 //    LCD_RefreshViews.attach_us  (&LCD____tScan, 250000);    //      Scansione LCD @100ms
 
     // LA:  Motion (1st) Setup
@@ -145,39 +161,238 @@
 
     PWM_PB3.period_us(100);         // LA:  TimeBase is 100us
 
+  #define RED     0xf800            //  1111 1000 0000 0000
+  #define GREEN   0x07e0            //  0000 0111 1110 0000
+  #define BLUE    0x001f            //  0000 0000 0001 1111
+  #define BLACK   0x0000            //  0000 0000 0000 0000
+  #define YELLOW  0xffe0            //  1111 1111 1110 0000
+  #define WHITE   0xffff            //  1111 1111 1111 1111
+
+  #define CYAN        0x07ff        //  0000 0111 1111 1111
+  #define BRIGHT_RED  0xf810        //  1111 1000 0001 0000
+  #define GRAY1       0x8410        //  1000 0100 0001 0000
+  #define GRAY2       0x4208        //  0100 0010 0000 1000
+
+// LA:  Color RGB Component(s)
+//      ======================
+//
+//  RED     0000 1000 0000 0000     min     0x0800  02048
+//          1111 1000 0000 0000     max     0xf800  63488
+//
+//  GREEN   0000 0000 0010 0000     min     0x0020  00032
+//          0000 0111 1110 0000     max     0x07e0  02016
+//
+//  BLUE    0000 0000 0000 0001     min     0x0001  00001
+//          0000 0000 0001 1111     max     0x001f  00031
+//
+//  La componente ROSSA ha  5 bit di escursione (0.. 31),
+//  La componente VERDE ha  6 bit di escursione (0.. 63),
+//  La componente BLU ha    5 bit di escursione (0.. 31),
+//
+//  Le componenti RGB di "Color" sono quindi scritte negli appropriati registri come segue:
+//
+//  writeReg(RED,   (Color & 0xf800) >> 11);
+//  writeReg(GREEN, (Color & 0x07e0) >> 5);
+//  writeReg(BLUE,  (Color & 0x001f));
+//
+
+//    LCM_ClearScreen (GRAY1);
+//    LCM_ClearScreen (BLACK);
+//    LCM_ClearScreen (GRAY2);
+
+    char StringText[MAX_CHAR_PER_LINE + 1];  // don't forget the /0 (end of string)
+//    char StringText2[MAX_CHAR_PER_LINE + 1];
+//    char StringText3[MAX_CHAR_PER_LINE + 1];
+
+    uint16_t    ui16_TestColor = 0x0000;
+    uint16_t    ui16_TestStep = 0x0000;
+    //
+    uint16_t    ui16_R = 0x00;
+    uint16_t    ui16_G = 0x00;
+    uint16_t    ui16_B = 0x00;
+
+    while   (ui16_TestStep < 32) {
+
+        ui16_TestColor =    Scale2RGBColor  (ui16_R, ui16_G, ui16_B);
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %04x %04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+        sprintf (StringText,
+                "R:%02x G:%02x B:%02x ", ui16_R, ui16_G, ui16_B);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 5), StringText);
+//        delay (500);
+
+        ui16_R++;
+        ui16_G++;
+        ui16_B++;
+//        ui16_TestColor +=   0x0841;
+        ui16_TestStep ++;
+    }
+    delay (2500);
+
+/*
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0001;
+        ui16_TestStep ++;
+    }
+
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0040;
+        ui16_TestStep ++;
+    }
+
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0800;
+        ui16_TestStep ++;
+    }
+
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0041;
+        ui16_TestStep ++;
+    }
+
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0840;
+        ui16_TestStep ++;
+    }
+
+    ui16_TestColor = 0x0000;
+    ui16_TestStep = 0x0000;
+    while   (ui16_TestStep < 32) {
+
+        LCM_ClearScreen (ui16_TestColor);
+        LCM_SetTextColor(ui16_TestColor, (0xffff- ui16_TestColor));
+        sprintf (StringText,
+                "Color: %#04x %#04x ", ui16_TestColor, ui16_TestStep);
+        LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), StringText);
+
+//      ui16_TestColor +=   0x0841;
+        ui16_TestColor +=   0x0801;
+        ui16_TestStep ++;
+    }
+
+    delay (5000);
+*/
+/*
+    LCM_ClearScreen (0x07e0);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x07e0");
+    delay (1000);
+    LCM_ClearScreen (0x07c0);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x07c0");
+    delay (1000);
+    LCM_ClearScreen (0x07e0);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x07e0");
+    delay (1000);
+    LCM_ClearScreen (0x07c0);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x07c0");
+    delay (1000);
+
+    LCM_ClearScreen (0x0000);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0000");
+    delay (1000);
+    LCM_ClearScreen (0x0020);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0020");
+    delay (1000);
+    LCM_ClearScreen (0x0040);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0040");
+    delay (1000);
+    LCM_ClearScreen (0x0020);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0020");
+    delay (1000);
+    LCM_ClearScreen (0x0040);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0040");
+    delay (1000);
+    LCM_ClearScreen (0x0000);
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 4), "0x0000");
+    delay (1000);
+
+*/
+    ui16_TestColor =    Scale2RGBColor  (ui16_R, ui16_G, ui16_B);
+    LCM_SetTextColor    (
+                        Scale2RGBColor  (0, 0, 0),
+                        Scale2RGBColor  (31, 31, 31)
+                        );
+    LCM_DrawString  (0, 0+(TEXT_ROW_SPACING* 0), "You Start Me Up ...");
+
     while   (1) {
-        int32_t i32_Pulses;
+    static int32_t  Pulses_Prec;
+    static uint32_t ms_0003_prec;
+    int32_t i32_Pulses;
+
         i32_Pulses =    Stabilus322699.getPulses();
 
         PosizionatoreSW (in_PosizionatoreSW, out_PosizionatoreSW);
         PWM_PB3.pulsewidth_us(((float)i32_Pulses/ (float)5000.0)* (float)100.0);      //      0.. 100us ->   0.. 100%
 
         // LA:  Wedge 4 LCDRefresh
-        StabilusMenu (0, 0, out_PosizionatoreSW.ui32_PassedActual_ms, i32_Pulses);
+        if  (
+                (i32_Pulses !=  Pulses_Prec)
+            ) {
+            sprintf (StringText,
+                    "Pulses: %d     ", i32_Pulses);
+            LCM_SetTextColor    (Scale2RGBColor  (0, 0, 31), Scale2RGBColor  (31, 31, 0));
+            LCM_DrawString  (0, 0+ (TEXT_ROW_SPACING* 1), StringText);
+        }
+
+        if  (out_PosizionatoreSW.ui32_PassedActual_ms != ms_0003_prec) {
+            sprintf (StringText,
+                    "PassedActual_ms: %d     ", out_PosizionatoreSW.ui32_PassedActual_ms);
+            LCM_SetTextColor    (Scale2RGBColor  (0, 31, 0), Scale2RGBColor  (31, 0, 31));
+            LCM_DrawString  (0, 0+ (TEXT_ROW_SPACING* 2), StringText);
+            ms_0003_prec = out_PosizionatoreSW.ui32_PassedActual_ms;
+        }
+//        StabilusMenu (0, 0, out_PosizionatoreSW.ui32_PassedActual_ms, i32_Pulses);
     }
 }
-
-
-/*
-bool    PWM_0000    (uint32_t   ui32_Duty_x100) {
-static uint32_t ui32_PWM_Base;
-
-    if  (ui32_PWM_Base >= 100)
-        ui32_PWM_Base = 0;
-    else
-        ui32_PWM_Base ++;
-
-    if  (
-            (ui32_Duty_x100 > 0) &&
-            (ui32_Duty_x100 <= 100) &&
-            (ui32_PWM_Base <= ui32_Duty_x100)
-        )
-        return  (true);
-    else
-        return  (false);
-}
-
-void    PWM____tScan (void) {
-    PWM =   PWM_0000 (50);
-}
-*/