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
main_v01.txt
- Committer:
- sinrab
- Date:
- 2019-06-06
- Revision:
- 10:60fa02641552
- Parent:
- 0:ed1ba99f7b14
File content as of revision 10:60fa02641552:
#include "mbed.h" #include "SPI_TFT_ILI9341.h" #include "Consolas26x49.h" #include "digi36x44.h" SPI_TFT_ILI9341 TFT(D11, D12, D13, D8, D9, D10,"TFT"); // mosi, miso, sclk, cs, reset, dc void grid(void); //Ticker valueUI; InterruptIn button(USER_BUTTON); // кнопка питания вкл\выкл //----------------------------------------------------------------------------------------------------------- //----------- my functions ---------// void drawScreenStatic(void); // прорисовка постоянных элементов void drawScreenAction(void); // прорисовка показаний void bootCold(void); // холодный старт void map(void); // масштабирование float avgAin0(); // среднее значение с входа A0 float avgAin1(); // среднее значение с входа A1 void dataProcessing(void); // обработка и подготовка данных с аналоговых входов void powerButton(void); // при нажатии кнопки питания void buttonUse(void); // обработка нажатий кнопок //----------------------------------------------------------------------------------------------------------- float h = 0.0024; // сюда среднее значение при нулевом токе int j = 3144; // сюда коэффициент //----------------------------------------------------------------------------------------------------------- DigitalIn buttonUp(D3); // Up DigitalIn buttonDown(D4); // Down DigitalIn buttonEnter(D5); // Enter int menu=1; // по умолчанию грузим первое меню int complit=0; // в начале меню не прорисовано int pb=0; // для прорисовки кнопки //----------------------------------------------------------------------------------------------------------- DigitalOut powerMosfet(D2); // выход управления нагрузкой AnalogIn ainA0(A0); AnalogIn ainA1(A1); BusOut unused(A5,A2,A3,A4); //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------ int main() //--------- Главная функция ---------// { powerMosfet = 0; // при включении выход выключен bootCold(); // холодный старт button.fall(&powerButton); //valueUI.attach(&drawMenuMainValues, 0.1); while(1) { dataProcessing(); // обработка и подготовка данных с аналоговых входов buttonUse(); // обработка нажатий кнопок drawScreenStatic(); drawScreenAction(); } } //--------- Главная функция ---------// //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------ void drawScreenStatic(void) // отрисовка главного экрана { if (menu==1 & complit==0) { pb=0; TFT.set_orientation(3); TFT.background(Black); TFT.cls(); TFT.rect(0,0,319,239,0xECA7); //рамка TFT.rect(10,62,309,76,0x9000); //аналоговая 1 TFT.rect(10,137,309,151,0x9000); //авалоговая 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.locate(185, 13); TFT.printf("V"); // U= TFT.locate(165, 88); TFT.printf("mA"); // I= complit = 1; // прорисовали! } if (menu==2 & complit==0) { TFT.background(0xECA7); TFT.foreground(Black); TFT.cls(); TFT.rect(1,1,318,238,Red); complit = 1; // прорисовали! } } //------------------------------------------------------------------------------------------------------------ void drawScreenAction(void) // отрисовка главного экрана переменные { if (menu==1) { TFT.background(Black); TFT.foreground(Green); TFT.set_font((unsigned char*) digi36x44); TFT.locate(10, 10); TFT.printf("%0.2f", avgAin0()*25); // выводим значение с A0 (напряжение) TFT.locate(10, 85); TFT.printf("%d", int(avgAin1()*2200)); // выводим значение с A1 (ток) if (powerMosfet==0 & pb==0) { TFT.background(0x09E1); TFT.foreground(Black); TFT.fillrect(225,160,309,231,0x09E1); TFT.set_font((unsigned char*) Consolas26x49); TFT.locate(231, 173); TFT.printf("OFF"); pb=1; } if (powerMosfet==1 & pb==0) { TFT.background(Green); TFT.foreground(Black); TFT.fillrect(225,160,309,231,Green); TFT.set_font((unsigned char*) Consolas26x49); TFT.locate(242, 173); TFT.printf("ON"); pb=1; } } if (menu==2) { TFT.background(Black); TFT.foreground(White); TFT.locate(10, 110); TFT.printf("menu 2"); } } //------------------------------------------------------------------------------------------------------------ void bootCold(void) { TFT.claim(stdout); // send stdout to the TFT display } //------------------------------------------------------------------------------------------------------------ long map(long x, long in_min, long in_max, long out_min, long out_max) // функция масштабирования { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } //------------------------------------------------------------------------------------------------------------ float avgAin0() // функция среднего значения с входа A0 { float value[100]; float max; float min; double itg; max = itg = 0.0; min = 3.3; for (int i=0; i<100; i++) { value[i] = ainA0; if (value[i] > max) max = value[i]; if (value[i] < min) min = value[i]; itg += value[i]; } return itg/100; } //------------------------------------------------------------------------------------------------------------ float avgAin1() // функция среднего значения с входа A1 { float value[100]; float max; float min; double itg; max = itg = 0.0; min = 3.3; for (int i=0; i<100; i++) { value[i] = ainA1; if (value[i] > max) max = value[i]; if (value[i] < min) min = value[i]; itg += value[i]; } return itg/100; } /*/------------------------------------------------------------------------------------------------------------ void drawMainScale(void) { a int a = avg*1000; b = mapIOIO(c, 0, 100, 0, 220); TFT.fillrect(10, 10, (b+10), 20, Red); // аналоговая шкала 1 TFT.fillrect((b+10), 10, 230, 20, Black); } //------------------------------------------------------------------------------------------------------------*/ void powerButton(void) // при нажатии кнопки питания { powerMosfet=!powerMosfet; pb=0; } //------------------------------------------------------------------------------------------------------------ void dataProcessing(void) // обработка и подготовка данных с аналоговых входов { } //------------------------------------------------------------------------------------------------------------ void buttonUse(void) // обработка нажатий кнопок { //---------------------------- int one=0; // для обработки одной кнопки за раз if (menu==1 & one==0) { if (buttonEnter==0) { //wait(1); menu=2; complit=0; } if (buttonDown==0) { menu=3; complit=0; } one=1; } //---------------------------- if (menu==2 & one==0) { if (buttonEnter==0) { //wait(1); menu=1; complit=0; } one=1; } //---------------------------- if (menu==3 & one==0) { if (buttonEnter==0) { //wait(1); menu=1; complit=0; } one=1; } } //------------------------------------------------------------------------------------------------------------ void grid(void) { TFT.cls(); for (int i=0; i<240; i=i+5) { TFT.line(0,i,320,i, White); } for (int i=2; i<240; i=i+5) { TFT.line(4,i,320,i, White); } for (int i=3; i<240; i=i+5) { TFT.line(4,i,320,i, White); } }