This is a fork of a functional ILI9341 display with a functional Seeed touch screen library.

Dependencies:   BMP180 UniGraphic mbed BNO055_fusionI_fixed HTU21D GPSISR Compass Fonts uGUI

Fork of TFT_test_NUCLEO-F411RE by Motoo Tanaka

/media/uploads/trevieze/win_20170427_21_31_20_pro.jpg

Had to move sensors to a remote board because of interference. Added spi burst mode to supported displays.

To do.... ugui buttons are slow. will need to add rtos to project. Finish other way points screen. Will have to rewrite portions of the touch screen class. Sense touch, delay, read values and then average, touch released, is the sequence. Add cadence input and logic to program for computer screen.

Committer:
trevieze
Date:
Wed Mar 01 03:39:33 2017 +0000
Revision:
12:1a9c0f9d7128
Parent:
11:49600de70963
Child:
13:4f0ebc5a4f00
Got a good start at waypoints with Nav library, need to add BNO055 Cal eprom storage and retreval from arduino code I have.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:cd5e3d371b54 1 /* mbed main.cpp to test adafruit 2.8" TFT LCD shiled w Touchscreen
Rhyme 0:cd5e3d371b54 2 * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
Rhyme 0:cd5e3d371b54 3 *
Rhyme 0:cd5e3d371b54 4 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Rhyme 0:cd5e3d371b54 5 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Rhyme 0:cd5e3d371b54 6 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Rhyme 0:cd5e3d371b54 7 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Rhyme 0:cd5e3d371b54 8 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Rhyme 0:cd5e3d371b54 9 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Rhyme 0:cd5e3d371b54 10 * THE SOFTWARE.
Rhyme 0:cd5e3d371b54 11 */
Rhyme 0:cd5e3d371b54 12
Rhyme 0:cd5e3d371b54 13 /*
Rhyme 0:cd5e3d371b54 14 * Note: This program is derived from the SeeeStudioTFTv2 program.
Rhyme 0:cd5e3d371b54 15 * Although both program share same ILI9341 TFT driver,
Rhyme 0:cd5e3d371b54 16 * the touch sensor was not same with the Display I purchased from Akizuki.
Rhyme 0:cd5e3d371b54 17 * http://akizukidenshi.com/catalog/g/gM-07747/
Rhyme 0:cd5e3d371b54 18 * The touch sensor on the display is STMPE610,
Rhyme 0:cd5e3d371b54 19 * so I hacked the minimum spi driver for it (polling mode only).
Rhyme 0:cd5e3d371b54 20 */
Rhyme 0:cd5e3d371b54 21
Rhyme 0:cd5e3d371b54 22 #include "mbed.h"
Rhyme 0:cd5e3d371b54 23 #include <math.h>
Rhyme 0:cd5e3d371b54 24 #include "ILI9341.h"
trevieze 2:c5085faf2aa5 25 #include "SeeedStudioTFTv2.h"
trevieze 5:6eb4b9322931 26 #include "BNO055.h"
trevieze 5:6eb4b9322931 27 #include "HTU21D.h"
trevieze 5:6eb4b9322931 28 #include "BMP180.h"
trevieze 7:8aa9cdab4a07 29 #include "SDFileSystem.h"
trevieze 7:8aa9cdab4a07 30 #include "GPSISR.h"
trevieze 12:1a9c0f9d7128 31 #include "nav.h"
trevieze 8:855884782f67 32
trevieze 5:6eb4b9322931 33
trevieze 10:869a102dd31c 34 #include "ArialR16x17.h"
trevieze 10:869a102dd31c 35 #include "Arial24x23i.h"
trevieze 10:869a102dd31c 36 #include "Arial28x28.h"
trevieze 10:869a102dd31c 37 #include "Neu44x36.h"
trevieze 10:869a102dd31c 38 #include "SCProSB31x55.h"
Rhyme 0:cd5e3d371b54 39 #include "Arial12x12.h"
trevieze 10:869a102dd31c 40 #include "ArialR20x20.h"
Rhyme 0:cd5e3d371b54 41
trevieze 7:8aa9cdab4a07 42 //#define PIN_CS_TSC PA_9
trevieze 7:8aa9cdab4a07 43 //#define PIN_TSC_INTR PA_8
Rhyme 0:cd5e3d371b54 44 #define PIN_RESET_TFT PC_13 /* place holder */
trevieze 7:8aa9cdab4a07 45 //ILI9341 SPI PINS
trevieze 1:e265e7245ab8 46 #define PIN_XP A3
trevieze 1:e265e7245ab8 47 #define PIN_XM A1
trevieze 1:e265e7245ab8 48 #define PIN_YP A2
trevieze 1:e265e7245ab8 49 #define PIN_YM A0
trevieze 7:8aa9cdab4a07 50 #define PIN_MOSI_SPI1 D11 //SPI 1 MOSI
trevieze 7:8aa9cdab4a07 51 #define PIN_MISO_SPI1 D12 //SPI 1 MISO
trevieze 7:8aa9cdab4a07 52 #define PIN_SCLK_SPI1 D13 //SPI 1 SLCK
trevieze 7:8aa9cdab4a07 53 #define PIN_CS_SPI1 D5 // SPI CS D10 Was D5
trevieze 1:e265e7245ab8 54 #define PIN_DC_TFT D6
trevieze 1:e265e7245ab8 55 #define PIN_CS_SD D4
trevieze 5:6eb4b9322931 56 #define PIN_RESET D7
trevieze 7:8aa9cdab4a07 57 // SD Card on GPS shield PINS
trevieze 7:8aa9cdab4a07 58 #define PIN_MOSI_SPI3 PB_15 //SPI 1 MOSI
trevieze 7:8aa9cdab4a07 59 #define PIN_MISO_SPI3 PB_14 //SPI 1 MISO
trevieze 7:8aa9cdab4a07 60 #define PIN_SCLK_SPI3 PB_13 //SPI 1 SLCK
trevieze 7:8aa9cdab4a07 61 #define PIN_CS_SPI3 D2 // SPI CS
trevieze 7:8aa9cdab4a07 62 #define PIN_RX_GPS PA_12 //GPS Shield RX pin
trevieze 7:8aa9cdab4a07 63 #define PIN_TX_GPS PA_11 //GPS Shield TX pin
trevieze 7:8aa9cdab4a07 64
trevieze 10:869a102dd31c 65 #define PI 3.14159265358979f
trevieze 10:869a102dd31c 66
trevieze 5:6eb4b9322931 67
trevieze 5:6eb4b9322931 68 BNO055_ID_INF_TypeDef bno055_id_inf;
trevieze 5:6eb4b9322931 69 BNO055_EULER_TypeDef euler_angles;
trevieze 5:6eb4b9322931 70 BNO055_QUATERNION_TypeDef quaternion;
trevieze 5:6eb4b9322931 71 BNO055_LIN_ACC_TypeDef linear_acc;
trevieze 5:6eb4b9322931 72 BNO055_GRAVITY_TypeDef gravity;
trevieze 5:6eb4b9322931 73 BNO055_TEMPERATURE_TypeDef chip_temp;
trevieze 1:e265e7245ab8 74
Rhyme 0:cd5e3d371b54 75 #define DEVICE_NAME "F411RE"
Rhyme 0:cd5e3d371b54 76
Rhyme 0:cd5e3d371b54 77 #ifndef TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 78 #define TARGET_NECLEO_F411RE
Rhyme 0:cd5e3d371b54 79 #endif
Rhyme 0:cd5e3d371b54 80
trevieze 6:b78ff34209e5 81 //DigitalOut backlight(PB_3) ;
trevieze 5:6eb4b9322931 82 // DigitalOut tsc_cs(PA_9, 1) ;
trevieze 5:6eb4b9322931 83 // DigitalOut tft_cs(PB_6, 1) ;
Rhyme 0:cd5e3d371b54 84
trevieze 7:8aa9cdab4a07 85 Serial pc(USBTX, USBRX);
trevieze 7:8aa9cdab4a07 86
trevieze 5:6eb4b9322931 87 // Display
Rhyme 0:cd5e3d371b54 88 ILI9341 TFT(SPI_8, 10000000,
trevieze 7:8aa9cdab4a07 89 PIN_MOSI_SPI1, PIN_MISO_SPI1, PIN_SCLK_SPI1,
trevieze 7:8aa9cdab4a07 90 PIN_CS_SPI1, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
trevieze 5:6eb4b9322931 91
trevieze 5:6eb4b9322931 92 // TouchScreen
trevieze 2:c5085faf2aa5 93 TouchScreen TSC(PIN_XP, PIN_XM, PIN_YP, PIN_YM);
Rhyme 0:cd5e3d371b54 94
trevieze 5:6eb4b9322931 95 // 3 Axis IMU
trevieze 6:b78ff34209e5 96 BNO055 imu(I2C_SDA, I2C_SCL, PIN_RESET); // Reset =D7, addr = BNO055_G_CHIP_ADDR, mode = MODE_NDOF <- as default
trevieze 5:6eb4b9322931 97
trevieze 5:6eb4b9322931 98 // Humidity and Temperature
trevieze 10:869a102dd31c 99 HTU21D humid(I2C_SDA, I2C_SCL);
trevieze 5:6eb4b9322931 100
trevieze 5:6eb4b9322931 101 // Pressure
trevieze 6:b78ff34209e5 102 BMP180 bmp180(I2C_SDA, I2C_SCL);
trevieze 5:6eb4b9322931 103
trevieze 7:8aa9cdab4a07 104 // SD Card Reader On Adafruit GPS Shield
trevieze 7:8aa9cdab4a07 105 SDFileSystem sd(PIN_MOSI_SPI3, PIN_MISO_SPI3, PIN_SCLK_SPI3, PIN_CS_SPI3, "sd"); // the pinout on the mbed Cool Components workshop board
trevieze 7:8aa9cdab4a07 106
trevieze 8:855884782f67 107 // Set up serial interrupe service handler for gps characters.
trevieze 7:8aa9cdab4a07 108 GPS MyGPS(PIN_TX_GPS,PIN_RX_GPS, 9600);
trevieze 8:855884782f67 109
trevieze 12:1a9c0f9d7128 110 //Navigation Class.
trevieze 12:1a9c0f9d7128 111 NAV nav;
trevieze 12:1a9c0f9d7128 112 double plat = 42.826420;
trevieze 12:1a9c0f9d7128 113 double plon = -84.219413;
trevieze 12:1a9c0f9d7128 114
trevieze 10:869a102dd31c 115 void Draw_Compass_Rose(void);
trevieze 10:869a102dd31c 116 void arrow(int x2, int y2, int x1, int y1, int alength, int awidth, int colour);
Rhyme 0:cd5e3d371b54 117
trevieze 10:869a102dd31c 118 const int centreX = 120;
trevieze 10:869a102dd31c 119 const int centreY = 150;
trevieze 10:869a102dd31c 120 const int radius = 40;
trevieze 11:49600de70963 121 float last_dx;
trevieze 11:49600de70963 122 float last_dy;
Rhyme 0:cd5e3d371b54 123
Rhyme 0:cd5e3d371b54 124 int main()
Rhyme 0:cd5e3d371b54 125 {
trevieze 9:a3cb458d7b1c 126 TFT.BusEnable(true) ;
trevieze 9:a3cb458d7b1c 127 TFT.FastWindow(true) ;
trevieze 9:a3cb458d7b1c 128 wait(0.1);
trevieze 9:a3cb458d7b1c 129 TFT.cls();
trevieze 9:a3cb458d7b1c 130 wait(0.1);
trevieze 7:8aa9cdab4a07 131 Timer refresh_Timer; //sets up a timer for use in loop; how often do we print GPS info?
trevieze 9:a3cb458d7b1c 132 const int refresh_Time = 2000; //refresh time in ms
trevieze 7:8aa9cdab4a07 133 refresh_Timer.start(); //starts the clock on the timer
trevieze 7:8aa9cdab4a07 134 //backlight = 0 ;
trevieze 10:869a102dd31c 135 TFT.set_font((unsigned char*) Arial24x23i);
trevieze 9:a3cb458d7b1c 136 TFT.fillrect(2, 2, 237, 317, White);
trevieze 9:a3cb458d7b1c 137 TFT.foreground(Blue);
trevieze 9:a3cb458d7b1c 138 TFT.background(White);
trevieze 9:a3cb458d7b1c 139 wait(0.1);
trevieze 12:1a9c0f9d7128 140
trevieze 10:869a102dd31c 141 Draw_Compass_Rose();
trevieze 10:869a102dd31c 142
trevieze 7:8aa9cdab4a07 143 while (1) {
trevieze 10:869a102dd31c 144
trevieze 12:1a9c0f9d7128 145 TFT.set_font((unsigned char*) ArialR20x20);
trevieze 12:1a9c0f9d7128 146 //check if we recieved a new message from GPS, if so, attempt to parse it,
trevieze 7:8aa9cdab4a07 147 if (refresh_Timer.read_ms() >= refresh_Time) {
trevieze 7:8aa9cdab4a07 148 refresh_Timer.reset();
trevieze 9:a3cb458d7b1c 149
trevieze 10:869a102dd31c 150 if (bmp180.init() != 0) {
trevieze 10:869a102dd31c 151 //pc.printf("Error communicating with BMP180\n");
trevieze 10:869a102dd31c 152 } else {
trevieze 10:869a102dd31c 153 //pc.printf("Initialized BMP180\n");
trevieze 10:869a102dd31c 154 bmp180.startTemperature();
trevieze 10:869a102dd31c 155 wait(0.1); // Wait for conversion to complete
trevieze 10:869a102dd31c 156 float temp;
trevieze 10:869a102dd31c 157 if(bmp180.getTemperature(&temp) != 0) {
trevieze 10:869a102dd31c 158 //pc.printf("Error getting temperature\n");
trevieze 10:869a102dd31c 159 }
trevieze 10:869a102dd31c 160 //pc.printf("Temperature is : %f", temp);
trevieze 10:869a102dd31c 161 TFT.locate(4, 26) ;
trevieze 10:869a102dd31c 162 TFT.printf("%.1fF", ((temp* 9.0) / 5.0 + 32));
trevieze 10:869a102dd31c 163 }
trevieze 10:869a102dd31c 164 int ftemp = humid.sample_ftemp();
trevieze 10:869a102dd31c 165 int humidity = humid.sample_humid();
trevieze 10:869a102dd31c 166 TFT.locate(140, 26) ;
trevieze 10:869a102dd31c 167 TFT.printf("%d%%RH",humidity);
trevieze 10:869a102dd31c 168 //pc.printf("HTU21D Temp: %d",ftemp);
trevieze 10:869a102dd31c 169 //pc.printf("HTU21D Humidity: %d",humidity);
trevieze 11:49600de70963 170
trevieze 10:869a102dd31c 171 if (imu.chip_ready() == 0){
trevieze 10:869a102dd31c 172 pc.printf("Bosch BNO055 is NOT avirable!!\r\n");
trevieze 10:869a102dd31c 173 } else {
trevieze 12:1a9c0f9d7128 174 //printf("Cal %d", imu.read_calib_status());
trevieze 10:869a102dd31c 175 if (imu.read_calib_status() > 0x0){
trevieze 10:869a102dd31c 176 TFT.foreground(White);
trevieze 10:869a102dd31c 177 TFT.locate(4, 260) ;
trevieze 10:869a102dd31c 178 TFT.printf("No Data");
trevieze 10:869a102dd31c 179 TFT.foreground(Blue);
trevieze 10:869a102dd31c 180 imu.get_Euler_Angles(&euler_angles);
trevieze 10:869a102dd31c 181 imu.get_quaternion(&quaternion);
trevieze 10:869a102dd31c 182 TFT.locate(4, 260) ;
trevieze 10:869a102dd31c 183 TFT.printf("%.1f",euler_angles.h);
trevieze 10:869a102dd31c 184 //pc.printf("H %.1f",euler_angles.h);
trevieze 10:869a102dd31c 185 //pc.printf("R %.1f",euler_angles.r);
trevieze 10:869a102dd31c 186 //pc.printf("P %.1f",euler_angles.p);
trevieze 10:869a102dd31c 187
trevieze 10:869a102dd31c 188 } else {
trevieze 10:869a102dd31c 189 TFT.locate(4, 260) ;
trevieze 10:869a102dd31c 190 TFT.printf("No Data");
trevieze 10:869a102dd31c 191 }
trevieze 10:869a102dd31c 192 }
trevieze 11:49600de70963 193
trevieze 11:49600de70963 194 float angle = int(euler_angles.h); // * 180/PI); // Convert radians to degrees for more a more usual result
trevieze 10:869a102dd31c 195 // For the screen -X = up and +X = down and -Y = left and +Y = right, so does not follow coordinate conventions
trevieze 10:869a102dd31c 196 float dx = (0.7*radius * cos((angle-90)*PI/180)) + centreX; // calculate X position for the screen coordinates - can be confusing!
trevieze 10:869a102dd31c 197 float dy = (0.7*radius * sin((angle-90)*PI/180)) + centreY; // calculate Y position for the screen coordinates - can be confusing!
trevieze 10:869a102dd31c 198 arrow(last_dx,last_dy, centreX, centreY, 2,2,White); // Erase last arrow
trevieze 10:869a102dd31c 199 arrow(dx,dy, centreX, centreY, 2, 2,Blue); // Draw arrow in new position
trevieze 10:869a102dd31c 200 last_dx = dx;
trevieze 10:869a102dd31c 201 last_dy = dy;
trevieze 10:869a102dd31c 202
trevieze 9:a3cb458d7b1c 203 if (MyGPS.dataready()) {
trevieze 9:a3cb458d7b1c 204 MyGPS.read();
trevieze 10:869a102dd31c 205 //pc.printf("NMEA has valid data");
trevieze 10:869a102dd31c 206 //pc.printf("Sats : %d \n", MyGPS.buffer.satellites);
trevieze 10:869a102dd31c 207 //pc.printf("%d-%d-%d\n", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
trevieze 10:869a102dd31c 208 //pc.printf("%d:%d:%d\n", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
trevieze 9:a3cb458d7b1c 209
trevieze 10:869a102dd31c 210 TFT.foreground(White);
trevieze 10:869a102dd31c 211 TFT.locate(4, 2) ;
trevieze 10:869a102dd31c 212 TFT.printf("No Data");
trevieze 10:869a102dd31c 213 TFT.foreground(Blue);
trevieze 10:869a102dd31c 214 TFT.locate(4, 2) ;
trevieze 9:a3cb458d7b1c 215 TFT.printf("%d-%d-%d", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
trevieze 12:1a9c0f9d7128 216 TFT.locate(4, 50) ;
trevieze 12:1a9c0f9d7128 217 double waypoint = nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon)/double(1609.344);
trevieze 12:1a9c0f9d7128 218 TFT.printf("%.1fMI From Perry", waypoint);
trevieze 10:869a102dd31c 219 TFT.locate(140, 2) ;
trevieze 9:a3cb458d7b1c 220 TFT.printf("%d:%d:%d", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
trevieze 10:869a102dd31c 221 TFT.locate(140, 260) ;
trevieze 10:869a102dd31c 222 TFT.printf("%.1fft", MyGPS.buffer.altitude/0.3048);
trevieze 10:869a102dd31c 223 TFT.locate(4, 280) ;
trevieze 10:869a102dd31c 224 int degree;
trevieze 10:869a102dd31c 225 int minutes;
trevieze 10:869a102dd31c 226 int seconds;
trevieze 12:1a9c0f9d7128 227 degree = (int)abs(MyGPS.buffer.longitude);
trevieze 12:1a9c0f9d7128 228 minutes = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree) * 60.0);
trevieze 12:1a9c0f9d7128 229 seconds = (int) ( (abs(MyGPS.buffer.longitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
trevieze 12:1a9c0f9d7128 230 TFT.printf("%d %d' %d\" %c lon", degree, minutes,seconds, MyGPS.buffer.lonc);
trevieze 10:869a102dd31c 231 TFT.locate(4, 300) ;
trevieze 12:1a9c0f9d7128 232 TFT.locate(4, 300) ;
trevieze 12:1a9c0f9d7128 233 degree = (int)abs(MyGPS.buffer.latitude);
trevieze 12:1a9c0f9d7128 234 minutes = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree) * 60.0);
trevieze 12:1a9c0f9d7128 235 seconds = (int) ( (abs(MyGPS.buffer.latitude) - (double)degree - (double)minutes / 60.0) * 60.0 * 60.0 );
trevieze 12:1a9c0f9d7128 236 TFT.printf("%d %d' %d\" %c lat", degree, minutes,seconds, MyGPS.buffer.latc);
trevieze 10:869a102dd31c 237 TFT.set_font((unsigned char*) SCProSB31x55);
trevieze 10:869a102dd31c 238 TFT.locate(120, 200) ;
trevieze 10:869a102dd31c 239 TFT.printf("%.1f", MyGPS.buffer.speed);
trevieze 9:a3cb458d7b1c 240
trevieze 12:1a9c0f9d7128 241
trevieze 12:1a9c0f9d7128 242
trevieze 12:1a9c0f9d7128 243 //pc.printf("Dist to Perry %.4f ", nav.CalculateDistance(MyGPS.buffer.latitude,MyGPS.buffer.longitude,plat,plon));
trevieze 12:1a9c0f9d7128 244
trevieze 8:855884782f67 245 }
trevieze 8:855884782f67 246 else {
trevieze 10:869a102dd31c 247 TFT.locate(4, 2) ;
trevieze 10:869a102dd31c 248 TFT.printf("No Data");
trevieze 10:869a102dd31c 249 //pc.printf("NMEA has no valid data");
trevieze 8:855884782f67 250 }
trevieze 7:8aa9cdab4a07 251 }
trevieze 7:8aa9cdab4a07 252 }
trevieze 10:869a102dd31c 253 }
trevieze 10:869a102dd31c 254
trevieze 10:869a102dd31c 255 void arrow(int x2, int y2, int x1, int y1, int alength, int awidth, int colour) {
trevieze 10:869a102dd31c 256 float distance;
trevieze 10:869a102dd31c 257 int dx, dy, x2o,y2o,x3,y3,x4,y4,k;
trevieze 10:869a102dd31c 258 distance = sqrt(pow((double)(x1 - x2),2) + pow((double)(y1 - y2), 2));
trevieze 10:869a102dd31c 259 dx = x2 + (x1 - x2) * alength / distance;
trevieze 10:869a102dd31c 260 dy = y2 + (y1 - y2) * alength / distance;
trevieze 10:869a102dd31c 261 k = awidth / alength;
trevieze 10:869a102dd31c 262 x2o = x2 - dx;
trevieze 10:869a102dd31c 263 y2o = dy - y2;
trevieze 10:869a102dd31c 264 x3 = y2o * k + dx;
trevieze 10:869a102dd31c 265 y3 = x2o * k + dy;
trevieze 10:869a102dd31c 266 x4 = dx - y2o * k;
trevieze 10:869a102dd31c 267 y4 = dy - x2o * k;
trevieze 10:869a102dd31c 268 TFT.line(x1, y1, x2, y2, colour);
trevieze 10:869a102dd31c 269 TFT.line(x1, y1, dx, dy, colour);
trevieze 10:869a102dd31c 270 TFT.line(x3, y3, x4, y4, colour);
trevieze 10:869a102dd31c 271 TFT.line(x3, y3, x2, y2, colour);
trevieze 10:869a102dd31c 272 TFT.line(x2, y2, x4, y4, colour);
trevieze 12:1a9c0f9d7128 273 TFT.set_font((unsigned char*) Arial12x12);
trevieze 11:49600de70963 274 TFT.foreground(Blue);
trevieze 11:49600de70963 275 TFT.background(White);
trevieze 12:1a9c0f9d7128 276 TFT.locate((centreX-2),(centreY-24));
trevieze 11:49600de70963 277 TFT.printf("N");
trevieze 11:49600de70963 278 TFT.locate((centreX-2),(centreY+17));
trevieze 11:49600de70963 279 TFT.printf("S");
trevieze 11:49600de70963 280 TFT.locate((centreX+19),(centreY-3));
trevieze 11:49600de70963 281 TFT.printf("E");
trevieze 11:49600de70963 282 TFT.locate((centreX-23),(centreY-3));
trevieze 11:49600de70963 283 TFT.printf("W");
trevieze 12:1a9c0f9d7128 284 TFT.set_font((unsigned char*) ArialR20x20);
trevieze 10:869a102dd31c 285 }
Rhyme 0:cd5e3d371b54 286
trevieze 10:869a102dd31c 287 void Draw_Compass_Rose(void) {
trevieze 10:869a102dd31c 288 int dxo, dyo, dxi, dyi;
trevieze 10:869a102dd31c 289 TFT.circle(centreX,centreY,radius,Blue); // Draw compass circle
trevieze 10:869a102dd31c 290 for (float i = 0; i <360; i = i + 22.5) {
trevieze 10:869a102dd31c 291 dxo = radius * cos(i*3.14/180);
trevieze 10:869a102dd31c 292 dyo = radius * sin(i*3.14/180);
trevieze 10:869a102dd31c 293 dxi = dxo * 0.95;
trevieze 10:869a102dd31c 294 dyi = dyo * 0.95;
trevieze 10:869a102dd31c 295 TFT.line(dxi+centreX,dyi+centreY,dxo+centreX,dyo+centreY,Blue);
trevieze 10:869a102dd31c 296 }
trevieze 10:869a102dd31c 297 TFT.set_font((unsigned char*) Arial12x12);
trevieze 10:869a102dd31c 298 TFT.foreground(Blue);
trevieze 10:869a102dd31c 299 TFT.background(White);
trevieze 10:869a102dd31c 300 TFT.locate((centreX-2),(centreY-24));
trevieze 10:869a102dd31c 301 TFT.printf("N");
trevieze 10:869a102dd31c 302 TFT.locate((centreX-2),(centreY+17));
trevieze 10:869a102dd31c 303 TFT.printf("S");
trevieze 10:869a102dd31c 304 TFT.locate((centreX+19),(centreY-3));
trevieze 10:869a102dd31c 305 TFT.printf("E");
trevieze 10:869a102dd31c 306 TFT.locate((centreX-23),(centreY-3));
trevieze 10:869a102dd31c 307 TFT.printf("W");
trevieze 9:a3cb458d7b1c 308 }