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: ADE7758_v1 Crypto DHT11 MQTT MbedJSONValueEmma SDFileSystem TFT_ILI9341 SWSPI SetRTC TFT_fonts Touch W5500Interface mbed-rtos mbed-src SoftSerial
Fork of emma_controller_energy by
Diff: emmaCode.cpp
- Revision:
- 12:96f637ed37f9
- Parent:
- 11:2311b2d5157d
- Child:
- 13:e8adfe305dbc
diff -r 2311b2d5157d -r 96f637ed37f9 emmaCode.cpp
--- a/emmaCode.cpp Mon Jul 13 13:29:25 2015 +0000
+++ b/emmaCode.cpp Tue Jul 14 03:03:22 2015 +0000
@@ -23,6 +23,12 @@
//init ade7758 - without cs pin
ADE7758 ADE(PB_6, PB_4, PB_5, PB_2); //mosi, miso, sck, irq
+//init tft lcd
+SPI_TFT_ILI9341 TFT(PA_7, PA_6, PA_5, PA_4, PC_5, PC_4,"TFT"); //mosi, miso, sclk, cs, reset, dc
+//init touch screen - without cs pin
+TouchScreenADS7843 TP(PB_10, PB_0, PB_1, PB_2, &TFT); //mosi, miso, sclk, irq, tft
+//InterruptIn tpIRQ(PB_2);
+
//emma settings
string emmaUID;
string hmac;
@@ -50,6 +56,16 @@
REST restObj[NODES_MAX] = {REST(&esp),REST(&esp),REST(&esp),REST(&esp),REST(&esp)};
NODES nodes[NODES_MAX] = {NODES(&restObj[0]),NODES(&restObj[1]),NODES(&restObj[2]),NODES(&restObj[3]),NODES(&restObj[4])};
+//mode box class for main menu
+class modeBox {
+public:
+ int xTL; //TopLeft
+ int yTL;
+ int xBR; //BottomRight
+ int yBR;
+ string text;
+};
+
//ade7758 variables
uint16_t AWattHrValue, BWattHrValue, CWattHrValue;
uint16_t AVAHrValue, BVAHrValue, CVAHrValue;
@@ -74,10 +90,157 @@
string globalCommand;
string rxBuf;
-void emmaInit(void) {
+/*start lcd and touch*/
+int emmaModeSelection(void) {
+ bool modeSelected = false;
+ int md=0;
+ int TPx;
+ int TPy;
+
+ //disable sd card and enable tft lcd
+ //sd._cs = 1;
+ //TFT._cs = 0;
+
+ TFT.background(Black);
+ TFT.foreground(White);
+
+ TFT.set_font((unsigned char*) Arial12x12);
+ TFT.set_orientation(1);
+ TFT.cls();
+ TFT.locate(0,0);
+ TFT.printf("Hello, I'm Emma!");
+ wait(3);
+ TFT.cls();
+
+ Matrix matrix;
+ Coordinate ScreenSample[3];
+
+ matrix.An = 580;
+ matrix.Bn = 75980;
+ matrix.Cn = -3410580;
+ matrix.Dn = 57855;
+ matrix.En = -2465;
+ matrix.Fn = -3483515;
+ matrix.Divider = 209144;
+
+ ScreenSample[0].x = 230;
+ ScreenSample[0].y = 167;
+ ScreenSample[1].x = 754;
+ ScreenSample[1].y = 163;
+ ScreenSample[2].x = 771;
+ ScreenSample[2].y = 562;
+
+ TP.SetCalibration(&matrix, &ScreenSample[0]);
+
+ TFT.locate(0,0);
+ TFT.printf(" X:");
+ TFT.locate(70,0);
+ TFT.printf(" Y:");
+
+ //draw border
+ TFT.line(15,15,310,15,Orange);
+ TFT.line(310,15,310,250,Orange);
+ TFT.line(310,250,15,250,Orange);
+ TFT.line(15,250,15,15,Orange);
+
+ //init main menu
+ modeBox menu[6];
+
+ //wifi config mode
+ menu[MODE_WIFI_CONFIG].xTL = 25;
+ menu[MODE_WIFI_CONFIG].yTL = 25;
+ menu[MODE_WIFI_CONFIG].xBR = 110;
+ menu[MODE_WIFI_CONFIG].yBR = 90;
+ menu[MODE_WIFI_CONFIG].text = "wifi config";
+
+ //setting mode
+ menu[MODE_SETTINGS].xTL = 120;
+ menu[MODE_SETTINGS].yTL = 25;
+ menu[MODE_SETTINGS].xBR = 205;
+ menu[MODE_SETTINGS].yBR = 90;
+ menu[MODE_SETTINGS].text = "settings";
+
+ //register mode
+ menu[MODE_REGISTER].xTL = 25;
+ menu[MODE_REGISTER].yTL = 100;
+ menu[MODE_REGISTER].xBR = 110;
+ menu[MODE_REGISTER].yBR = 165;
+ menu[MODE_REGISTER].text = "register";
+
+ //operational mode
+ menu[MODE_OPERATION].xTL = 120;
+ menu[MODE_OPERATION].yTL = 100;
+ menu[MODE_OPERATION].xBR = 205;
+ menu[MODE_OPERATION].yBR = 165;
+ menu[MODE_OPERATION].text = "operation";
+
+ //firmware download mode
+ menu[MODE_FIRMWARE_DOWNLOAD].xTL = 215;
+ menu[MODE_FIRMWARE_DOWNLOAD].yTL = 25;
+ menu[MODE_FIRMWARE_DOWNLOAD].xBR = 300;
+ menu[MODE_FIRMWARE_DOWNLOAD].yBR = 90;
+ menu[MODE_FIRMWARE_DOWNLOAD].text = "firmware download";
+
+ //reserved mode
+ menu[5].xTL = 215;
+ menu[5].yTL = 100;
+ menu[5].xBR = 300;
+ menu[5].yBR = 165;
+ menu[5].text = "reserved";
+
+ for(int i=0; i<6; i++) {
+ TFT.fillrect(menu[i].xTL,menu[i].yTL,menu[i].xBR,menu[i].yBR,Orange);
+ }
+
+ while(!modeSelected) {
+ if(!TP._tp_irq) {
+ if(TP.Read_Ads7843()) {
+ TP.getDisplayPoint();
+ TPx = TP.display.x;
+ TPy = TP.display.y;
+ TP.TP_DrawPoint(TPx,TPy, Blue);
+ TFT.locate(25,0);
+ TFT.printf("%03d",TPx);
+ TFT.locate(95,0);
+ TFT.printf("%03d",TPy);
+
+ for(int i=0; i<6; i++) {
+ if((menu[i].xTL < TPx && TPx < menu[i].xBR) && (menu[i].yTL < TPy && TPy < menu[i].yBR)) {
+ //TFT.locate(25,170);
+ //TFT.printf(" ");
+ //TFT.locate(25,170);
+ //TFT.printf("mode: %s is selected",menu[i].text.c_str());
+ //wait(3);
+ md = i;
+ modeSelected = true;
+ }
+ }
+ }
+ }
+ }
+
+ TFT.locate(25,170);
+ TFT.printf(" ");
+ TFT.locate(25,170);
+ TFT.printf("out-mode: %s is selected",menu[md].text.c_str());
+ wait(3);
+ TFT.cls();
+
+ //enable sd card and disable tft lcd
+ //TFT._cs = 1;
+ //sd._cs = 0;
+ //wait(2);
+
+ return md;
+}
+/*end lcd and touch*/
+
+/*start emma mode*/
+void emmaInit(int mode) {
char s[64];
DBG.baud(19200);
DBG.printf("\r\nemmaInit\r\n");
+ DBG.printf("mode:%d\r\n",mode);
//read settings
//readSetting("emmaUID"); //sd card need to be read once before working correctly
@@ -1228,6 +1391,7 @@
}
DBG.printf("download finished\r\n");
}
+/*end emma mode*/
/*start energy related*/
void energyThread(void const*) {
