example application with TFT display and SMS receive send

Dependencies:   C027 C027_Support SeeedStudioTFTv2 TFT_fonts UbloxUSBModem mbed

Fork of C027_DisplayTest by Michael Ammann

This is an application that combines several libraries together and demonstartes the use of cellular, GPS and a Touch enabled TFT on the u-blox C027 board. /media/uploads/mazgch/c027_display.jpg

Files at this revision

API Documentation at this revision

Comitter:
amwe
Date:
Mon Mar 17 13:15:51 2014 +0000
Parent:
10:2b1e6015e413
Commit message:
Back to rev 9

Changed in this revision

C12832.lib Show diff for this revision Revisions of this file
SeeedStudioTFTv2.lib Show annotated file Show diff for this revision Revisions of this file
TFT_fonts.lib Show annotated file Show diff for this revision Revisions of this file
UbloxUSBModem.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 2b1e6015e413 -r 5c7f76702799 C12832.lib
--- a/C12832.lib	Mon Mar 17 10:34:37 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://mbed.org/users/chris/code/C12832/#7de323fa46fe
diff -r 2b1e6015e413 -r 5c7f76702799 SeeedStudioTFTv2.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SeeedStudioTFTv2.lib	Mon Mar 17 13:15:51 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mazgch/code/SeeedStudioTFTv2/#f2aaffad7d38
diff -r 2b1e6015e413 -r 5c7f76702799 TFT_fonts.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TFT_fonts.lib	Mon Mar 17 13:15:51 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/dreschpe/code/TFT_fonts/#76774250fcec
diff -r 2b1e6015e413 -r 5c7f76702799 UbloxUSBModem.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UbloxUSBModem.lib	Mon Mar 17 13:15:51 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/UbloxUSBModem/#bc1c98e552ab
diff -r 2b1e6015e413 -r 5c7f76702799 main.cpp
--- a/main.cpp	Mon Mar 17 10:34:37 2014 +0000
+++ b/main.cpp	Mon Mar 17 13:15:51 2014 +0000
@@ -1,42 +1,133 @@
 #include "mbed.h"
-#include "C12832.h"
 #include "C027.h"
 #include "GPS.h"
 #include "SerialPipe.h"
 
-DigitalOut myled(LED);    
-C12832 lcd(D11, D13, D12, D7, D10); // jumper connections
+#include "SeeedStudioTFTv2.h"
+#include "Arial12x12.h"
+#include "Arial24x23.h"
+#include "Arial28x28.h"
+#include "font_big.h"
+
+#include "UbloxModem.h"
+
+void ubxLogo(SPI_TFT_ILI9341* tft, int x0/*160*/, int y0/*160*/, int r)
+{
+    int i1=r/8, i1_5=r*3/16, i2=r*2/8, i3=r*3/8, 
+        i4=r*4/8,  i5=r*5/8, i6=r*6/8, i7=r*7/8;
+    // the ball
+    tft->fillcircle(x0,    y0,        r, Red);
+    // the dot
+    tft->fillcircle(x0-i2, y0-i3,  i1_5, White);
+    // the u
+    tft->fillcircle(x0+i4, y0+i3,    i3, White);
+    tft->fillcircle(x0+i4, y0+i3,    i1, Red);
+    tft->fillrect(  x0+i1, y0-i1, x0+i3, y0+i3, White);
+    tft->fillrect(  x0+i3, y0-i1, x0+i5, y0+i3, Red);
+    tft->fillrect(  x0+i5, y0-i1, x0+i7, y0+i6, White);
+}
+
+#define info(...) \
+    TFT.locate(0,5), \
+    TFT.fillrect(0,0,320,35,White), \
+    TFT.printf(__VA_ARGS__)
 
 int main() 
 {
+    SeeedStudioTFTv2 TFT(A3, A1, A2, A0, 
+                         D11, D12, D13, 
+                         D5/*tft cs*/, D6/*tft dc*/, D7/*backlight*/, 
+                         D4/*sd cs*/);
+    TFT.setBacklight(true);
+    TFT.set_font((unsigned char*) Arial12x12);  // select the font
+    TFT.set_orientation(3);
+    //TFT.calibrate();          // calibrate the touch
+    TFT.background(White);    // set background to black
+    TFT.foreground(Black);    // set chars to white
+    TFT.cls();                // clear the screen
+    ubxLogo(&TFT, 160, 120, 80);
+    TFT.locate(70,220);
+    TFT.printf("u-blox C027-C20/U20/G35");
+
     C027 c027;
-    GPSSerial gps;
+    //c027.mdmUsbEnable(true); // disable this is you plan to use the Serial port on LISA-C
+    c027.mdmPower(true);
     c027.gpsPower(true);
     
-    lcd.locate(0,0);
-    lcd.printf("u-blox C027-C20/U20/G35");
-    lcd.locate(0,11);
-    lcd.printf("Positioning demonstrator");
-    wait(2.5);
-    lcd.cls();
-    lcd.locate(0,0);
-    lcd.printf("C027 Position:");
+    GPSSerial gps;
+    //UbloxUSBModem modem; // LISA-U or LISA-C, don't forget to call the mdmUsbEnable above
+    UbloxSerModem modem;   // LISA-U, LISA-C or SARA-G
+    size_t count;
     
-    char msg[160+1] = "";
-
+    #define MY_IMEI "+41799613242"    
+    info(" Cellular Modem\n IMEI: %s", MY_IMEI);
+    
+    char num[17] = "", msg[160+1] = "";
+    char link[160] = "";
+    clock_t c = clock();
     while(true)
     {
+        clock_t n = clock();
+        if ((n - c) > CLOCKS_PER_SEC) // every 3 seconds
+        {
+            int rssi;
+            LinkMonitor::REGISTRATION_STATE state;
+            LinkMonitor::BEARER bearer;
+            if (!modem.getLinkState(&rssi, &state, &bearer))
+            {
+                 const char* sState[] = 
+                 { "      ", 
+                   "REG.  ", 
+                   "DENIED", 
+                   "NO NET", 
+                   "HOME  ", 
+                   "ROAM  " };
+                 const char* sBearer[] = 
+                 { "         ", 
+                   "GSM 2G   ", 
+                   "EDGE 2.5G", 
+                   "UMTS 3G  ", 
+                   "HSPA 3G+ ", 
+                   "LTE 4G   " };
+                 TFT.locate(0,175);
+                 TFT.printf(" %s\n"
+                            " %s\n"
+                            " %idBm ", sBearer[bearer],sState[state],rssi);
+            }  
+            if((state >= LinkMonitor::REGISTRATION_STATE_HOME_NETWORK) && !modem.getSMCount(&count) && (count > 0))
+            {
+                if(!modem.getSM(num, msg, sizeof(msg)))
+                {
+                    info(" From: %s\n SMS:%s", num, msg);
+                    if (0 == strcmp(msg, "Where are you?") && *link)
+                    {
+                        modem.sendSM(num, link);
+                    }
+                }
+            }
+            c = n;
+        }
+        point p;
+        if (TFT.getPixel(p) && (p.y < 35) && *num)
+        {
+            const char* txt = "Hello from C027 :)";
+            if (OK == modem.sendSM(num, txt))
+            {
+                info(" To: %s\n SMS:%s", num, txt);
+                *num = 0;
+            }
+        }
         int ret;
-        
         while ((ret = gps.getMessage(msg, sizeof(msg))) > 0)
         {
-            
-            printf("%s\n", msg); // for debugging connect PC terminal program 9600 9,1 no flowctrl
             int len = LENGTH(ret);
             if (PROTOCOL(ret) == NMEA && !strncmp("$GPGLL", msg, 6))
             {
                 double la = 0, lo = 0;
                 char cLa = 0, cLo = 0, ch = 0;
+                TFT.fillrect(220,175,320,210,White);
+                TFT.locate(220,175);
+                TFT.printf("      GPS");
                 if (gps.getNmeaItem(1,msg,len,la) && gps.getNmeaItem(2,msg,len,cLa) && 
                     gps.getNmeaItem(3,msg,len,lo) && gps.getNmeaItem(4,msg,len,cLo) && 
                     gps.getNmeaItem(6,msg,len,ch) && ch == 'A')
@@ -48,14 +139,13 @@
                     la = (la - iLa) / 0.6 + iLa;
                     lo = (lo - iLo) / 0.6 + iLo;
                     if (cLa == 'S') la = -la;
-                    if (cLo == 'W') lo = -lo;
+                    if (cLo == 'N') lo = -lo;
                     
-                    lcd.locate(0,11);
-                    lcd.printf("%c", cLa);
-                    lcd.printf(":%10.6f ", la);
-                    lcd.locate(0,22);
-                    lcd.printf("%c", cLo);
-                    lcd.printf(":%10.6f ", lo);
+                    TFT.locate(220,187);
+                    TFT.printf("%11.6f ", la);
+                    TFT.locate(220,199);
+                    TFT.printf("%11.6f ", lo);
+                    sprintf(link, "https://maps.google.com/?q=%.5f,%.5f", la, lo); 
                 }
             }
         }