Linear stabilizer voltage and current on lm358 and transictor. Digital control and indication on stm32f103rbt and tft01-22sp (ili9341). https://www.youtube.com/watch?v=DLC3KEtlr9I https://radiokot.ru/forum/viewtopic.php?f=11&t=112440

Dependencies:   mbed TFT_fonts SPI_TFT_ILI9341 beep _24LCXXX

Revision:
1:7bc0f280c259
Parent:
0:ed1ba99f7b14
Child:
2:d20b1ef35d3f
--- a/main.cpp	Thu Oct 30 20:57:12 2014 +0000
+++ b/main.cpp	Sat Nov 01 13:35:20 2014 +0000
@@ -31,7 +31,7 @@
 //----------------------------------------------------------------------------------------------------------- Ввести в меню опцию коррекции падения напряжения на токоизмерительном шунте.
 int t;        // секунд с момента включения
 int tstart;   // при включении нагрузки равна реальному времени
-time_t treal; // секунды реального времени
+time_t treal; // секунды реального времени для таймера нагрузки
 int h=0;      //вывод часов
 int m=0;     // минут
 int s=0;     // секунд
@@ -47,6 +47,14 @@
 void drawScreen8(void);             // экран 8
 void bootCold(void);                // холодный старт
 void map(void);                     // масштабирование
+void SetDateTime(void);             // установка даты и времени
+int year=2014;
+int mon=11;
+int day=1;
+int hour=16;
+int min=42;
+int sec=0;
+time_t seconds;     //для часов реального времени
 //---------------------------
 float avgAin0();                    // среднее значение с входа A0
 float avgAin1();                    // среднее значение с входа A1
@@ -105,8 +113,9 @@
 int complit=0;              // в начале меню не прорисовано
 int pb=0;                   // для прорисовки кнопки
 int kline=15;                // номер начальной строки в меню калибровки экран 4
-int mline=1;                // номер начальной строки в меню Настройки главная экран 5
+int mline=15;                // номер начальной строки в меню Настройки главная экран 5
 int mline2=0;               //в главном меню строка 2 не выбрана
+int nline=8;               // номер начальной строки в меню установки времени экран 3
 int pmenu=0;                //в главном меню изменение выбраной строки не действительно
 int powerProtect=1; //защита от кз
 int pp=0;           //защита от кз для прорисовки меню
@@ -128,15 +137,15 @@
 {
     powerMosfet = 0;                    // при включении выход выключен
     TFT.claim(stdout);      // send stdout to the TFT display
-    set_time(1414597016);  // Set RTC time to Wed, 28 Oct 2009 11:35:37
+    set_time(1414838392);  // Set RTC time to Wed, 28 Oct 2009 11:35:37
     tstart = treal = time(NULL);
-    pinbrightness.period(0.001);      // задаём частоту Шим подсветки
+    pinbrightness.period(0.001);      // задаём частоту Шим подсветки 0.001 - 1000 герц
     TFT.set_orientation(3);
     TFT.background(Black);
     TFT.cls();
     wait(0.2);
     pinbrightness = brightness;          // включаем подсветку
-    
+
 }
 //------------------------------------------------------------------------------------------------------------
 int main()                                                             //--------- Главная функция ---------//
@@ -313,22 +322,169 @@
     printf("I= %06.1f coeff. k=%0.0d, a=%0.4f \n", Iusb, a5k, a5a);     // A5  I usb
 }
 //------------------------------------------------------------------------------------------------------------
-void drawScreen3(void)                                                                              // экран 3
+void drawScreen3(void)                                                                              // экран 3 установка часов
 {
     if (complit==0) {
-        TFT.background(Black);
-        TFT.foreground(White);
+        TFT.background(back5);
+        TFT.foreground(text5);
         TFT.cls();
         complit = 1;  // прорисовали!
     }
-    TFT.background(Black);
-    TFT.foreground(White);
+    TFT.background(back5);
+    TFT.foreground(text5);
     TFT.set_font((unsigned char*) Lucida13x21);
-    TFT.locate(10, 10);
-    timeConvert();
-    TFT.printf("%02d:%02d:%02d", h, m, s);
-    TFT.locate(10,35);
-    TFT.printf("%d", t);
+    char buffer[32];
+    seconds=time(NULL);
+    strftime(buffer, 32, "%H:%M:%S %d.%m.%Y", localtime(&seconds));
+    TFT.locate (0,0);
+    printf("------- Set Time --------\n");
+    TFT.background(back5_i);
+    TFT.foreground(text5_i);
+    TFT.locate (30,25);
+    printf("%s", buffer);    //вывод реального времени
+    TFT.background(back5);
+    TFT.foreground(text5);
+    TFT.locate (28,86);
+    printf("%02d:%02d:%02d %02d.%02d.%04d",hour, min, sec, day, mon, year); //вывод то что установим
+    //-----------------------------------1
+    if (nline==1) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(28,64);
+        printf("  ");
+    } else {
+        TFT.locate(28,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("  ");
+    }
+    //-----------------------------------2
+    if (nline==2) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(64,64);
+        printf("  ");
+    } else {
+        TFT.locate(64,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("  ");
+    }
+    //-----------------------------------3
+    if (nline==3) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(100,64);
+        printf("  ");
+    } else {
+        TFT.locate(100,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("  ");
+    }
+    //-----------------------------------4
+    if (nline==4) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(135,64);
+        printf("  ");
+    } else {
+        TFT.locate(135,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("  ");
+    }
+    //-----------------------------------5
+    if (nline==5) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(170,64);
+        printf("  ");
+    } else {
+        TFT.locate(170,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("  ");
+    }
+    //-----------------------------------6
+    if (nline==6) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(205,64);
+        printf("     ");
+    } else {
+        TFT.locate(205,64);
+        TFT.background(back5);
+        TFT.foreground(back5);
+        printf("     ");
+    }
+    //-----------------------------------7
+    if (nline==7) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(back5_i);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(30,120);
+        printf("Set!");
+    } else {
+        TFT.locate(30,120);
+        TFT.background(back5);
+        TFT.foreground(text5);
+        printf("Set!");
+    }
+    //-----------------------------------
+    //-----------------------------------7
+    if (nline==8) {
+        if (pmenu==1) {
+            TFT.background(back5_iset);
+            TFT.foreground(text5_i);
+        } else {
+            TFT.background(0xFB2C);
+            TFT.foreground(text5_i);
+        }
+        TFT.locate(30,170);
+        printf("Exit");
+    } else {
+        TFT.locate(30,170);
+        TFT.background(back5);
+        TFT.foreground(text5);
+        printf("Exit");
+    }
+    //-----------------------------------
+
 }
 //------------------------------------------------------------------------------------------------------------
 void drawScreen4(void)                                                                              // экран 4 калибровка
@@ -891,12 +1047,95 @@
     }
 //------------------------------------------------------------------
     if (Screen==3 & one==0) {             //экран 3
-        if (buttonEnter==0) {  // Enter
-            //wait(1);
-            Screen=1;          //1
-            complit=0;
+    if(nline==7 & pmenu==1){
+        wait(0.2);
+        pmenu=0;
+        }
+        if (buttonEnter==0 & pmenu==0) {           // Enter
+            pmenu=1;
+            wait(0.2);
+            if(nline==7){
+                mon=mon-1;
+                SetDateTime();
+                mon=mon+1;
+            }
+            if(nline==8){
+                pmenu=0;
+                Screen=5;
+                complit=0;
+            }
+        }
+        if (buttonUp==0 & pmenu==0) {           // Up
+            nline--;
+            wait(0.2);
+            if (nline==0) nline=8;
+        }
+        if (buttonDown==0 & pmenu==0) {           // Down
+            nline++;
+            wait(0.2);
+            if (nline==9) nline=1;
         }
-        one=1;
+
+        if (pmenu==1) {
+            if (buttonEnter==0) {
+                pmenu=0;
+                wait(0.2);
+            }
+            if (buttonUp==0) {
+                if (nline==1) {
+                    hour++;
+                    wait(0.1);
+                }
+                if (nline==2) {
+                    min++;
+                    wait(0.1);
+                }
+                if (nline==3) {
+                    sec++;
+                    wait(0.1);
+                }
+                if (nline==4) {
+                    day++;
+                    wait(0.1);
+                }
+                if (nline==5) {
+                    mon++;
+                    wait(0.1);
+                }
+                if (nline==6) {
+                    year++;
+                    wait(0.1);
+                }
+            }
+            if (buttonDown==0) {
+                if (nline==1) {
+                    hour--;
+                    wait(0.1);
+                }
+                if (nline==2) {
+                    min--;
+                    wait(0.1);
+                }
+                if (nline==3) {
+                    sec--;
+                    wait(0.1);
+                }
+                if (nline==4) {
+                    day--;
+                    wait(0.1);
+                }
+                if (nline==5) {
+                    mon--;
+                    wait(0.1);
+                }
+                if (nline==6) {
+                    year--;
+                    wait(0.1);
+                }
+            }
+
+            one=1;
+        }
     }
 //------------------------------------------------------------------
     if (Screen==4 & one==0) {              //экран меню Калибровка
@@ -934,7 +1173,7 @@
     if (Screen==5 & one==0) {                  //экран 5 Настройки главная-------------------------------------------------------
         if (buttonEnter==0 & pmenu==0) {           // Enter
             if (mline==1) {
-                Screen=1;
+                Screen=3;
                 complit=0;
             }
             if (mline==2) {
@@ -1072,6 +1311,7 @@
     }
 
 }
+//------------------------------------------------------------------------------------------------------------
 void timeConvert(void)   //показывает час с минуты с секундами начинают идти с часа и одной минуты
 {
     if (powerMosfet==1) treal = time(NULL);
@@ -1080,4 +1320,54 @@
     m= (t-h*3600)/60;
     s= (t-h*3600)-m*60;
     if (t == 359999) tstart=treal;
-}
\ No newline at end of file
+}
+//------------------------------------------------------------------------------------------------------------
+void SetDateTime (void)
+{
+    struct tm Clock;
+    Clock.tm_year = year - 1900;
+    Clock.tm_mon  = mon;
+    Clock.tm_mday = day;
+    Clock.tm_hour = hour;
+    Clock.tm_min  = min;
+    Clock.tm_sec  = sec;
+    time_t epoch = mktime(&Clock);
+    set_time(epoch);
+}
+//------------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+