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
Diff: main.cpp
- Revision:
- 3:791cf9a867d1
- Parent:
- 2:d20b1ef35d3f
- Child:
- 4:776f59129c24
--- a/main.cpp Sat Nov 01 18:20:43 2014 +0000 +++ b/main.cpp Sat Nov 22 18:51:39 2014 +0000 @@ -1,9 +1,10 @@ #include "mbed.h" #include "SPI_TFT_ILI9341.h" -#include "Consolas26x49.h" +//---------------------------------- #include "digi36x44.h" +#include "Consolas26x49.h" +#include "Consolas19x35.h" #include "Courier8x13.h" -#include "Consolas19x35.h" #include "CourierNew13x23.h" #include "Lucida13x21.h" //---------------------------------- @@ -23,11 +24,17 @@ #define text2 0x0000 #define back2 0x9E7F //---------------------------------- +#define colorline 0xECA7 // цвет рамок 0xECA7 - песочный 0x018C - темносиний 0xFFE0 - желтый +#define color_text_on Green // ON текст +#define color_back_on 0x0339 // ON фон +#define color_scale1 0x3320 // шкала U +#define color_scale2 0x9A60 // шкала I +//---------------------------------- SPI_TFT_ILI9341 TFT(D11, D12, D13, D8, D9, D10,"TFT"); // mosi, miso, sclk, cs, reset, dc void grid(void); Timer fps;// FPS //Ticker valueUI; -InterruptIn button(USER_BUTTON); // кнопка питания вкл\выкл +InterruptIn button(A4); // кнопка питания вкл\выкл //----------------------------------------------------------------------------------------------------------- Ввести в меню опцию коррекции падения напряжения на токоизмерительном шунте. int t; // секунд с момента включения int tstart; // при включении нагрузки равна реальному времени @@ -55,82 +62,105 @@ int min=42; int sec=0; time_t seconds; //для часов реального времени +float tempstart=42; // температура старта вентилятора +float tempfull=60; // полной мощности вентилятора tempstart tempfull tempcutoff +float tempcutoff=80; // отключения нагрузки +int umax=31; // U max +float rdown=0.240; // R сопротивление шунта для расчета падения напряжения выхода от зависимости от тока нагрузки +int rdown_on=0; // по умолчанию без падения напряжения на резисторе шунта +char *ron = "On "; // для вывода в меню главных настроек On +char *roff = "Off"; // для вывода в меню главных настроек Off //--------------------------- float avgAin0(); // среднее значение с входа A0 float avgAin1(); // среднее значение с входа A1 float avgAin2(); // среднее значение с входа A2 float avgAin3(); // среднее значение с входа A3 -float avgAin4(); // среднее значение с входа A4 -float avgAin5(); // среднее значение с входа A5 +//float avgAin4(); // среднее значение с входа A4 +//float avgAin5(); // среднее значение с входа A5 //---- float in0 = 0; float in1 = 0; float in2 = 0; float in3 = 0; -float in4 = 0; -float in5 = 0; +//float in4 = 0; +//float in5 = 0; //---- -float Ureal = 0; +float U5 = 0; float Ireal = 0; -float Uset = 0; -float Iset = 0; -float Uusb = 0; -float Iusb = 0; +float U30 = 0; +//float Iset = 0; +//float Uusb = 0; +//float Iusb = 0; //--------------------------- void dataProcessing(void); // обработка и подготовка данных с аналоговых входов void powerButton(void); // при нажатии кнопки питания void buttonUse(void); // обработка нажатий кнопок //----------------------------------------------------------------------------------------------------------- -float a0a = 0.000677; // A0 - U бп - avg при 0 - нижняя точка -float a0k = 33.61; // A0 - U бп - коэффициент - верхняя точка +float a0a = 0.0012; // A0 - U 5 - avg при 0 - нижняя точка U 5 вольт +float a0k = 5.0079; // A0 - U 5 - коэффициент - верхняя точка //--------------------------------------------------------------- -float a1a = 0.0024; // A1 - I бп - avg при 0 - нижняя точка a1a = avgAin1() - 0.00004 -int a1k = 3144; // A1 - I бп - коэффициент - верхняя точка a1k = 2000/(avgAin1() - a1a) при 2амперах +float a1a = 0.1437; // A1 - I бп - avg при 0 - нижняя точка a1a = avgAin1() - 0.00004 +float a1k = 3253; // A1 - I бп - коэффициент - верхняя точка a1k = 2000/(avgAin1() - a1a) при 2амперах //--------------------------------------------------------------- -float a2a = 0.0024; // A2 - U уст - avg при 0 - нижняя точка -float a2k = 4; // A2 - U уст - коэффициент - верхняя точка +float a2a = 0.00005; // A2 - U 30 - avg при 0 - нижняя точка U 33 вольта +float a2k = 32.94623; // A2 - U 30 - коэффициент - верхняя точка //--------------------------------------------------------------- -float a3a = 0.0024; // A3 - I уст - avg при 0 - нижняя точка -float a3k = 4; // A3 - I уст - коэффициент - верхняя точка +//float a3a = 0.0037; // A3 - I уст - avg при 0 - нижняя точка +//float a3k = 1839.1; // A3 - I уст - коэффициент - верхняя точка //--------------------------------------------------------------- -float a4a = 0.0024; // A4 - U usb - avg при 0 - нижняя точка -float a4k = 2.0; // A4 - U usb - коэффициент - верхняя точка +//float a4a = 0.0024; // A4 - U usb - avg при 0 - нижняя точка +//float a4k = 2.0; // A4 - U usb - коэффициент - верхняя точка //--------------------------------------------------------------- -float a5a = 0.0024; // A5 - I usb - avg при 0 - нижняя точка -int a5k = 3144; // A5 - I usb - коэффициент - верхняя точка +//float a5a = 0.0024; // A5 - I usb - avg при 0 - нижняя точка +//int a5k = 3144; // A5 - I usb - коэффициент - верхняя точка //--------------------------------------------------------------- float noisea0; //типа уровень шума (разница между минимум и максимум за 100 измерений) для А0 float noisea1; // - - для A1 float noisea2; // - - для A2 float noisea3; // - - для A3 -float noisea4; // - - для A4 -float noisea5; // - - для A5 +//float noisea4; // - - для A4 +//float noisea5; // - - для A5 //----------------------------------------------------------------------------------------------------------- DigitalIn buttonUp(D3); // Up -DigitalIn buttonDown(D4); // Down -DigitalIn buttonEnter(D5); // Enter +DigitalIn buttonDown(D2); // Down +DigitalIn buttonEnter(A5); // Enter int Screen=1; // по умолчанию грузим первое меню int complit=0; // в начале меню не прорисовано int pb=0; // для прорисовки кнопки int kline=15; // номер начальной строки в меню калибровки экран 4 int mline=15; // номер начальной строки в меню Настройки главная экран 5 int mline2=0; //в главном меню строка 2 не выбрана +int mline4=0; // 4 +int mline5=0; // 5 +int mline6=0; // 6 +int mline7=0; // 7 +int mline8=0; // 8 +int mline11=0; // 11 int nline=8; // номер начальной строки в меню установки времени экран 3 int pmenu=0; //в главном меню изменение выбраной строки не действительно int powerProtect=1; //защита от кз int pp=0; //защита от кз для прорисовки меню -float brightness = 1.0f; //яркость экрана -int cc=0; // значит идет C.V +//int cc=0; // значит идет C.V int pm=0; // для одной прорисовки сс и сv -PwmOut pinbrightness(D15); // выход на ключ регулировки яркости экрана +int cs=0; // короткое замыкание +int csp=0; // для одной прорисовки короткого замыкания +float brightness = 1.0f; //яркость экрана +PwmOut pinbrightness(D6); // выход на ключ регулировки яркости экрана +float fanspeed = 0.0f; +PwmOut fan(D7); // выход вентилятора +int temperature = 25; // текущая температура //----------------------------------------------------------------------------------------------------------- -DigitalOut powerMosfet(D2); // выход управления нагрузкой +DigitalOut powerMosfet(D4); // выход управления нагрузкой +DigitalIn cc(D14); //вход СС 0 - СС, 1 - CV +int ccc=0; +DigitalOut ledcc(PC_6); // светодиод C.C +DigitalOut ledshort(PC_8); // светодиод КЗ AnalogIn ainA0(A0); AnalogIn ainA1(A1); AnalogIn ainA2(A2); AnalogIn ainA3(A3); -AnalogIn ainA4(A4); -AnalogIn ainA5(A5); +//AnalogIn ainA4(A4); +//AnalogIn ainA5(A5); //BusOut unused(A5,A2,A3,A4); //------------------------------------------------------------------------------------------------------------ //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -138,15 +168,19 @@ void bootCold(void) { powerMosfet = 0; // при включении выход выключен + ledcc=0; + ledshort=0; TFT.claim(stdout); // send stdout to the TFT display set_time(1414838392); // Set RTC time to Wed, 28 Oct 2009 11:35:37 tstart = treal = time(NULL); pinbrightness.period(0.001); // задаём частоту Шим подсветки 0.001 - 1000 герц + fan.period(0.01); TFT.set_orientation(3); TFT.background(Black); TFT.cls(); wait(0.2); pinbrightness = brightness; // включаем подсветку + fan = fanspeed; // устанавливаем скорость } //------------------------------------------------------------------------------------------------------------ @@ -176,63 +210,79 @@ void drawScreen1(void) // экран 1 { if (complit==0) { + pm=0; + ccc=0; pb=0; pp=0; TFT.set_orientation(3); TFT.background(Black); TFT.cls(); - TFT.rect(0,0,319,239,0xECA7); //рамка - TFT.rect(10,62,309,76,0xECA7); //аналоговая 1 - TFT.rect(10,137,309,151,0xECA7); //авалоговая 2 + TFT.rect(0,0,319,239,colorline); //рамка + TFT.rect(10,62,309,76,colorline); //аналоговая рамка 1 + TFT.rect(10,137,309,151,colorline); //авалоговая рамка 2 //grid(); //int y = 51; //TFT.line(5,y,310,y, White); TFT.background(Black); - TFT.foreground(0xECA7); // цвет слов - TFT.set_font((unsigned char*) Consolas26x49); + TFT.foreground(colorline); // цвет слов + TFT.set_font((unsigned char*) Consolas26x49); TFT.locate(193, 13); - TFT.printf("v"); // U= - TFT.locate(165, 88); - TFT.printf("ma"); // I= + TFT.printf("v"); // V + TFT.locate(165, 88); + TFT.printf("ma"); // mA complit = 1; // прорисовали! - TFT.fillrect(11,161,104,183,0x09E1); // подвал левый квадрат верхний заливка + TFT.fillrect(7,161,104,183,0x2104); // подвал левый квадрат верхний заливка + TFT.fillrect(7,185,104,207,0x2104); // средний + TFT.fillrect(7,207,104,231,0x2104); // нижний - TFT.rect(10,160,105,232,0xECA7); // левый - TFT.line(11,184,104,184,0xECA7); // левый разделительная линия вверхняя - TFT.line(11,208,104,208,0xECA7); // левый разделительная линия нижняя - TFT.rect(112,160,207,232,0xECA7); //средний рамка и линия - TFT.line(113,195,206,195,0xECA7); - TFT.rect(214,160,309,232,0xECA7); //правый рамка - - TFT.background(0x09E1); - TFT.foreground(White); - TFT.set_font((unsigned char*) Lucida13x21); - - - TFT.locate(11, 209); - TFT.printf(" 42 'C "); + TFT.rect(6,160,105,232,colorline); // левый квадрат + TFT.line(7,184,104,184,colorline); // левый разделительная линия вверхняя + TFT.line(7,208,104,208,colorline); // нижняя + TFT.rect(112,160,207,192,colorline); //средний квадрат верх + TFT.rect(112,198,207,232,colorline); // низ + TFT.rect(214,160,313,232,colorline); //правый квадрат } //----------------------------------------------------------------------------- - if (powerProtect==0 & pp==0) { // защита от кз - TFT.fillrect(113,161,206,194,0x4208); - TFT.background(0x4208); - TFT.foreground(0xA514); + if (powerProtect==0 & pp==0) { // защита от кз + TFT.fillrect(113,161,206,191,Black); //0 + TFT.background(Black); + TFT.foreground(0x4208); TFT.set_font((unsigned char*) Lucida13x21); - TFT.locate(113, 168); + TFT.locate(115, 165); + TFT.printf("Protect"); + pp=1; + } + if (powerProtect==1 & pp==0) { //1 + TFT.fillrect(113,161,206,191,0x0180); + TFT.background(0x0180); + TFT.foreground(Green); + TFT.set_font((unsigned char*) Lucida13x21); + TFT.locate(115, 165); TFT.printf("Protect"); pp=1; } - if (powerProtect==1 & pp==0) { - TFT.fillrect(113,161,206,194,0x0180); - TFT.background(0x0180); - TFT.foreground(Green); + + if (cs==0 & csp==0){ // прорисовка короткого замыкания TFT.rect(112,198,207,232,colorline); + TFT.fillrect(113,199,206,231,Black); //0 + TFT.background(Black); + TFT.foreground(0x4208); TFT.set_font((unsigned char*) Lucida13x21); - TFT.locate(113, 168); - TFT.printf("Protect"); - pp=1; - } + TFT.locate(130, 205); + TFT.printf("SHORT"); + csp=1; + } + if (cs==1 & csp==0){ //1 + TFT.fillrect(113,199,206,231,0x6000); + TFT.background(0x6000); + TFT.foreground(Red); + TFT.set_font((unsigned char*) Lucida13x21); + TFT.locate(130, 205); + TFT.printf("SHORT"); + csp=1; + } + fps.reset(); @@ -240,7 +290,7 @@ TFT.background(Black); - if (cc==1){ //если C.C то меняем цвет значения напряжения + if (cc==0){ //если C.C то меняем цвет значения напряжения TFT.foreground(Red); }else{ TFT.foreground(Green); @@ -248,14 +298,14 @@ TFT.set_font((unsigned char*) digi36x44); TFT.locate(10, 10); - if(Ureal<0) Ureal=0; - if (Ureal<9.995f){ - TFT.fillrect(10,10,46,54,Black); - TFT.locate(46, 10); - TFT.printf("%4.2f", Ureal); // выводим значение с A0 (напряжение) + if(U5<0) U5=0; + if (U5<4.5f){ + //TFT.fillrect(10,10,46,54,Black); + TFT.locate(10, 10); + TFT.printf("%5.3f", U5); // выводим значение с A0 (напряжение) }else{ TFT.locate(10, 10); - TFT.printf("%5.2f", Ureal); // выводим значение с A0 (напряжение) + TFT.printf("%05.2f", U30); // выводим значение с A0 (напряжение) } TFT.pixel(82, 53, Black); @@ -263,60 +313,93 @@ TFT.locate(10, 85); TFT.foreground(Green); - TFT.printf("%04.0f", Ireal); // выводим значение с A1 (ток) + TFT.printf("%04.0f", Ireal); // выводим значение с A1 (ток) - TFT.background(0x2104); // выводим мощность + TFT.background(0x2104); // выводим мощность W TFT.foreground(0xE71C);//текст TFT.set_font((unsigned char*) Lucida13x21); TFT.locate(11, 162); - TFT.printf("%05.2f W", Ureal*Ireal/1000); + TFT.printf("%05.2f W", U5*Ireal/1000); - TFT.background(0x2104); // выводим время включеной нагрузки t.read() + TFT.background(0x2104); // выводим время включеной нагрузки TFT.foreground(0xE71C);//текст TFT.set_font((unsigned char*) Lucida13x21); - TFT.locate(11, 185); + TFT.locate(7, 187); timeConvert(); TFT.printf("%02d:%02d:%02d", h, m, s); - if (powerMosfet==0 & pb==0) { // выводим OFF - TFT.background(0x4208); + if (powerMosfet==0 & pb==0) { // выводим OFF + TFT.background(Black); TFT.foreground(0xA514); - TFT.fillrect(215,161,308,231,0x4208); + TFT.fillrect(215,161,312,231,Black); TFT.set_font((unsigned char*) Consolas26x49); - TFT.locate(226, 174); + TFT.locate(227, 174); TFT.printf("OFF"); pb=1; } - if (powerMosfet==1 & pb==0) { // выводим ON - TFT.background(0x0339); - TFT.foreground(Green); - TFT.fillrect(215,161,308,231,0x0339);//0x0339 0x0180 + if (powerMosfet==1 & pb==0) { // выводим ON + TFT.background(color_back_on); + TFT.foreground(color_text_on); + TFT.fillrect(215,161,312,231,color_back_on); TFT.set_font((unsigned char*) Consolas26x49); - TFT.locate(237, 174); + TFT.locate(238, 174); TFT.printf("ON"); pb=1; } - int xscale1 = map(Ureal, 0, 25, 0, 298); + int xscale1 = map(U5, 0, 32, 0, 298); if (xscale1>297) xscale1=298; - TFT.fillrect(11, 63, (xscale1+10), 75, 0x3320); //0x04C9 // аналоговая шкала Напряжение + TFT.fillrect(11, 63, (xscale1+10), 75, color_scale1); //0x04C9 // аналоговая шкала Напряжение TFT.fillrect((xscale1+12), 63, 308, 75, Black); - int xscale2 = map(Ireal, 0, 2200, 0, 298); + int xscale2 = map(Ireal, 0, 2600, 0, 298); if (xscale2>297) xscale2=298; - TFT.fillrect(11, 138, (xscale2+10), 150, 0x9A60); //0x9A60 // аналоговая шкала Ток - TFT.fillrect((xscale2+12), 138, 308, 150, Black); + TFT.fillrect(11, 138, (xscale2+10), 150, color_scale2); //0x9A60 // аналоговая шкала Ток + TFT.fillrect((xscale2+11), 138, 308, 150, Black); + + //int zxc = int(Iset); + //if (zxc>295) zxc=295; + //if (zxc<0) zxc=0; + //TFT.fillrect(11+zxc,138, 13+zxc, 150, Red); // шкала I set fps.stop(); - TFT.set_font((unsigned char*) Courier8x13); // FPS - TFT.locate(140,205); + TFT.set_font((unsigned char*) Courier8x13); // FPS + TFT.locate(169,81); printf("%0.2f", (1/fps.read())); - if(cc==1 & pm==0){ // c.c + TFT.background(0x2104); + TFT.foreground(White); + TFT.set_font((unsigned char*) Lucida13x21); //выводим t + TFT.locate(11, 211); + TFT.printf(" %d 'C ", temperature); + + /* + if (dinCC==1 & cc_one==1){ + cc=1; + pm=0; + cc_one=0; + } + if (dinCC==0 & cc_one==0){ + cc=0; + pm=0; + cc_one=1; + } + */ + if(cc==1 & ccc==1){ // защелка для отображения сс сv + pm=0; + ccc=0; + } + if(cc==0 & ccc==0){ + pm=0; + ccc=1; + } + + if(cc==0 & pm==0){ // c.c TFT.fillrect(240,10,304,53,Black);//c.v стереть TFT.fillrect(240,85,304,128,0x6000);//c.c + TFT.rect(240,85,304,128,0xC800); TFT.background(0x6000); TFT.foreground(Red); TFT.set_font((unsigned char*) Consolas19x35); @@ -324,9 +407,10 @@ TFT.printf("C.C"); pm=1; } - if(cc==0 & pm==0){ // c.v + if(cc==1 & pm==0){ // c.v TFT.fillrect(240,85,304,128,Black);//c.c стереть - TFT.fillrect(240,10,304,53,0x0180);//c.v + TFT.fillrect(240,10,304,53,0x0180);//c.v + TFT.rect(240,10,304,53,0x04C0); TFT.background(0x0180); TFT.foreground(Green); TFT.set_font((unsigned char*) Consolas19x35); @@ -352,23 +436,23 @@ TFT.set_font((unsigned char*) Courier8x13); TFT.locate(0, 0); printf("--------- Data Analog In --------- \n"); - printf("U.real A0 noise= %0.2f, avg= %0.5f \n", noisea0, in0); - printf("U= %06.4f coeff. k=%0.4f, a=%0.6f \n", Ureal, a0k, a0a); // A0 U real + printf("U.5 A0 noise= %0.2f, avg= %0.5f \n", noisea0, in0); + printf("U= %06.4f coeff. k=%0.5f, a=%0.6f \n", U5, a0k, a0a); // A0 U real printf("---------------------------------- \n"); printf("I.real A1 noise= %0.2f, avg= %0.5f \n", noisea1, in1); - printf("I= %06.2f coeff. k=%0.0d, a=%0.4f \n", Ireal, a1k, a1a); // A1 I real + printf("I= %06.2f coeff. k=%0.5f, a=%0.6f \n", Ireal, a1k, a1a); // A1 I real printf("---------------------------------- \n"); - printf("U.set A2 noise= %0.2f, avg= %0.5f \n", noisea2, in2); - printf("U= %06.3f coeff. k=%0.0f, a=%0.4f \n", Uset, a2k, a2a); // A2 U set + printf("U.30 A2 noise= %0.2f, avg= %0.5f \n", noisea2, in2); + printf("U= %06.3f coeff. k=%0.5f, a=%0.6f \n", U30, a2k, a2a); // A2 U set printf("---------------------------------- \n"); - printf("I.set A3 noise= %0.2f, avg= %0.5f \n", noisea3, in3); - printf("I= %06.1f coeff. k=%0.0f, a=%0.4f \n", Iset, a3k, a3a); // A3 I set - printf("---------------------------------- \n"); - printf("U.usb A4 noise= %0.2f, avg= %0.5f \n", noisea4, in4); - printf("U= %06.3f coeff. k=%0.0f, a=%0.4f \n", Uusb, a4k, a4a); // A4 U usb - printf("---------------------------------- \n"); - printf("I.usb A5 noise= %0.2f, avg= %0.5f \n", noisea5, in5); - printf("I= %06.1f coeff. k=%0.0d, a=%0.4f \n", Iusb, a5k, a5a); // A5 I usb + printf("Temp A3 noise= %0.2f, avg= %0.5f \n", noisea3, in3); + //printf("I= %06.1f coeff. k=%0.0f, a=%0.4f \n", Iset, a3k, a3a); // A3 I set + //printf("---------------------------------- \n"); + //printf("U.usb A4 noise= %0.2f, avg= %0.5f \n", noisea4, in4); + //printf("U= %06.3f coeff. k=%0.0f, a=%0.4f \n", Uusb, a4k, a4a); // A4 U usb + //printf("---------------------------------- \n"); + //printf("I.usb A5 noise= %0.2f, avg= %0.5f \n", noisea5, in5); + //printf("I= %06.1f coeff. k=%0.0d, a=%0.4f \n", Iusb, a5k, a5a); // A5 I usb } //------------------------------------------------------------------------------------------------------------ void drawScreen3(void) // экран 3 установка часов @@ -559,7 +643,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U real = %06.3f set zero \n", Ureal); // U real A0 zero + printf(" U 5v = %06.3f set zero \n", U5); // U real A0 zero //---------------------------------------------------------------- if (kline==2) { TFT.background(back4_i); @@ -568,7 +652,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U real = %06.3f set up dot \n", Ureal); // U real A0 hi + printf(" U 5v = %06.3f set up dot \n", U5); // U real A0 hi //---------------------------------------------------------------- if (kline==3) { TFT.background(back4_i); @@ -577,7 +661,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" I real = %06.1f set zero \n", Ireal); // I real A1 zero + printf(" I real = %06.1f set zero \n", Ireal); // I real A1 zero //---------------------------------------------------------------- if (kline==4) { TFT.background(back4_i); @@ -595,7 +679,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U set = %06.3f set zero \n", Uset); // U set A2 zero + printf(" U 30v = %06.3f set zero \n", U30); // U set A2 zero //---------------------------------------------------------------- if (kline==6) { TFT.background(back4_i); @@ -604,7 +688,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U set = %06.3f set up dot \n", Uset); // U set A2 hi + printf(" U 30v = %06.3f set up dot \n", U30); // U set A2 hi //---------------------------------------------------------------- if (kline==7) { TFT.background(back4_i); @@ -613,7 +697,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" I set = %06.1f set zero \n", Iset); // I set A3 zero + printf("---\n"); // I set A3 zero //---------------------------------------------------------------- if (kline==8) { TFT.background(back4_i); @@ -622,7 +706,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" I set = %06.1f set up dot \n",Iset); // I set A3 hi + printf("---\n"); // I set A3 hi //---------------------------------------------------------------- if (kline==9) { TFT.background(back4_i); @@ -631,7 +715,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U usb = %06.3f set up dot \n", Uusb); // U usb A4 zero + printf("---\n"); // U usb A4 zero //---------------------------------------------------------------- if (kline==10) { TFT.background(back4_i); @@ -640,7 +724,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" U usb = %06.3f set zero \n", Uusb); // U usb A4 hi + printf("---\n"); // U usb A4 hi //---------------------------------------------------------------- if (kline==11) { TFT.background(back4_i); @@ -649,7 +733,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" I usb = %06.1f set up dot \n", Iusb); // I usb A5 zero + printf("---\n"); // I usb A5 zero //---------------------------------------------------------------- if (kline==12) { TFT.background(back4_i); @@ -658,7 +742,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" I usb = %06.1f set up dot \n", Iusb); // I usb A5 hi + printf("---\n"); // I usb A5 hi //---------------------------------------------------------------- if (kline==13) { TFT.background(back4_i); @@ -708,8 +792,8 @@ TFT.foreground(text5); TFT.locate(0, 0); TFT.set_font((unsigned char*) Courier8x13); - printf(" Settings \n"); - printf("--------------------------- \n"); + printf(" Settings \n"); + printf("--------------------------------------- \n"); //---------------------------------------------------------------- if (mline==1) { TFT.background(back5_i); @@ -718,7 +802,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Set Time \n"); // 1 + printf(" Set Time \n"); // 1 //---------------------------------------------------------------- if (mline==2) { if (pmenu==1) { @@ -732,7 +816,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Backlight brightness = %03.0f \n", brightness*100); // 1 + printf(" Backlight brightness = %03.0f \n", fanspeed*100); // 1 //------------------------------------*--------------------------- if (mline==3) { TFT.background(back5_i); @@ -741,52 +825,81 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Sound beep \n"); // 1 + printf(" Sound beep \n"); // 1 //------------------------------------*--------------------------- if (mline==4) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" Screen saver \n"); // 1 + printf(" Fan start - t %02.0f 'c \n", tempstart); // 1 tempstart //------------------------------------*--------------------------- if (mline==5) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" Fan start - t 'c \n"); // 1 + printf(" Fan full speed - t %02.0f 'c \n", tempfull); // 1 tempfull //------------------------------------*--------------------------- if (mline==6) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" Fan full speed - t 'c \n"); // 1 + printf(" Power cut off - t %02.0f 'c \n", tempcutoff); // 1 tempcutoff //------------------------------------*--------------------------- if (mline==7) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" Voltmeter adjustment on R \n"); // 1 + if (rdown_on==1){ + printf(" Voltmeter adjustment on R %s \n", ron); // падение на R вкл выкл + } else { + printf(" Voltmeter adjustment on R %s \n", roff); + } //------------------------------------*--------------------------- if (mline==8) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" Current sense shunt, R om \n"); // 1 + printf(" Current sense shunt, R = %05.3f om\n", rdown); // значения сопротивления шунта //------- -----------------------------*--------------------------- if (mline==9) { TFT.background(back5_i); @@ -795,7 +908,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Calibration I, U \n"); // 1 + printf(" Calibration I, U \n"); // 1 //------------------------------------*--------------------------- if (mline==10) { TFT.background(back5_i); @@ -804,16 +917,21 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Data analog in, noise \n"); // 1 + printf(" Data analog in, noise \n"); // 1 //------------------------------------*--------------------------- if (mline==11) { - TFT.background(back5_i); - TFT.foreground(text5_i); + if (pmenu==1) { + TFT.background(back5_iset); + TFT.foreground(text5_i); + } else { + TFT.background(back5_i); + TFT.foreground(text5_i); + } } else { TFT.background(back5); TFT.foreground(text5); } - printf(" U max \n"); // 1 + printf(" U max & U up dot calibration = %02.0d v\n", umax); // U max and U calibration //------------------------------------*--------------------------- if (mline==12) { TFT.background(back5_i); @@ -822,7 +940,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" 1 \n"); // 1 + printf(" Screen saver \n"); // 1 //------------------------------------*--------------------------- if (mline==13) { TFT.background(back5_i); @@ -831,7 +949,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" 1 \n"); // 1 + printf(" \n"); // 1 //------------------------------------*--------------------------- if (mline==14) { TFT.background(back5_i); @@ -840,7 +958,7 @@ TFT.background(back5); TFT.foreground(text5); } - printf("pmenu=%d, mline2=%d, mline=%d \n", pmenu, mline2, mline); // 1 + printf(" \n"); // 1 //------------------------------------*--------------------------- if (mline==15) { TFT.background(0xFB2C); @@ -849,11 +967,11 @@ TFT.background(back5); TFT.foreground(text5); } - printf(" Exit \n"); + printf(" Exit \n"); //--------------------------------------*------------------------- TFT.background(back5); TFT.foreground(text5); - printf("--------------------------- \n"); + printf("--------------------------------------- \n"); } @@ -861,11 +979,20 @@ void drawScreen6(void) //экран 6 { if (complit==0) { - TFT.background(Blue); - TFT.foreground(Black); + TFT.background(Black); + TFT.foreground(White); TFT.cls(); complit = 1; // прорисовали! } + TFT.set_font((unsigned char*) digi36x44); + TFT.foreground(Green); + TFT.locate(10, 10); + TFT.printf("%06.1f", Ireal); + TFT.locate(10, 85); + TFT.printf("%05.3f", U5); + + TFT.locate(10, 150); + TFT.printf("%d", int(U30)); } @@ -971,7 +1098,7 @@ noisea3 = (max - min)*1000; return itg/100; } -//------------------------------------------------------------------------------------------------------------ +/*/------------------------------------------------------------------------------------------------------------ float avgAin4() // функция среднего значения с входа A4 { float value[100]; @@ -1007,7 +1134,7 @@ noisea5 = (max - min)*1000; return itg/100; } -/*/------------------------------------------------------------------------------------------------------------ +//------------------------------------------------------------------------------------------------------------/ void drawMainScale(void) { a int a = avg*1000; @@ -1039,8 +1166,8 @@ in1 = avgAin1(); in2 = avgAin2(); in3 = avgAin3(); - in4 = avgAin4(); - in5 = avgAin5(); + //in4 = avgAin4(); + //in5 = avgAin5(); // A0 U real U = (avgAin0() - a0a) * a0k // A1 I real I = (avgAin1() - a1a) * a1k @@ -1049,12 +1176,16 @@ // A4 U usb U = (avgAin4() - a4a) * a4k // A5 I usb I = (avgAin5() - a5a) * a5k - Ureal = a0k*(in0-a0a); Ireal = a1k*(in1-a1a); - Uset = a2k*(in2-a2a); - Iset = a3k*(in3-a3a); - Uusb = a4k*(in4-a4a); - Iusb = a5k*(in5-a5a); + U5 = a0k*(in0-a0a); + U30 = a2k*(in2-a2a); + temperature = map(in3, 0.232, 0.188 , 0, 90); + //Iset = a3k*(in3-a3a); + //Uusb = a4k*(in4-a4a); + //Iusb = a5k*(in5-a5a); + + if (cc==1) ledcc=0; + if (cc==0) ledcc=1; /*t.stop();// FPS TFT.background(Black);// FPS @@ -1075,13 +1206,17 @@ complit=0; } if (buttonDown==0) { // Down - Screen=3; // 2 + Screen=6; // 2 complit=0; } if (buttonUp==0) { // Up powerProtect=!powerProtect; - cc=!cc; // для проверки + + //cc=!cc; // для проверки pm=0; // С.C и C.V + cs=!cs; // для проверки + csp=0; // короткого замыкания + pp=0; wait(0.2); } @@ -1191,21 +1326,26 @@ //------------------------------------------------------------------ if (Screen==4 & one==0) { //экран меню Калибровка if (buttonEnter==0) { // Enter set! - if (kline==1) a0a = in0 - 0.0001f; - if (kline==2) a0k = 20/(in0-a0a); - if (kline==3) Screen=5; - if (kline==4) Screen=5; - if (kline==5) Screen=5; - if (kline==6) Screen=5; - if (kline==7) Screen=5; - if (kline==8) Screen=5; - if (kline==9) Screen=5; - if (kline==10) Screen=5; - if (kline==11) Screen=5; - if (kline==12) Screen=5; - if (kline==13) Screen=5; - if (kline==14) Screen=5; - if (kline==15) Screen=5; + + if (kline==1) a0a = in0 - 0.0012f; + if (kline==2) a0k = 1.900f/(in0-a0a); //a0k = umax/(in0-a0a); + + if (kline==3) a1a = in1 - 0.0004f; // a1a = avgAin1() - 0.00004 + if (kline==4) a1k = 200/(in1 - a1a); //a1k = 1000/(avgAin1() - a1a) при 1амперах + + if (kline==5) a2a = in2 - 0.00005f; // U 30v + if (kline==6) a2k = 19.0f/(in2-a2a); // U30v + + + //if (kline==7) a3a = avgAin3() - 0.0004f; //3 + //if (kline==8) a3k = 296/(avgAin3() - a3a); //3 Iset + if (kline==9) Screen=5; //4 + if (kline==10) Screen=5; //4 + //if (kline==11) a5a = avgAin5() - 0.0004f; + //if (kline==12) a5k = 5000/(avgAin5() - a5a); + if (kline==13) Screen=5;// load + if (kline==14) Screen=5; // save + if (kline==15) Screen=5; //exit complit=0; } @@ -1223,34 +1363,80 @@ //------------------------------------------------------------------ if (Screen==5 & one==0) { //экран 5 Настройки главная------------------------------------------------------- if (buttonEnter==0 & pmenu==0) { // Enter + if (mline==1) { Screen=3; complit=0; } + if (mline==2) { mline2=1; pmenu=1; one=1; wait(0.2); } + if (mline==3) Screen=1; - if (mline==4) Screen=1; - if (mline==5) Screen=1; - if (mline==6) Screen=1; - if (mline==7) Screen=1; - if (mline==8) Screen=1; + + if (mline==4) { // вентилятор старт + mline4=1; + pmenu=1; + one=1; + wait(0.2); + } + + if (mline==5) { // вентилятор full + mline5=1; + pmenu=1; + one=1; + wait(0.2); + } + + if (mline==6) { // температура отключения нагрузки + mline6=1; + pmenu=1; + one=1; + wait(0.2); + } + + if (mline==7) { // R падение U вкл выкл + rdown_on=!rdown_on; + mline7=1; + pmenu=1; + one=1; + wait(0.2); + } + + if (mline==8) { // сопротивление R номинал + mline8=1; + pmenu=1; + one=1; + wait(0.2); + } + if (mline==9) { // меню калибровки Screen=4; complit=0; } + if (mline==10) { // меню analog in, noise Screen=2; complit=0; } - if (mline==11) Screen=1; + + if (mline==11) { // U максимальная + mline11=1; + pmenu=1; + one=1; + wait(0.2); + } + if (mline==12) Screen=1; + if (mline==13) Screen=1; + if (mline==14) Screen=1; + if (mline==15) { Screen=1; complit=0; @@ -1270,29 +1456,29 @@ //---------подменю яркость подсветки if (mline2==1) { int i=0; - if (buttonUp==0 & brightness<1) { - if(brightness >= 0.09f & i==0) { - brightness+=0.1f; - pinbrightness=brightness; + if (buttonUp==0 & fanspeed<1) { + if(fanspeed >= 0.09f & i==0) { + fanspeed+=0.1f; + fan=fanspeed; i=1; } - if(brightness < 0.09f & i==0) { - brightness+=0.01f; - pinbrightness=brightness; + if(fanspeed < 0.09f & i==0) { + fanspeed+=0.01f; + fan=fanspeed; i=1; } } - if (buttonDown==0 & brightness>0.01f) { - if(brightness <= 0.1f & i==0) { - brightness-=0.01f; - pinbrightness=brightness; + if (buttonDown==0 & fanspeed>0.01f) { + if(fanspeed <= 0.1f & i==0) { + fanspeed-=0.01f; + fan=fanspeed; i=1; } - if(brightness > 0.1f & i==0) { - brightness-=0.1f; - pinbrightness=brightness; + if(fanspeed > 0.1f & i==0) { + fanspeed-=0.1f; + fan=fanspeed; i=1; } } @@ -1302,13 +1488,97 @@ pmenu=0; } } + //------------------------------------ tempstart + if (mline4==1) { + if (buttonUp==0){ + tempstart++; + wait(0.1); + } + if (buttonDown==0){ + tempstart--; + wait(0.1); + } + if (buttonEnter==0) { + mline4=0; + pmenu=0; + } + } + //------------------------------------ tempfull + if (mline5==1) { + if (buttonUp==0){ + tempfull++; + wait(0.1); + } + if (buttonDown==0){ + tempfull--; + wait(0.1); + } + if (buttonEnter==0) { + mline5=0; + pmenu=0; + } + } + //------------------------------------ tempcutoff + if (mline6==1) { + if (buttonUp==0){ + tempcutoff++; + wait(0.1); + } + if (buttonDown==0){ + tempcutoff--; + wait(0.1); + } + if (buttonEnter==0) { + mline6=0; + pmenu=0; + } + } + //------------------------------------ падение на R вкл выкл + if (mline7==1 & one==0) { + wait(0.1); + mline7=0; + pmenu=0; + } + //------------------------------------ сопротивление резистора + if (mline8==1) { + if (buttonUp==0){ + rdown=rdown+0.001f; + wait(0.1); + } + if (buttonDown==0){ + rdown=rdown-0.001f; + wait(0.1); + } + if (buttonEnter==0) { + mline8=0; + pmenu=0; + } + } + //------------------------------------ U max + if (mline11==1) { + if (buttonUp==0){ + umax++; + wait(0.1); + } + if (buttonDown==0){ + umax--; + wait(0.1); + } + if (buttonEnter==0) { + mline11=0; + pmenu=0; + } + } //------------------------------------ one=1; + //------------------------------------ } //------------------------------------------------------------------ if (Screen==6 & one==0) { //экран 6 if (buttonEnter==0) { // Enter + Screen=1; + complit=0; } if (buttonUp==0) { // Up