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: BMP180 BNO055_fusion Fonts GPSISR HTU21D SDFileSystem UniGraphic mbed uGUI
Fork of Bicycl_Computer_NUCLEO-F411RE by
Revision 15:b174ec6e3ca0, committed 2017-04-12
- Comitter:
- trevieze
- Date:
- Wed Apr 12 20:30:06 2017 +0000
- Parent:
- 14:4f0ebc5a4f00
- Child:
- 16:e81bd672196b
- Commit message:
- Added burst mode to spi 8 bit driver. Increased SPI speed to 20 mhz. added uGUI to project. Scaled touch driver.
Changed in this revision
--- a/BNO055_Adafruit.lib Fri Mar 03 02:56:25 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/trevieze/code/BNO055_Adafruit/#59ad1c98647c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BNO055_fusion.lib Wed Apr 12 20:30:06 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kenjiArai/code/BNO055_fusion/#9e6fead1e93e
--- a/SeeedStudioTFTv2.cpp Fri Mar 03 02:56:25 2017 +0000
+++ b/SeeedStudioTFTv2.cpp Wed Apr 12 20:30:06 2017 +0000
@@ -48,17 +48,17 @@
void TouchScreen :: getTouch(point& p)
{
- int y2 = readTouch(_xp,_xm,_yp,_ym);
- int x2 = readTouch(_yp,_ym,_xp,_xm);
- int y1 = readTouch(_xp,_xm,_yp,_ym);
- int x1 = readTouch(_yp,_ym,_xp,_xm);
+ volatile int y2 = readTouch(_xp,_xm,_yp,_ym);
+ volatile int x2 = readTouch(_yp,_ym,_xp,_xm);
+ volatile int y1 = readTouch(_xp,_xm,_yp,_ym);
+ volatile int x1 = readTouch(_yp,_ym,_xp,_xm);
int xd = x1 - x2;
int yd = y1 - y2;
xd = (xd > 0) ? xd : -xd;
yd = (yd > 0) ? xd : -xd;
- p.x = x1 + x2;
- p.y = y1 + y2;
-
+ p.y = x1 + x2;
+ p.x = y1 + y2;
+
int z1 = _xm;
int z2 = _yp;
float rtouch = 0;
@@ -66,8 +66,15 @@
rtouch = z2;
rtouch /= z1;
rtouch -= 1;
- rtouch *= (2046-p.x)/2;
+ rtouch *= (4094-p.x)/2;
rtouch *= RXPLATE;
- rtouch /= 1024;
- p.z = abs(rtouch);
- }
\ No newline at end of file
+ rtouch /= 2048;
+ p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
+ p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
+ p.z = abs(rtouch);
+ }
+
+ long TouchScreen :: 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;
+}
--- a/SeeedStudioTFTv2.h Fri Mar 03 02:56:25 2017 +0000
+++ b/SeeedStudioTFTv2.h Wed Apr 12 20:30:06 2017 +0000
@@ -19,6 +19,17 @@
#define __PRESURE 1000
#define RXPLATE 300
+//Measured ADC values for (0,0) and (210-1,320-1)
+//TS_MINX corresponds to ADC value when X = 0
+//TS_MINY corresponds to ADC value when Y = 0
+//TS_MAXX corresponds to ADC value when X = 240 -1
+//TS_MAXY corresponds to ADC value when Y = 320 -1
+
+#define TS_MINX 10500 //116*2
+#define TS_MAXX 116252 //890*2
+#define TS_MINY 12500 //83*2
+#define TS_MAXY 116044 //913*2
+
struct point {
int x;
int y;
@@ -39,7 +50,8 @@
* based on my SPI_TFT lib
*/
TouchScreen(PinName xp, PinName xm, PinName yp, PinName ym);
-void getTouch(point& p);
+ void getTouch(point& p);
+ long map(long x, long in_min, long in_max, long out_min, long out_max);
protected:
PinName _xm;
PinName _ym;
@@ -49,7 +61,6 @@
typedef enum { YES, MAYBE, NO } TOUCH;
int readTouch(PinName p, PinName m, PinName a, PinName i);
-
int x_off,y_off;
int pp_tx,pp_ty;
};
--- a/UniGraphic.lib Fri Mar 03 02:56:25 2017 +0000 +++ b/UniGraphic.lib Wed Apr 12 20:30:06 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/GraphicsDisplay/code/UniGraphic/#1bdfb971b2c1 +https://developer.mbed.org/users/trevieze/code/UniGraphic/#e3b3181a57e2
--- a/main.cpp Fri Mar 03 02:56:25 2017 +0000
+++ b/main.cpp Wed Apr 12 20:30:06 2017 +0000
@@ -22,6 +22,10 @@
#include "mbed.h"
#include <math.h>
#include "ILI9341.h"
+//#include "TFT.h"
+// Graphics GUI Library
+#include "ugui.h"
+
#include "SeeedStudioTFTv2.h"
#include "BNO055.h"
#include "HTU21D.h"
@@ -63,6 +67,12 @@
#define PIN_TX_GPS PA_11 //GPS Shield TX pin
#define PI 3.14159265358979f
+BNO055_ID_INF_TypeDef bno055_id_inf;
+BNO055_EULER_TypeDef euler_angles;
+BNO055_QUATERNION_TypeDef quaternion;
+BNO055_LIN_ACC_TypeDef linear_acc;
+BNO055_GRAVITY_TypeDef gravity;
+BNO055_TEMPERATURE_TypeDef chip_temp;
#define DEVICE_NAME "F411RE"
@@ -74,10 +84,22 @@
// DigitalOut tsc_cs(PA_9, 1) ;
// DigitalOut tft_cs(PB_6, 1) ;
+/** Height of display using default orientation */
+#define ILI9341_DEFAULT_HEIGHT 240
+
+/** Width of display using default orientation */
+#define ILI9341_DEFAULT_WIDTH 320
+
+/** Height of display using swapped X/Y orientation */
+#define ILI9341_SWITCH_XY_HEIGHT 320
+
+/** Width of display using swapped X/Y orientation */
+#define ILI9341_SWITCH_XY_WIDTH 240
+
Serial pc(USBTX, USBRX);
// Display
-ILI9341 TFT(SPI_8, 10000000,
+ILI9341 TFT(SPI_8, 20000000,
PIN_MOSI_SPI1, PIN_MISO_SPI1, PIN_SCLK_SPI1,
PIN_CS_SPI1, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
@@ -85,8 +107,7 @@
TouchScreen TSC(PIN_XP, PIN_XM, PIN_YP, PIN_YM);
// 3 Axis IMU
-BNO055 imu(I2C_SDA, I2C_SCL); // New Library Adafruit
-
+BNO055 imu(I2C_SDA, I2C_SCL, PIN_RESET); // Reset =D7, addr = BNO055_G_CHIP_ADDR, mode = MODE_NDOF <- as default
// Humidity and Temperature
HTU21D humid(I2C_SDA, I2C_SCL);
@@ -106,6 +127,11 @@
void Draw_Compass_Rose(void);
void arrow(int x2, int y2, int x1, int y1, int alength, int awidth, int colour);
+void ili9341_pset(UG_S16 ul_x,UG_S16 ul_y, UG_COLOR ul_color);
+void window_1_callback( UG_MESSAGE* msg );
+void window_2_callback( UG_MESSAGE* msg );
+void window_3_callback( UG_MESSAGE* msg );
+void cb1(void);
const int centreX = 120;
const int centreY = 150;
@@ -113,131 +139,252 @@
float last_dx;
float last_dy;
+int pageid = 1;
+bool pageinit = 0;
+#define PAGE1 1
+#define PAGE2 2
+#define PAGE3 3
+
+UG_GUI gui;
+
+//Ticker to1;
+
int main()
{
+ //to1.attach(&cb1, 2.0);
TFT.BusEnable(true) ;
TFT.FastWindow(true) ;
wait(0.1);
TFT.cls();
wait(0.1);
+
+ UG_Init(&gui,ili9341_pset,ILI9341_DEFAULT_HEIGHT,ILI9341_DEFAULT_WIDTH);
+
Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info?
const int refresh_Time = 2000; //refresh time in ms
refresh_Timer.start(); //starts the clock on the timer
//backlight = 0 ;
- TFT.set_font((unsigned char*) Arial24x23i);
- TFT.fillrect(2, 2, 237, 317, White);
- TFT.foreground(Blue);
- TFT.background(White);
wait(0.1);
-
- Draw_Compass_Rose();
-
+
+ // Draw_Compass_Rose();
+ /* Window 1 Bike Computer */
+ #define MAX_OBJECTS 10
+ UG_WINDOW window_1 ; /* Window */
+ UG_BUTTON button_1; /* Button container */
+ UG_BUTTON button_2; /* Button container */
+ UG_OBJECT obj_buff_wnd_1 [MAX_OBJECTS] ; /* Object buffer */
+ UG_WindowCreate ( &window_1 , obj_buff_wnd_1 , MAX_OBJECTS, window_1_callback);
+ UG_WindowSetTitleTextFont ( &window_1 , &FONT_8X8 ) ;
+ UG_WindowSetTitleText ( &window_1 , "Bike Computer" ) ;
+ UG_WindowSetBackColor( &window_1 , C_GRAY ) ;
+ UG_ButtonCreate (&window_1, &button_1, BTN_ID_0, 10 , 230 , 115 , 290 );
+ UG_ButtonCreate (&window_1, &button_2, BTN_ID_1, 125 , 230 , 225 , 290 );
+ UG_ButtonSetBackColor (&window_1 ,BTN_ID_0 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_1 ,BTN_ID_0 , C_WHITE ) ;
+ UG_ButtonSetBackColor (&window_1 ,BTN_ID_1 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_1 ,BTN_ID_1 , C_WHITE ) ;
+ UG_ButtonSetFont (&window_1 , BTN_ID_0 , &FONT_8X8) ;
+ UG_ButtonSetFont (&window_1 , BTN_ID_1 , &FONT_8X8) ;
+ UG_ButtonSetText (&window_1 , BTN_ID_0 , "Prev" );
+ UG_ButtonSetText (&window_1 , BTN_ID_1 , "Next" );
+
+ /* Window 2 e-Compass */
+ UG_WINDOW window_2 ; /* Window */
+ UG_BUTTON button_3; /* Button container */
+ UG_BUTTON button_4; /* Button container */
+ UG_OBJECT obj_buff_wnd_2 [MAX_OBJECTS] ; /* Object buffer */
+ UG_WindowCreate ( &window_2 , obj_buff_wnd_2 , MAX_OBJECTS, window_2_callback);
+ UG_WindowSetTitleTextFont ( &window_2 , &FONT_8X8 ) ;
+ UG_WindowSetTitleText ( &window_2 , "e-Compass" ) ;
+ UG_WindowSetBackColor( &window_2 , C_GRAY ) ;
+ UG_ButtonCreate (&window_2, &button_3, BTN_ID_2, 10 , 230 , 115 , 290 );
+ UG_ButtonCreate (&window_2, &button_4, BTN_ID_3, 125 , 230 , 225 , 290 );
+ UG_ButtonSetBackColor (&window_2 ,BTN_ID_2 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_2 ,BTN_ID_2 , C_WHITE ) ;
+ UG_ButtonSetBackColor (&window_2 ,BTN_ID_3 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_2 ,BTN_ID_3 , C_WHITE ) ;
+ UG_ButtonSetFont (&window_2 , BTN_ID_2 , &FONT_8X8) ;
+ UG_ButtonSetFont (&window_2 , BTN_ID_3 , &FONT_8X8) ;
+ UG_ButtonSetText (&window_2 , BTN_ID_2 , "Prev" );
+ UG_ButtonSetText (&window_2 , BTN_ID_3 , "Next" );
+
+ /* Window 3 GSP */
+ UG_WINDOW window_3 ; /* Window */
+ UG_BUTTON button_5; /* Button container */
+ UG_BUTTON button_6; /* Button container */
+ UG_OBJECT obj_buff_wnd_3 [MAX_OBJECTS] ; /* Object buffer */
+ UG_WindowCreate ( &window_3 , obj_buff_wnd_3 , MAX_OBJECTS, window_3_callback);
+ UG_WindowSetTitleTextFont ( &window_3 , &FONT_8X8 ) ;
+ UG_WindowSetTitleText ( &window_3 , "GPS Waypoints" ) ;
+ UG_WindowSetBackColor( &window_3 , C_GRAY ) ;
+ UG_ButtonCreate (&window_3, &button_5, BTN_ID_4, 10 , 230 , 115 , 290 );
+ UG_ButtonCreate (&window_3, &button_6, BTN_ID_5, 125 , 230 , 225 , 290 );
+ UG_ButtonSetBackColor (&window_3 ,BTN_ID_4 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_3 ,BTN_ID_4 , C_WHITE ) ;
+ UG_ButtonSetBackColor (&window_3 ,BTN_ID_5 , C_BLUE ) ;
+ UG_ButtonSetForeColor (&window_3 ,BTN_ID_5 , C_WHITE ) ;
+ UG_ButtonSetFont (&window_3 , BTN_ID_4 , &FONT_8X8) ;
+ UG_ButtonSetFont (&window_3 , BTN_ID_5 , &FONT_8X8) ;
+ UG_ButtonSetText (&window_3 , BTN_ID_4 , "Prev" );
+ UG_ButtonSetText (&window_3 , BTN_ID_5 , "Next" );
+
+ /* Finally , show the window */
+ //UG_WindowShow(&window_1) ;
+ //UG_WindowHide(&window_2);
+ //UG_WindowHide(&window_3);
+
+ //UG_Update();
+
while (1) {
+
+ cb1();
- TFT.set_font((unsigned char*) ArialR20x20);
- //check if we recieved a new message from GPS, if so, attempt to parse it,
+ TFT.set_font((unsigned char*) ArialR20x20);
+ TFT.foreground(White);
+ TFT.background(UG_WindowGetBackColor(&window_1));
+ //check if we recieved a new message from GPS, if so, attempt to parse it,
if (refresh_Timer.read_ms() >= refresh_Time) {
refresh_Timer.reset();
-
- if (bmp180.init() != 0) {
- //pc.printf("Error communicating with BMP180\n");
- } else {
- //pc.printf("Initialized BMP180\n");
- bmp180.startTemperature();
- wait(0.1); // Wait for conversion to complete
- float temp;
- if(bmp180.getTemperature(&temp) != 0) {
- //pc.printf("Error getting temperature\n");
- }
- //pc.printf("Temperature is : %f", temp);
- TFT.locate(4, 26) ;
- TFT.printf("%.1fF", ((temp* 9.0) / 5.0 + 32));
- }
- int ftemp = humid.sample_ftemp();
- int humidity = humid.sample_humid();
- TFT.locate(140, 26) ;
- TFT.printf("%d%%RH",humidity);
- //pc.printf("HTU21D Temp: %d",ftemp);
- //pc.printf("HTU21D Humidity: %d",humidity);
-
- if (imu.check() == 0){
- pc.printf("Bosch BNO055 is NOT avirable!!\r\n");
- } else {
- //printf("Cal %d", imu.read_calib_status());
- imu.get_calib();
- if (imu.cal.system > 0x0){
- TFT.foreground(White);
- TFT.locate(4, 260) ;
- TFT.printf("No Data");
- TFT.foreground(Blue);
- imu.get_angles();
- TFT.locate(4, 260) ;
- TFT.printf("%.1f",imu.euler.yaw);
- //pc.printf("H %.1f",euler_angles.h);
- //pc.printf("R %.1f",euler_angles.r);
- //pc.printf("P %.1f",euler_angles.p);
+
+ switch ( pageid )
+ {
+ case PAGE1:
+ {
+ if (!pageinit) {
+ UG_WindowHide(&window_2);
+ UG_WindowHide(&window_3);
+ UG_WindowShow(&window_1);
+ UG_Update();
+ }
+ pageinit = 1;
+ if (bmp180.init() != 0) {
+ //pc.printf("Error communicating with BMP180\n");
+ } else {
+ //pc.printf("Initialized BMP180\n");
+ bmp180.startTemperature();
+ wait(0.1); // Wait for conversion to complete
+ float temp;
+ if(bmp180.getTemperature(&temp) != 0) {
+ //pc.printf("Error getting temperature\n");
+ }
+ TFT.locate(10, 50) ;
+ TFT.printf("%.1fF", ((temp* 9.0) / 5.0 + 32));
+ }
+ int ftemp = humid.sample_ftemp();
+ int humidity = humid.sample_humid();
+ TFT.locate(10, 72) ;
+ TFT.printf("%d%%RH",humidity);
+ if (MyGPS.dataready()) {
+ MyGPS.read();
+ TFT.locate(10, 26) ;
+ TFT.foreground(UG_WindowGetBackColor(&window_1));
+ TFT.printf("No GPS Data");
+ TFT.foreground(White);
+ TFT.locate(10, 26) ;
+ TFT.printf("%d:%d:%d", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
+ TFT.locate(100, 26) ;
+ TFT.printf("%d-%d-%d", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
+ TFT.set_font((unsigned char*) SCProSB31x55);
+ TFT.locate(130, 180) ;
+ TFT.printf("%.1f", MyGPS.buffer.speed);
+ TFT.locate(10, 180) ;
+ TFT.printf("%.1f", MyGPS.buffer.speed); //Cadence
+ TFT.set_font((unsigned char*) ArialR20x20);
+ //TFT.locate(10, 50) ;
+ //double waypoint = nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon)/double(1609.344);
+ //TFT.printf("%.1fMI From Perry", waypoint);
+ }
+ else {
+ TFT.locate(10, 26) ;
+ TFT.printf("No GPS Data");
+ //pc.printf("NMEA has no valid data");
+ }
+ break;
+ }
+ case PAGE2:
+ {
+ if (!pageinit) {
+ UG_WindowHide(&window_1);
+ UG_WindowHide(&window_3);
+ UG_WindowShow(&window_2);
+ UG_Update();
+ }
+ pageinit = 1;
+ break;
+ }
+ case PAGE3:
+ {
+ if (!pageinit) {
+ UG_WindowHide(&window_1);
+ UG_WindowHide(&window_2);
+ UG_WindowShow(&window_3);
+ UG_Update();
+ }
+ pageinit = 1;
+ break;
+ }
+ }
+ }
+ /*
+ TFT.locate(140, 260) ;
+ TFT.printf("%.1fft", MyGPS.buffer.altitude/0.3048);
+ TFT.locate(4, 280) ;
+ int degree;
+ int minutes;
+ int seconds;
+ degree = (int)abs(MyGPS.buffer.longitude);
+ minutes = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree) * 60.0);
+ seconds = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
+ TFT.printf("%d %d' %d\" %c lon", degree, minutes,seconds, MyGPS.buffer.lonc);
+ TFT.locate(4, 300) ;
+ TFT.locate(4, 300) ;
+ degree = (int)abs(MyGPS.buffer.latitude);
+ minutes = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree) * 60.0);
+ seconds = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
+ TFT.printf("%d %d' %d\" %c lat", degree, minutes,seconds, MyGPS.buffer.latc);
+
+
+
+ //pc.printf("Dist to Perry %.4f ", nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon));
+
+
+ }
+
+
+ if (imu.chip_ready() == 0){
+ pc.printf("Bosch BNO055 is NOT avirable!!\r\n");
+ } else {
- } else {
- TFT.locate(4, 260) ;
- TFT.printf("No Data");
- }
- }
-
- float angle = int(imu.euler.yaw); // * 180/PI); // Convert radians to degrees for more a more usual result
- // For the screen -X = up and +X = down and -Y = left and +Y = right, so does not follow coordinate conventions
- float dx = (0.7*radius * cos((angle-90)*PI/180)) + centreX; // calculate X position for the screen coordinates - can be confusing!
- float dy = (0.7*radius * sin((angle-90)*PI/180)) + centreY; // calculate Y position for the screen coordinates - can be confusing!
+ if (imu.read_calib_status() > 0x0){
+ TFT.foreground(White);
+ TFT.locate(4, 260) ;
+ TFT.printf("No Data");
+ TFT.foreground(Blue);
+ imu.get_Euler_Angles(&euler_angles);
+ TFT.locate(4, 260) ;
+ TFT.printf("%.1f @ %.1f",euler_angles.h, euler_angles.p);
+ //pc.printf("H %d",(int)euler_angles.h);
+ //pc.printf("R %.1f",euler_angles.r);
+ //pc.printf("P %.1f",euler_angles.p);
+
+ } else {
+ TFT.locate(4, 260) ;
+ TFT.printf("No Data");
+ }
+ }
+
+ float angle = euler_angles.h; // Convert radians to degrees for more a more usual result
+ // For the screen -X = up and +X = down and -Y = left and +Y = right, so does not follow coordinate conventions
+ float dx = (radius * cos((angle-90)*PI/180)) + centreX; // calculate X position for the screen coordinates - can be confusing!
+ float dy = (radius * sin((angle-90)*PI/180)) + centreY; // calculate Y position for the screen coordinates - can be confusing!
arrow(last_dx,last_dy, centreX, centreY, 2,2,White); // Erase last arrow
arrow(dx,dy, centreX, centreY, 2, 2,Blue); // Draw arrow in new position
last_dx = dx;
last_dy = dy;
-
- if (MyGPS.dataready()) {
- MyGPS.read();
- //pc.printf("NMEA has valid data");
- //pc.printf("Sats : %d \n", MyGPS.buffer.satellites);
- //pc.printf("%d-%d-%d\n", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
- //pc.printf("%d:%d:%d\n", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
-
- TFT.foreground(White);
- TFT.locate(4, 2) ;
- TFT.printf("No Data");
- TFT.foreground(Blue);
- TFT.locate(4, 2) ;
- TFT.printf("%d-%d-%d", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
- TFT.locate(4, 50) ;
- double waypoint = nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon)/double(1609.344);
- TFT.printf("%.1fMI From Perry", waypoint);
- TFT.locate(140, 2) ;
- TFT.printf("%d:%d:%d", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
- TFT.locate(140, 260) ;
- TFT.printf("%.1fft", MyGPS.buffer.altitude/0.3048);
- TFT.locate(4, 280) ;
- int degree;
- int minutes;
- int seconds;
- degree = (int)abs(MyGPS.buffer.longitude);
- minutes = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree) * 60.0);
- seconds = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
- TFT.printf("%d %d' %d\" %c lon", degree, minutes,seconds, MyGPS.buffer.lonc);
- TFT.locate(4, 300) ;
- degree = (int)abs(MyGPS.buffer.latitude);
- minutes = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree) * 60.0);
- seconds = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
- TFT.printf("%d %d' %d\" %c lat", degree, minutes,seconds, MyGPS.buffer.latc);
- TFT.set_font((unsigned char*) SCProSB31x55);
- TFT.locate(120, 200) ;
- TFT.printf("%.1f", MyGPS.buffer.speed);
-
- //pc.printf("Dist to Perry %.4f ", nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon));
-
- }
- else {
- TFT.locate(4, 2) ;
- TFT.printf("No Data");
- //pc.printf("NMEA has no valid data");
- }
- }
+
+
+ }
+ */
}
}
@@ -294,4 +441,116 @@
TFT.printf("E");
TFT.locate((centreX-23),(centreY-3));
TFT.printf("W");
-}
\ No newline at end of file
+}
+
+void ili9341_pset(UG_S16 ul_x,UG_S16 ul_y, UG_COLOR ul_color)
+{
+ TFT.pixel(ul_x, ul_y, ul_color);
+}
+
+void window_1_callback( UG_MESSAGE* msg )
+{
+ if ( msg->type == MSG_TYPE_OBJECT )
+ {
+ if ( msg->id == OBJ_TYPE_BUTTON )
+ {
+ switch ( msg->sub_id )
+ {
+ case BTN_ID_0:
+ {
+ pageid--;
+ if (pageid < 1) {
+ pageid = 3;
+ }
+ pageinit = 0;
+ break;
+ }
+ case BTN_ID_1:
+ {
+ pageid++;
+ if (pageid > 3) {
+ pageid = 1;
+ }
+ pageinit = 0;
+ break;
+ }
+ }
+ }
+ }
+}
+
+void window_2_callback( UG_MESSAGE* msg )
+{
+ if ( msg->type == MSG_TYPE_OBJECT )
+ {
+ if ( msg->id == OBJ_TYPE_BUTTON )
+ {
+ switch ( msg->sub_id )
+ {
+ case BTN_ID_2:
+ {
+ pageid--;
+ if (pageid < 1) {
+ pageid = 3;
+ }
+ pageinit = 0;
+ break;
+ }
+ case BTN_ID_3:
+ {
+ pageid++;
+ if (pageid > 3) {
+ pageid = 1;
+ }
+ pageinit = 0;
+ break;
+ }
+ }
+ }
+ }
+}
+
+void window_3_callback( UG_MESSAGE* msg )
+{
+ if ( msg->type == MSG_TYPE_OBJECT )
+ {
+ if ( msg->id == OBJ_TYPE_BUTTON )
+ {
+ switch ( msg->sub_id )
+ {
+ case BTN_ID_4:
+ {
+ pageid--;
+ if (pageid < 1) {
+ pageid = 3;
+ }
+ pageinit = 0;
+ break;
+ }
+ case BTN_ID_5:
+ {
+ pageid++;
+ if (pageid > 3) {
+ pageid = 1;
+ }
+ pageinit = 0;
+ break;
+ }
+ }
+ }
+ }
+}
+
+void cb1(void) {
+ point p;
+ TSC.getTouch(p);
+ if (p.z > __PRESURE)
+ {
+ UG_TouchUpdate ( p.x, p.y, TOUCH_STATE_PRESSED ) ;
+ }
+ else
+ {
+ UG_TouchUpdate (-1, -1, TOUCH_STATE_RELEASED ) ;
+ }
+ UG_Update();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uGUI.lib Wed Apr 12 20:30:06 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/unix_guru/code/uGUI/#42ded5e50e40
