Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed TFT_fonts SPI_TFT_ILI9341 beep _24LCXXX
Diff: main_v02.txt
- Revision:
- 0:ed1ba99f7b14
diff -r 000000000000 -r ed1ba99f7b14 main_v02.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main_v02.txt Thu Oct 30 20:57:12 2014 +0000
@@ -0,0 +1,646 @@
+#include "mbed.h"
+#include "SPI_TFT_ILI9341.h"
+#include "Consolas26x49.h"
+#include "digi36x44.h"
+#include "Courier8x13.h"
+#include "Consolas19x35.h"
+#include "CourierNew13x23.h"
+SPI_TFT_ILI9341 TFT(D11, D12, D13, D8, D9, D10,"TFT"); // mosi, miso, sclk, cs, reset, dc
+void grid(void);
+Timer t;// FPS
+//Ticker valueUI;
+InterruptIn button(USER_BUTTON); // кнопка питания вкл\выкл
+//-----------------------------------------------------------------------------------------------------------
+//----------- my functions ---------//
+void drawScreen1(void); // экран 1
+void drawScreen2(void); // экран 2
+void drawScreen3(void); // экран 3
+void drawScreen4(void); // экран 4
+void bootCold(void); // холодный старт
+void map(void); // масштабирование
+//---------------------------
+float avgAin0(); // среднее значение с входа A0
+float avgAin1(); // среднее значение с входа A1
+float avgAin2(); // среднее значение с входа A2
+float avgAin3(); // среднее значение с входа A3
+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 Ureal = 0;
+float Ireal = 0;
+float Uset = 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 a1a = 0.0024; // A1 - I бп - avg при 0 - нижняя точка a1a = avgAin1() - 0.00004
+int a1k = 3144; // A1 - I бп - коэффициент - верхняя точка a1k = 2000/(avgAin1() - a1a) при 2амперах
+//---------------------------------------------------------------
+float a2a = 0.0024; // A2 - U уст - avg при 0 - нижняя точка
+float a2k = 4; // A2 - U уст - коэффициент - верхняя точка
+//---------------------------------------------------------------
+float a3a = 0.0024; // A3 - I уст - avg при 0 - нижняя точка
+float a3k = 4; // A3 - I уст - коэффициент - верхняя точка
+//---------------------------------------------------------------
+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 noisea0; //типа уровень шума (разница между минимум и максимум за 100 измерений) для А0
+float noisea1; // - - для A1
+float noisea2; // - - для A2
+float noisea3; // - - для A3
+float noisea4; // - - для A4
+float noisea5; // - - для A5
+//-----------------------------------------------------------------------------------------------------------
+DigitalIn buttonUp(D3); // Up
+DigitalIn buttonDown(D4); // Down
+DigitalIn buttonEnter(D5); // Enter
+int Screen=1; // по умолчанию грузим первое меню
+int complit=0; // в начале меню не прорисовано
+int pb=0; // для прорисовки кнопки
+int kline=15; // номер начальной строки в меню калибровки экран 4
+//-----------------------------------------------------------------------------------------------------------
+DigitalOut powerMosfet(D2); // выход управления нагрузкой
+AnalogIn ainA0(A0);
+AnalogIn ainA1(A1);
+AnalogIn ainA2(A2);
+AnalogIn ainA3(A3);
+AnalogIn ainA4(A4);
+AnalogIn ainA5(A5);
+//BusOut unused(A5,A2,A3,A4);
+//------------------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------------------
+int main() //--------- Главная функция ---------//
+{
+ powerMosfet = 0; // при включении выход выключен
+ bootCold(); // холодный старт
+ button.fall(&powerButton);
+
+ while(1) {
+ dataProcessing(); // обработка и подготовка данных с аналоговых входов
+ buttonUse(); // обработка нажатий кнопок
+ if (Screen == 1) drawScreen1();
+ if (Screen == 2) drawScreen2();
+ if (Screen == 3) drawScreen3();
+ if (Screen == 4) drawScreen4();
+ }
+} //--------- Главная функция ---------//
+//------------------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------------------
+void drawScreen1(void) // экран 1
+{
+ if (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; // прорисовали!
+
+ TFT.fillrect(230,10,304,53,Green); // c.v c.c
+ TFT.fillrect(230,85,304,128,Green);
+ TFT.background(Green);
+ TFT.foreground(Black);
+ TFT.set_font((unsigned char*) Consolas19x35);
+ TFT.locate(241, 14);
+ TFT.printf("C.V");
+ TFT.locate(241, 89);
+ TFT.printf("C.C");
+
+
+ TFT.rect(10,160,105,232,0xECA7);
+ TFT.fillrect(11,161,104,231,0x09E1);
+ TFT.rect(112,160,207,232,0xECA7);
+ TFT.rect(214,160,309,232,0xECA7);
+ TFT.background(0x09E1);
+ TFT.foreground(White);
+ TFT.set_font((unsigned char*) CourierNew13x23);
+ TFT.locate(11, 161);
+ TFT.printf("10.4 W");
+ TFT.locate(11, 185);
+ TFT.printf("00.42.58");
+ TFT.locate(11, 209);
+ TFT.printf("42 'C");
+
+
+ }
+
+ TFT.background(Black);
+ TFT.foreground(Green);
+ TFT.set_font((unsigned char*) digi36x44);
+ TFT.locate(10, 10);
+ TFT.printf("%05.2f", Ureal); // выводим значение с A0 (напряжение)
+ TFT.locate(10, 85);
+ TFT.printf("%04.0f", Ireal); // выводим значение с A1 (ток)
+
+ if (powerMosfet==0 & pb==0) { // выводим OFF
+ TFT.background(0x09E1);
+ TFT.foreground(Black);
+ TFT.fillrect(215,161,308,231,0x09E1);
+ TFT.set_font((unsigned char*) Consolas26x49);
+ TFT.locate(226, 174);
+ TFT.printf("OFF");
+ pb=1;
+ }
+ if (powerMosfet==1 & pb==0) { // выводим ON
+ TFT.background(Green);
+ TFT.foreground(Black);
+ TFT.fillrect(215,161,308,231,Green);
+ TFT.set_font((unsigned char*) Consolas26x49);
+ TFT.locate(237, 174);
+ TFT.printf("ON");
+ pb=1;
+ }
+
+
+
+}
+//------------------------------------------------------------------------------------------------------------
+void drawScreen2(void) // экран 2
+{
+ if (complit==0) {
+ TFT.background(Blue);
+ TFT.foreground(Black);
+ TFT.cls();
+ complit = 1; // прорисовали!
+ }
+
+ TFT.background(Blue);
+ TFT.foreground(White);
+ 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("---------------------------------- \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("---------------------------------- \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("---------------------------------- \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
+}
+//------------------------------------------------------------------------------------------------------------
+void drawScreen3(void) // экран 3
+{
+ TFT.background(Blue);
+ TFT.foreground(Black);
+ TFT.cls();
+ TFT.locate(0, 0);
+}
+//------------------------------------------------------------------------------------------------------------
+void drawScreen4(void) // экран 4 калибровка
+{
+ if (complit==0) {
+ TFT.background(Black);
+ TFT.foreground(White);
+ TFT.cls();
+ complit = 1; // прорисовали!
+ }
+ //----------------------------------------------------------------
+ TFT.background(Black);
+ TFT.foreground(White);
+ TFT.locate(0, 0);
+ TFT.set_font((unsigned char*) Courier8x13);
+ printf(" Calibration. Enter - set. \n");
+ printf("--------------------------- \n");
+ //----------------------------------------------------------------
+ if (kline==1) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U real = %06.3f set zero \n", Ureal); // U real A0 zero
+ //----------------------------------------------------------------
+ if (kline==2) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U real = %06.3f set up dot \n", Ureal); // U real A0 hi
+ //----------------------------------------------------------------
+ if (kline==3) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I real = %06.1f set zero \n", Ireal); // I real A1 zero
+ //----------------------------------------------------------------
+ if (kline==4) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I real = %06.1f set up dot \n", Ireal); // I real A1 hi
+ //----------------------------------------------------------------
+ if (kline==5) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U set = %06.3f set zero \n", Uset); // U set A2 zero
+ //----------------------------------------------------------------
+ if (kline==6) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U set = %06.3f set up dot \n", Uset); // U set A2 hi
+ //----------------------------------------------------------------
+ if (kline==7) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I set = %06.1f set zero \n", Iset); // I set A3 zero
+ //----------------------------------------------------------------
+ if (kline==8) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I set = %06.1f set up dot \n",Iset); // I set A3 hi
+ //----------------------------------------------------------------
+ if (kline==9) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U usb = %06.3f set up dot \n", Uusb); // U usb A4 zero
+ //----------------------------------------------------------------
+ if (kline==10) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" U usb = %06.3f set zero \n", Uusb); // U usb A4 hi
+ //----------------------------------------------------------------
+ if (kline==11) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I usb = %06.1f set up dot \n", Iusb); // I usb A5 zero
+ //----------------------------------------------------------------
+ if (kline==12) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" I usb = %06.1f set up dot \n", Iusb); // I usb A5 hi
+ //----------------------------------------------------------------
+ if (kline==13) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" Load Default \n");
+ //----------------------------------------------------------------
+ if (kline==14) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" Save all to flash memory \n");
+ //----------------------------------------------------------------
+ if (kline==15) {
+ TFT.background(Green);
+ TFT.foreground(Black);
+ } else {
+ TFT.background(Black);
+ TFT.foreground(White);
+ }
+ printf(" Exit \n");
+ //----------------------------------------------------------------
+ TFT.background(Black);
+ TFT.foreground(White);
+ printf("--------------------------- \n");
+
+
+}
+//------------------------------------------------------------------------------------------------------------
+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
+{
+ int m = 100;
+ float value[m];
+ float max;
+ float min;
+ double itg;
+ max = itg = 0.0;
+ min = 3.3;
+ for (int i=0; i<m; i++) {
+ value[i] = ainA0;
+ if (value[i] > max) max = value[i];
+ if (value[i] < min) min = value[i];
+ itg += value[i];
+ }
+ noisea0 = (max - min)*1000;
+ return itg/m;
+}
+//------------------------------------------------------------------------------------------------------------
+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];
+ }
+ noisea1 = (max - min)*1000;
+ return itg/100;
+}
+//------------------------------------------------------------------------------------------------------------
+float avgAin2() // функция среднего значения с входа A2
+{
+ 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] = ainA2;
+ if (value[i] > max) max = value[i];
+ if (value[i] < min) min = value[i];
+ itg += value[i];
+ }
+ noisea2 = (max - min)*1000;
+ return itg/100;
+}
+//------------------------------------------------------------------------------------------------------------
+float avgAin3() // функция среднего значения с входа A3
+{
+ 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] = ainA3;
+ if (value[i] > max) max = value[i];
+ if (value[i] < min) min = value[i];
+ itg += value[i];
+ }
+ noisea3 = (max - min)*1000;
+ return itg/100;
+}
+//------------------------------------------------------------------------------------------------------------
+float avgAin4() // функция среднего значения с входа A4
+{
+ 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] = ainA4;
+ if (value[i] > max) max = value[i];
+ if (value[i] < min) min = value[i];
+ itg += value[i];
+ }
+ noisea4 = (max - min)*1000;
+ return itg/100;
+}
+//------------------------------------------------------------------------------------------------------------
+float avgAin5() // функция среднего значения с входа A5
+{
+ 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] = ainA5;
+ if (value[i] > max) max = value[i];
+ if (value[i] < min) min = value[i];
+ itg += value[i];
+ }
+ noisea5 = (max - min)*1000;
+ 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) // обработка и подготовка данных с аналоговых входов
+{
+ /*t.reset();// FPS
+ t.start();// FPS*/
+
+ in0 = avgAin0();
+ in1 = avgAin1();
+ in2 = avgAin2();
+ in3 = avgAin3();
+ in4 = avgAin4();
+ in5 = avgAin5();
+
+// A0 U real U = (avgAin0() - a0a) * a0k
+// A1 I real I = (avgAin1() - a1a) * a1k
+// A2 U set U = (avgAin2() - a2a) * a2k
+// A3 I set I = (avgAin3() - a3a) * a3k
+// 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);
+
+ /*t.stop();// FPS
+ TFT.background(Black);// FPS
+ TFT.foreground(Green);// FPS
+ TFT.set_font((unsigned char*) Courier8x13);// FPS
+ TFT.locate(260,225);// FPS
+ TFT.printf("%0.2f", (1/t.read()));// FPS*/
+}
+//------------------------------------------------------------------------------------------------------------
+void buttonUse(void) // обработка нажатий кнопок
+{
+ int one=0; // для обработки одной кнопки за раз
+//------------------------------------------------------------------
+ if (Screen==1 & one==0) { //главный экран
+ if (buttonEnter==0) { // Enter
+ //wait(1);
+ Screen=2;
+ complit=0;
+ }
+ if (buttonDown==0) { // Down
+ Screen=4;
+ complit=0;
+ }
+ if (buttonUp==0) { // Up
+ Screen=3;
+ complit=0;
+ }
+ one=1;
+ }
+//------------------------------------------------------------------
+ if (Screen==2 & one==0) {
+ if (buttonEnter==0) { // Enter
+ //wait(1);
+ Screen=1;
+ complit=0;
+ }
+ one=1;
+ }
+//------------------------------------------------------------------
+ if (Screen==3 & one==0) { //экран меню общие настройки
+ if (buttonEnter==0) { // Enter
+ //wait(1);
+ Screen=1;
+ complit=0;
+ }
+ one=1;
+ }
+//------------------------------------------------------------------
+ if (Screen==4 & one==0) { //экран меню Калибровка
+ if (buttonEnter==0) { // Enter
+ if (kline==1) a0a = in0 - 0.0001;
+ if (kline==2) a0k = 20/(in0-a0a);
+ if (kline==3) Screen=1;
+ if (kline==4) Screen=1;
+ if (kline==5) Screen=1;
+ if (kline==6) Screen=1;
+ if (kline==7) Screen=1;
+ if (kline==8) Screen=1;
+ if (kline==9) Screen=1;
+ if (kline==10) Screen=1;
+ if (kline==11) Screen=1;
+ if (kline==12) Screen=1;
+ if (kline==13) Screen=1;
+ if (kline==14) Screen=1;
+ if (kline==15) Screen=1;
+ complit=0;
+ }
+
+ if (buttonUp==0) { // Up
+ kline--;
+ if (kline==0) kline=15;
+
+ }
+
+ if (buttonDown==0) { // Down
+ kline++;
+ if (kline==16) kline=1;
+
+ }
+ 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);
+ }
+
+}
\ No newline at end of file