STM32L476
Dependencies: MbedJSONValue SDFileSystem WConstants mbed-dev DS1820 TinyGPSPlus epd1in54
Fork of A_SSL_Main by
main.cpp@6:d30c8e8678c9, 2018-08-30 (annotated)
- Committer:
- WaleedElmughrabi
- Date:
- Thu Aug 30 18:54:42 2018 +0000
- Revision:
- 6:d30c8e8678c9
- Parent:
- 5:4525141f69d2
- Child:
- 8:bc5a3b2ff424
Robust GPS, SPI channel 2 is now used for SD card, SD card now uses FAT32 format, and data can be saved to files in the directory
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bcostm | 0:eafcd0445e97 | 1 | #include "mbed.h" |
WaleedElmughrabi | 2:b14aac0ec647 | 2 | #include "stm32l496g_discovery.h" |
bcostm | 0:eafcd0445e97 | 3 | #include "stm32l496g_discovery_lcd.h" |
WaleedElmughrabi | 2:b14aac0ec647 | 4 | #include "stm32l496g_discovery_sd.h" |
WaleedElmughrabi | 2:b14aac0ec647 | 5 | #include "DS1820.h" |
WaleedElmughrabi | 2:b14aac0ec647 | 6 | #include "epd1in54.h" |
WaleedElmughrabi | 2:b14aac0ec647 | 7 | #include "stdio.h" |
WaleedElmughrabi | 4:06edbeb05013 | 8 | #include "math.h" |
WaleedElmughrabi | 4:06edbeb05013 | 9 | #include "TinyGPSPlus.h" |
WaleedElmughrabi | 6:d30c8e8678c9 | 10 | #include "SDFileSystem.h" |
WaleedElmughrabi | 6:d30c8e8678c9 | 11 | #include "errno.h" |
WaleedElmughrabi | 4:06edbeb05013 | 12 | |
WaleedElmughrabi | 4:06edbeb05013 | 13 | |
WaleedElmughrabi | 4:06edbeb05013 | 14 | #define TX5 PG_7 |
WaleedElmughrabi | 4:06edbeb05013 | 15 | #define RX5 PG_8 |
WaleedElmughrabi | 4:06edbeb05013 | 16 | #define GPSBaud 9600 |
WaleedElmughrabi | 4:06edbeb05013 | 17 | #define Serial0Baud 115200 |
WaleedElmughrabi | 6:d30c8e8678c9 | 18 | #define SD_FILE_SYSTEM_H |
WaleedElmughrabi | 6:d30c8e8678c9 | 19 | SDFileSystem* fs; |
WaleedElmughrabi | 6:d30c8e8678c9 | 20 | FILE* fp; |
WaleedElmughrabi | 2:b14aac0ec647 | 21 | |
WaleedElmughrabi | 2:b14aac0ec647 | 22 | |
WaleedElmughrabi | 4:06edbeb05013 | 23 | |
WaleedElmughrabi | 4:06edbeb05013 | 24 | Serial GPSSerial(TX5, RX5); |
WaleedElmughrabi | 4:06edbeb05013 | 25 | TinyGPSPlus tgps; |
WaleedElmughrabi | 4:06edbeb05013 | 26 | |
WaleedElmughrabi | 4:06edbeb05013 | 27 | void displayInfo(void); |
WaleedElmughrabi | 4:06edbeb05013 | 28 | |
WaleedElmughrabi | 4:06edbeb05013 | 29 | int i = 0; |
WaleedElmughrabi | 4:06edbeb05013 | 30 | |
WaleedElmughrabi | 4:06edbeb05013 | 31 | |
WaleedElmughrabi | 4:06edbeb05013 | 32 | |
WaleedElmughrabi | 2:b14aac0ec647 | 33 | //DS18B20 temperature sensor |
WaleedElmughrabi | 2:b14aac0ec647 | 34 | Serial serial(USBTX, USBRX); |
WaleedElmughrabi | 2:b14aac0ec647 | 35 | DS1820 ds1820(PG_15); //pin name connected to the DS1820 data pin |
WaleedElmughrabi | 2:b14aac0ec647 | 36 | float t; |
WaleedElmughrabi | 3:bc4495101c7b | 37 | float tempSerial; |
WaleedElmughrabi | 3:bc4495101c7b | 38 | float tCompare = 0; |
WaleedElmughrabi | 3:bc4495101c7b | 39 | int ab=1; |
WaleedElmughrabi | 3:bc4495101c7b | 40 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 41 | SDFileSystem sd(PI_3, PC_2, PD_3, PB_12, "sd"); |
WaleedElmughrabi | 2:b14aac0ec647 | 42 | |
WaleedElmughrabi | 2:b14aac0ec647 | 43 | //E-ink Display |
WaleedElmughrabi | 2:b14aac0ec647 | 44 | // Control |
WaleedElmughrabi | 2:b14aac0ec647 | 45 | PinName rst; |
WaleedElmughrabi | 2:b14aac0ec647 | 46 | PinName dc; |
WaleedElmughrabi | 2:b14aac0ec647 | 47 | PinName busy; |
WaleedElmughrabi | 2:b14aac0ec647 | 48 | //SPI communication |
WaleedElmughrabi | 2:b14aac0ec647 | 49 | PinName mosi; |
WaleedElmughrabi | 2:b14aac0ec647 | 50 | PinName miso; |
WaleedElmughrabi | 2:b14aac0ec647 | 51 | PinName sclk; |
WaleedElmughrabi | 2:b14aac0ec647 | 52 | PinName cs; |
WaleedElmughrabi | 2:b14aac0ec647 | 53 | unsigned char frame_black[EPD_HEIGHT*EPD_WIDTH/8]; |
WaleedElmughrabi | 2:b14aac0ec647 | 54 | |
WaleedElmughrabi | 3:bc4495101c7b | 55 | |
WaleedElmughrabi | 4:06edbeb05013 | 56 | //function to determine if within polygon geofence |
WaleedElmughrabi | 4:06edbeb05013 | 57 | //first argument is an integer, the rest are floats |
WaleedElmughrabi | 4:06edbeb05013 | 58 | //The last vertix should be the same as the first vertix |
WaleedElmughrabi | 4:06edbeb05013 | 59 | int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) |
WaleedElmughrabi | 4:06edbeb05013 | 60 | { |
WaleedElmughrabi | 4:06edbeb05013 | 61 | int i, j, c = 0; |
WaleedElmughrabi | 4:06edbeb05013 | 62 | for (i = 0, j = nvert-1; i < nvert; j = i++) { |
WaleedElmughrabi | 4:06edbeb05013 | 63 | if ( ((verty[i]>testy) != (verty[j]>testy)) && |
WaleedElmughrabi | 4:06edbeb05013 | 64 | (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) |
WaleedElmughrabi | 4:06edbeb05013 | 65 | c = !c; |
WaleedElmughrabi | 4:06edbeb05013 | 66 | } |
WaleedElmughrabi | 4:06edbeb05013 | 67 | return c; |
WaleedElmughrabi | 4:06edbeb05013 | 68 | } |
WaleedElmughrabi | 4:06edbeb05013 | 69 | |
WaleedElmughrabi | 4:06edbeb05013 | 70 | |
WaleedElmughrabi | 4:06edbeb05013 | 71 | int inCircle(float radius, float xcentre, float ycentre, float testx, float testy) |
WaleedElmughrabi | 4:06edbeb05013 | 72 | { |
WaleedElmughrabi | 4:06edbeb05013 | 73 | float distance; |
WaleedElmughrabi | 4:06edbeb05013 | 74 | int test; |
WaleedElmughrabi | 4:06edbeb05013 | 75 | distance = (sqrt((testx-xcentre)*(testx-xcentre)+(testy-ycentre)*(testy-ycentre))); |
WaleedElmughrabi | 4:06edbeb05013 | 76 | |
WaleedElmughrabi | 4:06edbeb05013 | 77 | if(distance < radius){ |
WaleedElmughrabi | 4:06edbeb05013 | 78 | test = 1; |
WaleedElmughrabi | 4:06edbeb05013 | 79 | } |
WaleedElmughrabi | 4:06edbeb05013 | 80 | else{ |
WaleedElmughrabi | 4:06edbeb05013 | 81 | test = 0; |
WaleedElmughrabi | 4:06edbeb05013 | 82 | } |
WaleedElmughrabi | 4:06edbeb05013 | 83 | return (test); |
WaleedElmughrabi | 4:06edbeb05013 | 84 | } |
WaleedElmughrabi | 4:06edbeb05013 | 85 | |
WaleedElmughrabi | 5:4525141f69d2 | 86 | //GPS acquisition |
WaleedElmughrabi | 4:06edbeb05013 | 87 | void displayInfo(void) |
WaleedElmughrabi | 4:06edbeb05013 | 88 | { |
WaleedElmughrabi | 4:06edbeb05013 | 89 | serial.printf("Location: "); |
WaleedElmughrabi | 4:06edbeb05013 | 90 | if (tgps.location.isValid()) |
WaleedElmughrabi | 4:06edbeb05013 | 91 | { |
WaleedElmughrabi | 4:06edbeb05013 | 92 | serial.printf("%3.6f, %3.6f", tgps.location.lat(), tgps.location.lng()); |
WaleedElmughrabi | 4:06edbeb05013 | 93 | } |
WaleedElmughrabi | 4:06edbeb05013 | 94 | else |
WaleedElmughrabi | 4:06edbeb05013 | 95 | { |
WaleedElmughrabi | 4:06edbeb05013 | 96 | serial.printf("INVALID"); |
WaleedElmughrabi | 4:06edbeb05013 | 97 | } |
WaleedElmughrabi | 4:06edbeb05013 | 98 | |
WaleedElmughrabi | 4:06edbeb05013 | 99 | serial.printf(" - Date/Time: "); |
WaleedElmughrabi | 4:06edbeb05013 | 100 | if (tgps.date.isValid()) |
WaleedElmughrabi | 4:06edbeb05013 | 101 | { |
WaleedElmughrabi | 4:06edbeb05013 | 102 | serial.printf("%d/", tgps.date.year()); |
WaleedElmughrabi | 4:06edbeb05013 | 103 | if (tgps.date.month() < 10) serial.printf("0"); |
WaleedElmughrabi | 4:06edbeb05013 | 104 | serial.printf("%d/", tgps.date.month()); |
WaleedElmughrabi | 4:06edbeb05013 | 105 | if (tgps.date.day() < 10) serial.printf("0"); |
WaleedElmughrabi | 4:06edbeb05013 | 106 | serial.printf("%d", tgps.date.day()); |
WaleedElmughrabi | 4:06edbeb05013 | 107 | } |
WaleedElmughrabi | 4:06edbeb05013 | 108 | else |
WaleedElmughrabi | 4:06edbeb05013 | 109 | { |
WaleedElmughrabi | 4:06edbeb05013 | 110 | serial.printf("INVALID"); |
WaleedElmughrabi | 4:06edbeb05013 | 111 | } |
WaleedElmughrabi | 4:06edbeb05013 | 112 | |
WaleedElmughrabi | 4:06edbeb05013 | 113 | serial.printf(" "); |
WaleedElmughrabi | 4:06edbeb05013 | 114 | if (tgps.time.isValid()) |
WaleedElmughrabi | 4:06edbeb05013 | 115 | { |
WaleedElmughrabi | 4:06edbeb05013 | 116 | if (tgps.time.hour() < 10) serial.printf("0"); |
WaleedElmughrabi | 4:06edbeb05013 | 117 | serial.printf("%d:", tgps.time.hour()); |
WaleedElmughrabi | 4:06edbeb05013 | 118 | if (tgps.time.minute() < 10) serial.printf("0"); |
WaleedElmughrabi | 4:06edbeb05013 | 119 | serial.printf("%d:", tgps.time.minute()); |
WaleedElmughrabi | 4:06edbeb05013 | 120 | if (tgps.time.second() < 10) serial.printf("0"); |
WaleedElmughrabi | 4:06edbeb05013 | 121 | serial.printf("%d\r\n", tgps.time.second()); |
WaleedElmughrabi | 4:06edbeb05013 | 122 | } |
WaleedElmughrabi | 4:06edbeb05013 | 123 | else |
WaleedElmughrabi | 4:06edbeb05013 | 124 | { |
WaleedElmughrabi | 4:06edbeb05013 | 125 | serial.printf("INVALID\r\n"); |
WaleedElmughrabi | 4:06edbeb05013 | 126 | } |
WaleedElmughrabi | 4:06edbeb05013 | 127 | } |
WaleedElmughrabi | 4:06edbeb05013 | 128 | |
WaleedElmughrabi | 4:06edbeb05013 | 129 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 130 | float getTemp() |
WaleedElmughrabi | 4:06edbeb05013 | 131 | { |
WaleedElmughrabi | 6:d30c8e8678c9 | 132 | float t; |
WaleedElmughrabi | 4:06edbeb05013 | 133 | // getTemp(tRead); |
WaleedElmughrabi | 4:06edbeb05013 | 134 | if(ds1820.begin()) { |
WaleedElmughrabi | 4:06edbeb05013 | 135 | ds1820.startConversion(); |
WaleedElmughrabi | 4:06edbeb05013 | 136 | wait(1.0); |
WaleedElmughrabi | 4:06edbeb05013 | 137 | t = ds1820.read(); // read temperature |
WaleedElmughrabi | 4:06edbeb05013 | 138 | tCompare; |
WaleedElmughrabi | 4:06edbeb05013 | 139 | serial.printf("temp = %3.1f\r\n", t); // Display temp on terminal |
WaleedElmughrabi | 4:06edbeb05013 | 140 | |
WaleedElmughrabi | 4:06edbeb05013 | 141 | } else |
WaleedElmughrabi | 4:06edbeb05013 | 142 | serial.printf("No DS1820 sensor found!\r\n"); |
WaleedElmughrabi | 4:06edbeb05013 | 143 | |
WaleedElmughrabi | 4:06edbeb05013 | 144 | |
WaleedElmughrabi | 4:06edbeb05013 | 145 | |
WaleedElmughrabi | 4:06edbeb05013 | 146 | |
WaleedElmughrabi | 4:06edbeb05013 | 147 | mosi = PB_5; |
WaleedElmughrabi | 4:06edbeb05013 | 148 | miso = PB_4; |
WaleedElmughrabi | 4:06edbeb05013 | 149 | sclk = PA_5; |
WaleedElmughrabi | 4:06edbeb05013 | 150 | cs = PA_15; |
WaleedElmughrabi | 4:06edbeb05013 | 151 | rst = PI_6; |
WaleedElmughrabi | 4:06edbeb05013 | 152 | dc = PG_6; |
WaleedElmughrabi | 4:06edbeb05013 | 153 | busy = PI_11; |
WaleedElmughrabi | 4:06edbeb05013 | 154 | |
WaleedElmughrabi | 4:06edbeb05013 | 155 | char cVal[32]; |
WaleedElmughrabi | 4:06edbeb05013 | 156 | //char* t_str; |
WaleedElmughrabi | 4:06edbeb05013 | 157 | sprintf(cVal,"%.2f", t); |
WaleedElmughrabi | 4:06edbeb05013 | 158 | |
WaleedElmughrabi | 4:06edbeb05013 | 159 | |
WaleedElmughrabi | 4:06edbeb05013 | 160 | |
WaleedElmughrabi | 4:06edbeb05013 | 161 | memset(frame_black, 0xFF, sizeof(unsigned char)*EPD_HEIGHT*EPD_WIDTH/8); |
WaleedElmughrabi | 4:06edbeb05013 | 162 | Epd epd = Epd(mosi, miso, sclk, cs, dc, rst, busy); |
WaleedElmughrabi | 4:06edbeb05013 | 163 | |
WaleedElmughrabi | 4:06edbeb05013 | 164 | |
WaleedElmughrabi | 4:06edbeb05013 | 165 | if (epd.Init(lut_full_update) != 0) { |
WaleedElmughrabi | 4:06edbeb05013 | 166 | return -1; |
WaleedElmughrabi | 4:06edbeb05013 | 167 | } |
WaleedElmughrabi | 4:06edbeb05013 | 168 | /*Write strings to the buffer */ |
WaleedElmughrabi | 4:06edbeb05013 | 169 | epd.DrawStringAt(frame_black, 50, 30, cVal, &Font24, COLORED); |
WaleedElmughrabi | 4:06edbeb05013 | 170 | epd.DrawStringAt(frame_black, 28, 10, "Temperature", &Font16, COLORED); |
WaleedElmughrabi | 4:06edbeb05013 | 171 | /* Display the frame_buffer */ |
WaleedElmughrabi | 4:06edbeb05013 | 172 | epd.SetFrameMemory(frame_black, 0, 0, epd.width, epd.height); |
WaleedElmughrabi | 4:06edbeb05013 | 173 | epd.DisplayFrame(); |
WaleedElmughrabi | 4:06edbeb05013 | 174 | epd.Sleep(); |
WaleedElmughrabi | 4:06edbeb05013 | 175 | return t; |
WaleedElmughrabi | 4:06edbeb05013 | 176 | } |
WaleedElmughrabi | 4:06edbeb05013 | 177 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 178 | int sdCard() |
WaleedElmughrabi | 6:d30c8e8678c9 | 179 | { |
WaleedElmughrabi | 6:d30c8e8678c9 | 180 | //SD card |
WaleedElmughrabi | 6:d30c8e8678c9 | 181 | // Create and mount SDFileSystem |
WaleedElmughrabi | 6:d30c8e8678c9 | 182 | /*fs = new SDFileSystem(PI_3, PC_2, PD_3, PB_12, "sd"); // mosi, miso, sck, cs |
WaleedElmughrabi | 6:d30c8e8678c9 | 183 | serial.printf("Mounting file system...\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 184 | int err = fs->mount(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 185 | serial.printf("%s\r\n", (err ? "Failed :(\r\n" : "OK\r\n")); |
WaleedElmughrabi | 6:d30c8e8678c9 | 186 | if (err) |
WaleedElmughrabi | 6:d30c8e8678c9 | 187 | return err; |
WaleedElmughrabi | 6:d30c8e8678c9 | 188 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 189 | // Open the file. |
WaleedElmughrabi | 6:d30c8e8678c9 | 190 | serial.printf("Opening file '/sd/mytest/sdtest.txt'... "); |
WaleedElmughrabi | 6:d30c8e8678c9 | 191 | fp = fopen("/sd/mytest/sdtest.txt", "w+"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 192 | serial.printf("%s\r\n", (!fp ? "Failed :(\r\n" : "OK\r\n")); |
WaleedElmughrabi | 6:d30c8e8678c9 | 193 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 194 | if (!fp) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 195 | // Check whether directory '/sd/mytest' exists. |
WaleedElmughrabi | 6:d30c8e8678c9 | 196 | serial.printf("\r\nChecking directory '/sd/mytest'...\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 197 | struct stat info; |
WaleedElmughrabi | 6:d30c8e8678c9 | 198 | err = stat("/sd/mytest", &info); |
WaleedElmughrabi | 6:d30c8e8678c9 | 199 | if (err) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 200 | serial.printf("Directory '/sd/mytest' does not exist.\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 201 | serial.printf("Trying to create it..."); |
WaleedElmughrabi | 6:d30c8e8678c9 | 202 | err = mkdir("/sd/mytest", 0777); |
WaleedElmughrabi | 6:d30c8e8678c9 | 203 | serial.printf("%s\r\n", (err ? "Failed :(\r\n" : "OK\r\n")); |
WaleedElmughrabi | 6:d30c8e8678c9 | 204 | if (err) |
WaleedElmughrabi | 6:d30c8e8678c9 | 205 | return err; |
WaleedElmughrabi | 6:d30c8e8678c9 | 206 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 207 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 208 | // Create a new 'sdtest.txt' file. |
WaleedElmughrabi | 6:d30c8e8678c9 | 209 | serial.printf("File not found, creating a new one...\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 210 | fp = fopen("/sd/mytest/sdtest.txt", "w+"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 211 | serial.printf("%s\r\n", (!fp ? "Failed :(" : "OK")); |
WaleedElmughrabi | 6:d30c8e8678c9 | 212 | if (!fp) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 213 | error("error: %s (%d)\r\n", strerror(errno), -errno); |
WaleedElmughrabi | 6:d30c8e8678c9 | 214 | return errno; |
WaleedElmughrabi | 6:d30c8e8678c9 | 215 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 216 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 217 | for (int i = 0; i < 10; i++) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 218 | serial.printf("Writing numbers (%d/%d)... ", i, 10); |
WaleedElmughrabi | 6:d30c8e8678c9 | 219 | err = fprintf(fp, " %d\r\n", i); |
WaleedElmughrabi | 6:d30c8e8678c9 | 220 | if (err < 0) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 221 | serial.printf("Fail :(\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 222 | error("error: %s (%d)\r\n", strerror(errno), -errno); |
WaleedElmughrabi | 6:d30c8e8678c9 | 223 | } else |
WaleedElmughrabi | 6:d30c8e8678c9 | 224 | serial.printf("OK\r\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 225 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 226 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 227 | serial.printf("Writing numbers (%d/%d)... OK\r\n\r\n", 10, 10); |
WaleedElmughrabi | 6:d30c8e8678c9 | 228 | err = fclose(fp); |
WaleedElmughrabi | 6:d30c8e8678c9 | 229 | serial.printf("Closing file '/sd/mytest/sdtest.txt'... "); |
WaleedElmughrabi | 6:d30c8e8678c9 | 230 | //serial.printf("%s\r\n", (err ? "Failed :(\r\n" : "OK\r\n")); |
WaleedElmughrabi | 6:d30c8e8678c9 | 231 | //if (err) |
WaleedElmughrabi | 6:d30c8e8678c9 | 232 | // return err; |
WaleedElmughrabi | 6:d30c8e8678c9 | 233 | */ |
WaleedElmughrabi | 6:d30c8e8678c9 | 234 | //Mount the filesystem |
WaleedElmughrabi | 6:d30c8e8678c9 | 235 | sd.mount(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 236 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 237 | //Perform a write test |
WaleedElmughrabi | 6:d30c8e8678c9 | 238 | printf("\nWriting to SD card..."); |
WaleedElmughrabi | 6:d30c8e8678c9 | 239 | FILE *fp = fopen("/sd/sdtest.txt", "w"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 240 | if (fp != NULL) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 241 | fprintf(fp, "We're writing to an SD card!"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 242 | fclose(fp); |
WaleedElmughrabi | 6:d30c8e8678c9 | 243 | printf("success!\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 244 | } else { |
WaleedElmughrabi | 6:d30c8e8678c9 | 245 | printf("failed!\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 246 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 247 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 248 | //Perform a read test |
WaleedElmughrabi | 6:d30c8e8678c9 | 249 | printf("Reading from SD card..."); |
WaleedElmughrabi | 6:d30c8e8678c9 | 250 | fp = fopen("/sd/sdtest.txt", "r"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 251 | if (fp != NULL) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 252 | char c = fgetc(fp); |
WaleedElmughrabi | 6:d30c8e8678c9 | 253 | if (c == 'W') |
WaleedElmughrabi | 6:d30c8e8678c9 | 254 | printf("success!\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 255 | else |
WaleedElmughrabi | 6:d30c8e8678c9 | 256 | printf("incorrect char (%c)!\n", c); |
WaleedElmughrabi | 6:d30c8e8678c9 | 257 | fclose(fp); |
WaleedElmughrabi | 6:d30c8e8678c9 | 258 | } else { |
WaleedElmughrabi | 6:d30c8e8678c9 | 259 | printf("failed!\n"); |
WaleedElmughrabi | 6:d30c8e8678c9 | 260 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 261 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 262 | //Unmount the filesystem |
WaleedElmughrabi | 6:d30c8e8678c9 | 263 | sd.unmount(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 264 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 265 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 266 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 267 | |
WaleedElmughrabi | 4:06edbeb05013 | 268 | int main() |
WaleedElmughrabi | 4:06edbeb05013 | 269 | { |
WaleedElmughrabi | 4:06edbeb05013 | 270 | GPSSerial.baud(GPSBaud); |
WaleedElmughrabi | 4:06edbeb05013 | 271 | wait(0.001); |
WaleedElmughrabi | 4:06edbeb05013 | 272 | |
WaleedElmughrabi | 4:06edbeb05013 | 273 | |
WaleedElmughrabi | 4:06edbeb05013 | 274 | |
WaleedElmughrabi | 4:06edbeb05013 | 275 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 276 | //Variables |
WaleedElmughrabi | 4:06edbeb05013 | 277 | int inpoly; |
WaleedElmughrabi | 4:06edbeb05013 | 278 | float x[5] = { 1,4,4,1,1}; |
WaleedElmughrabi | 4:06edbeb05013 | 279 | float y[5] = { 1,1,4,4,1}; |
WaleedElmughrabi | 6:d30c8e8678c9 | 280 | float xtest; |
WaleedElmughrabi | 6:d30c8e8678c9 | 281 | float ytest; |
WaleedElmughrabi | 6:d30c8e8678c9 | 282 | float cx = 1; |
WaleedElmughrabi | 6:d30c8e8678c9 | 283 | float cy = 50; |
WaleedElmughrabi | 6:d30c8e8678c9 | 284 | float r = 15; |
WaleedElmughrabi | 6:d30c8e8678c9 | 285 | int ans = 0; |
WaleedElmughrabi | 6:d30c8e8678c9 | 286 | float liquidTemp = 0; |
WaleedElmughrabi | 6:d30c8e8678c9 | 287 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 288 | wait(2); |
WaleedElmughrabi | 6:d30c8e8678c9 | 289 | |
WaleedElmughrabi | 4:06edbeb05013 | 290 | |
WaleedElmughrabi | 4:06edbeb05013 | 291 | while(1){ |
WaleedElmughrabi | 4:06edbeb05013 | 292 | //inCircle(r, cx, cy, xtest, ytest); |
WaleedElmughrabi | 4:06edbeb05013 | 293 | //serial.printf("rx = 0x%02X\n", aRxBuffer); |
WaleedElmughrabi | 4:06edbeb05013 | 294 | //tempSerial = getTemp(t); |
WaleedElmughrabi | 4:06edbeb05013 | 295 | //inpoly = pnpoly(5,x, y, xtest,ytest); |
WaleedElmughrabi | 4:06edbeb05013 | 296 | //serial.printf("inpoly = %d\r\n", inpoly); |
WaleedElmughrabi | 4:06edbeb05013 | 297 | //ans = inCircle(r, cx, cy, xtest, ytest); |
WaleedElmughrabi | 4:06edbeb05013 | 298 | //serial.printf("distance = %3.1f\r\n", ans); |
WaleedElmughrabi | 4:06edbeb05013 | 299 | // GPS |
WaleedElmughrabi | 4:06edbeb05013 | 300 | //if(gps.sample()){ |
WaleedElmughrabi | 4:06edbeb05013 | 301 | // serial.printf("%f\t%c\t%f\t%c\t%f\t%f\t%f\n\r",gps.longitude, gps.ns,gps.latitude,gps.ew, gps.alt, gps.geoid, gps.time); |
WaleedElmughrabi | 4:06edbeb05013 | 302 | // serial.printf("%d:%d:%d",gps.hour,gps.minute,gps.seconed); |
WaleedElmughrabi | 4:06edbeb05013 | 303 | // } |
WaleedElmughrabi | 6:d30c8e8678c9 | 304 | sdCard(); |
WaleedElmughrabi | 4:06edbeb05013 | 305 | while(1) { |
WaleedElmughrabi | 6:d30c8e8678c9 | 306 | //wait (1); |
WaleedElmughrabi | 4:06edbeb05013 | 307 | |
WaleedElmughrabi | 6:d30c8e8678c9 | 308 | |
WaleedElmughrabi | 4:06edbeb05013 | 309 | if (tgps.encode(GPSSerial.getc())) |
WaleedElmughrabi | 4:06edbeb05013 | 310 | { |
WaleedElmughrabi | 4:06edbeb05013 | 311 | displayInfo(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 312 | xtest = tgps.location.lng(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 313 | ytest = tgps.location.lat(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 314 | serial.printf("\r\n %3.6f, %3.6f, \r\n", ytest, xtest); |
WaleedElmughrabi | 6:d30c8e8678c9 | 315 | ans = inCircle(r, cx, cy, xtest, ytest); |
WaleedElmughrabi | 6:d30c8e8678c9 | 316 | wait(5); //little delay to prevent double writing |
WaleedElmughrabi | 6:d30c8e8678c9 | 317 | liquidTemp = getTemp(); |
WaleedElmughrabi | 6:d30c8e8678c9 | 318 | serial.printf("\r\n In geofence = %d: \r\n", ans); |
WaleedElmughrabi | 6:d30c8e8678c9 | 319 | |
WaleedElmughrabi | 4:06edbeb05013 | 320 | } |
WaleedElmughrabi | 4:06edbeb05013 | 321 | |
WaleedElmughrabi | 4:06edbeb05013 | 322 | if (millis() > 5000 && tgps.charsProcessed() < 10) |
WaleedElmughrabi | 4:06edbeb05013 | 323 | { |
WaleedElmughrabi | 4:06edbeb05013 | 324 | serial.printf("No GPS detected: check wiring.\r\n"); |
WaleedElmughrabi | 4:06edbeb05013 | 325 | // while(true); |
WaleedElmughrabi | 4:06edbeb05013 | 326 | break; |
WaleedElmughrabi | 4:06edbeb05013 | 327 | } |
WaleedElmughrabi | 6:d30c8e8678c9 | 328 | |
WaleedElmughrabi | 4:06edbeb05013 | 329 | |
WaleedElmughrabi | 4:06edbeb05013 | 330 | } |
WaleedElmughrabi | 4:06edbeb05013 | 331 | serial.printf("%d\r\n",i); |
WaleedElmughrabi | 4:06edbeb05013 | 332 | i++; |
WaleedElmughrabi | 4:06edbeb05013 | 333 | wait(1.0); |
WaleedElmughrabi | 4:06edbeb05013 | 334 | } |
WaleedElmughrabi | 4:06edbeb05013 | 335 | |
WaleedElmughrabi | 4:06edbeb05013 | 336 | |
WaleedElmughrabi | 4:06edbeb05013 | 337 | wait(5); |
WaleedElmughrabi | 4:06edbeb05013 | 338 | } |
WaleedElmughrabi | 4:06edbeb05013 | 339 | |
WaleedElmughrabi | 4:06edbeb05013 | 340 | |
WaleedElmughrabi | 4:06edbeb05013 | 341 | |
WaleedElmughrabi | 4:06edbeb05013 | 342 |