This program is for mbed-Geiger counter system. It use OLED module, GPS module (with RTC), TextLCD, SD FileSystem and some Interrupt pin.

Dependencies:   TextLCD mbed

Committer:
y_notsu
Date:
Sat Jul 02 22:05:27 2011 +0000
Revision:
0:97f8ed953c0d
rev.0.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
y_notsu 0:97f8ed953c0d 1 // MARMEX OLED and GPS test program
y_notsu 0:97f8ed953c0d 2 // Author : Yuji Notsu
y_notsu 0:97f8ed953c0d 3 // Date : 14-Jun-2011
y_notsu 0:97f8ed953c0d 4 // Revision : 0.0
y_notsu 0:97f8ed953c0d 5
y_notsu 0:97f8ed953c0d 6 /** A sample app of MARMEX_OB OLED screen drawing library
y_notsu 0:97f8ed953c0d 7 *
y_notsu 0:97f8ed953c0d 8 * @author Tedd
y_notsu 0:97f8ed953c0d 9 * @version 0.51
y_notsu 0:97f8ed953c0d 10 * @date 08-Apr-2011
y_notsu 0:97f8ed953c0d 11 *
y_notsu 0:97f8ed953c0d 12 * Released under the MIT License: http://mbed.org/license/mit
y_notsu 0:97f8ed953c0d 13 *
y_notsu 0:97f8ed953c0d 14 * MARMEX_OB_oled OLED screen drawing library for mbed
y_notsu 0:97f8ed953c0d 15 * This code has been written based on sample code and advises
y_notsu 0:97f8ed953c0d 16 * from Ochiai-san (Marutsu-Elec). Thank you!
y_notsu 0:97f8ed953c0d 17 *
y_notsu 0:97f8ed953c0d 18 * To build this code, "NokiaLCD" and "mbed" libraries are needed to be imported in a project.
y_notsu 0:97f8ed953c0d 19 * NokiaLCD library : http://mbed.org/users/simon/libraries/NokiaLCD/
y_notsu 0:97f8ed953c0d 20 */
y_notsu 0:97f8ed953c0d 21
y_notsu 0:97f8ed953c0d 22
y_notsu 0:97f8ed953c0d 23 #include "mbed.h"
y_notsu 0:97f8ed953c0d 24 #include "MARMEX_OB_oled.h"
y_notsu 0:97f8ed953c0d 25 #include "imagedata.h"
y_notsu 0:97f8ed953c0d 26 #include "gpsrtc.h"
y_notsu 0:97f8ed953c0d 27 #include "TextLCD.h"
y_notsu 0:97f8ed953c0d 28 #include "SDFileSystem.h"
y_notsu 0:97f8ed953c0d 29 #include "PowerControl/EthernetPowerControl.h"
y_notsu 0:97f8ed953c0d 30
y_notsu 0:97f8ed953c0d 31 // oled1 is for MARMEX_OB_oled board on MAPLE slot 1
y_notsu 0:97f8ed953c0d 32 MARMEX_OB_oled oled1( p5, p7, p8, p30, p11 ); // mosi, sclk, cs, rst, power_control
y_notsu 0:97f8ed953c0d 33
y_notsu 0:97f8ed953c0d 34 TextLCD lcd(p25,p24,p12,p13,p14,p23); //rs,e,d0-d3
y_notsu 0:97f8ed953c0d 35
y_notsu 0:97f8ed953c0d 36 SDFileSystem sd(p5, p6, p7, p20, "sd"); // the pinout on the mbed Cool Components workshop board
y_notsu 0:97f8ed953c0d 37 Serial pc(USBTX, USBRX); // tx, rx
y_notsu 0:97f8ed953c0d 38
y_notsu 0:97f8ed953c0d 39 InterruptIn sendpcmode(p16);
y_notsu 0:97f8ed953c0d 40 InterruptIn oledmode(p17);
y_notsu 0:97f8ed953c0d 41
y_notsu 0:97f8ed953c0d 42 //AnalogIn ain(p19);
y_notsu 0:97f8ed953c0d 43 InterruptIn ain(p18);
y_notsu 0:97f8ed953c0d 44 DigitalOut led(LED3);
y_notsu 0:97f8ed953c0d 45
y_notsu 0:97f8ed953c0d 46 float sdata;
y_notsu 0:97f8ed953c0d 47 char pcmodevalue;
y_notsu 0:97f8ed953c0d 48 char oledmodevalue;
y_notsu 0:97f8ed953c0d 49 char graphnum=0;
y_notsu 0:97f8ed953c0d 50 float graph[16];
y_notsu 0:97f8ed953c0d 51 int c1,c2,c3,c4,c5,c6;
y_notsu 0:97f8ed953c0d 52 char c1en,c2en,c3en,c4en,c5en,c6en;
y_notsu 0:97f8ed953c0d 53 float maxdata;
y_notsu 0:97f8ed953c0d 54
y_notsu 0:97f8ed953c0d 55 void oled_image2(const unsigned int *ptr2);
y_notsu 0:97f8ed953c0d 56
y_notsu 0:97f8ed953c0d 57 void changepcmode()
y_notsu 0:97f8ed953c0d 58 {
y_notsu 0:97f8ed953c0d 59 pcmodevalue=!pcmodevalue;
y_notsu 0:97f8ed953c0d 60 }
y_notsu 0:97f8ed953c0d 61
y_notsu 0:97f8ed953c0d 62 void changeoledmode()
y_notsu 0:97f8ed953c0d 63 {
y_notsu 0:97f8ed953c0d 64 oledmodevalue=!oledmodevalue;
y_notsu 0:97f8ed953c0d 65 }
y_notsu 0:97f8ed953c0d 66
y_notsu 0:97f8ed953c0d 67 void count_geiger()
y_notsu 0:97f8ed953c0d 68 {
y_notsu 0:97f8ed953c0d 69 led=1;
y_notsu 0:97f8ed953c0d 70 if(c1en==1) c1++;
y_notsu 0:97f8ed953c0d 71 if(c2en==1) c2++;
y_notsu 0:97f8ed953c0d 72 if(c3en==1) c3++;
y_notsu 0:97f8ed953c0d 73 if(c4en==1) c4++;
y_notsu 0:97f8ed953c0d 74 if(c5en==1) c5++;
y_notsu 0:97f8ed953c0d 75 if(c6en==1) c6++;
y_notsu 0:97f8ed953c0d 76 led=0;
y_notsu 0:97f8ed953c0d 77 }
y_notsu 0:97f8ed953c0d 78
y_notsu 0:97f8ed953c0d 79 void setup_pinmode()
y_notsu 0:97f8ed953c0d 80 {
y_notsu 0:97f8ed953c0d 81 //p25 lowlevel = write mode?
y_notsu 0:97f8ed953c0d 82 sendpcmode.mode(PullUp);
y_notsu 0:97f8ed953c0d 83 sendpcmode.rise(&changepcmode);
y_notsu 0:97f8ed953c0d 84 }
y_notsu 0:97f8ed953c0d 85
y_notsu 0:97f8ed953c0d 86 void setup_pinmode2()
y_notsu 0:97f8ed953c0d 87 {
y_notsu 0:97f8ed953c0d 88 oledmode.mode(PullUp);
y_notsu 0:97f8ed953c0d 89 oledmode.rise(&changeoledmode);
y_notsu 0:97f8ed953c0d 90 for(int i=0;i<=15;i++)
y_notsu 0:97f8ed953c0d 91 {
y_notsu 0:97f8ed953c0d 92 graph[i]=0.0;
y_notsu 0:97f8ed953c0d 93 }
y_notsu 0:97f8ed953c0d 94 }
y_notsu 0:97f8ed953c0d 95
y_notsu 0:97f8ed953c0d 96 void setup_pinmode3()
y_notsu 0:97f8ed953c0d 97 {
y_notsu 0:97f8ed953c0d 98 ain.mode(PullNone);
y_notsu 0:97f8ed953c0d 99 ain.rise(&count_geiger);
y_notsu 0:97f8ed953c0d 100 }
y_notsu 0:97f8ed953c0d 101
y_notsu 0:97f8ed953c0d 102
y_notsu 0:97f8ed953c0d 103 int main() {
y_notsu 0:97f8ed953c0d 104
y_notsu 0:97f8ed953c0d 105 // Initialize RTC
y_notsu 0:97f8ed953c0d 106 //
y_notsu 0:97f8ed953c0d 107 // Init_RTC(1, 11, 05, 31, TUE, 00, 55, 00); // with adjustment
y_notsu 0:97f8ed953c0d 108 //wait(1.0);
y_notsu 0:97f8ed953c0d 109 // Init_RTC(0, 00, 00, 00, 000, 00, 00, 00); // without adjustment
y_notsu 0:97f8ed953c0d 110 //
y_notsu 0:97f8ed953c0d 111
y_notsu 0:97f8ed953c0d 112 PHY_PowerDown();
y_notsu 0:97f8ed953c0d 113
y_notsu 0:97f8ed953c0d 114 pcmodevalue=0x00;
y_notsu 0:97f8ed953c0d 115 oledmodevalue=0x00;
y_notsu 0:97f8ed953c0d 116 graphnum=0;
y_notsu 0:97f8ed953c0d 117 lcd.cls();
y_notsu 0:97f8ed953c0d 118 lcd.locate(0,0);
y_notsu 0:97f8ed953c0d 119 lcd.printf("Startup");
y_notsu 0:97f8ed953c0d 120 pc.printf("Startup\n");
y_notsu 0:97f8ed953c0d 121 sdata=0.0;
y_notsu 0:97f8ed953c0d 122
y_notsu 0:97f8ed953c0d 123 //Start up window (texe base)
y_notsu 0:97f8ed953c0d 124 oled1.background( 0x000000 );
y_notsu 0:97f8ed953c0d 125 oled1.cls();
y_notsu 0:97f8ed953c0d 126 oled1.locate(0,1);
y_notsu 0:97f8ed953c0d 127 oled1.printf("Takoruka OS");
y_notsu 0:97f8ed953c0d 128 oled1.locate(0,2);
y_notsu 0:97f8ed953c0d 129 oled1.printf("starting.");
y_notsu 0:97f8ed953c0d 130 wait(1.0);
y_notsu 0:97f8ed953c0d 131 oled1.printf(".");
y_notsu 0:97f8ed953c0d 132 wait(1.0);
y_notsu 0:97f8ed953c0d 133 oled1.printf(".");
y_notsu 0:97f8ed953c0d 134 wait(1.0);
y_notsu 0:97f8ed953c0d 135 oled1.printf(".");
y_notsu 0:97f8ed953c0d 136 wait(1.0);
y_notsu 0:97f8ed953c0d 137 oled1.locate(0,3);
y_notsu 0:97f8ed953c0d 138 oled1.printf("done!");
y_notsu 0:97f8ed953c0d 139
y_notsu 0:97f8ed953c0d 140 c1=0;
y_notsu 0:97f8ed953c0d 141 c2=0;
y_notsu 0:97f8ed953c0d 142 c3=0;
y_notsu 0:97f8ed953c0d 143 c4=0;
y_notsu 0:97f8ed953c0d 144 c5=0;
y_notsu 0:97f8ed953c0d 145 c6=0;
y_notsu 0:97f8ed953c0d 146 //setup_pinmode();
y_notsu 0:97f8ed953c0d 147 //setup_pinmode2();
y_notsu 0:97f8ed953c0d 148 //setup_pinmode3();
y_notsu 0:97f8ed953c0d 149
y_notsu 0:97f8ed953c0d 150 //display Imade data of imagedata.h
y_notsu 0:97f8ed953c0d 151 wait(1.0);
y_notsu 0:97f8ed953c0d 152 oled1.cls();
y_notsu 0:97f8ed953c0d 153 oled1.locate(0,0);
y_notsu 0:97f8ed953c0d 154 oled_image2(Header1);
y_notsu 0:97f8ed953c0d 155
y_notsu 0:97f8ed953c0d 156 wait(1.0);
y_notsu 0:97f8ed953c0d 157 oled1.cls();
y_notsu 0:97f8ed953c0d 158
y_notsu 0:97f8ed953c0d 159 lcd.cls();
y_notsu 0:97f8ed953c0d 160 lcd.locate(0,0);
y_notsu 0:97f8ed953c0d 161 lcd.printf("GPS Data reading");
y_notsu 0:97f8ed953c0d 162 pc.printf("GPS data reading\n");
y_notsu 0:97f8ed953c0d 163 sGPSRTC sGPSRTC_Data;
y_notsu 0:97f8ed953c0d 164 sGPSRTC *psGPSRTC_Data;
y_notsu 0:97f8ed953c0d 165
y_notsu 0:97f8ed953c0d 166 int count = 0;
y_notsu 0:97f8ed953c0d 167 c1en=1;
y_notsu 0:97f8ed953c0d 168 c2en=0;
y_notsu 0:97f8ed953c0d 169 c3en=0;
y_notsu 0:97f8ed953c0d 170 c4en=0;
y_notsu 0:97f8ed953c0d 171 c5en=0;
y_notsu 0:97f8ed953c0d 172 c6en=0;
y_notsu 0:97f8ed953c0d 173 setup_pinmode();
y_notsu 0:97f8ed953c0d 174 setup_pinmode2();
y_notsu 0:97f8ed953c0d 175 setup_pinmode3();
y_notsu 0:97f8ed953c0d 176
y_notsu 0:97f8ed953c0d 177 while(1)
y_notsu 0:97f8ed953c0d 178 {
y_notsu 0:97f8ed953c0d 179 //Get GPSRTC data and display
y_notsu 0:97f8ed953c0d 180 Get_GPGGA_Data(&sGPSRTC_Data);
y_notsu 0:97f8ed953c0d 181 Get_RTC_Data(&sGPSRTC_Data);
y_notsu 0:97f8ed953c0d 182 psGPSRTC_Data = &sGPSRTC_Data;
y_notsu 0:97f8ed953c0d 183 //Get sensor value
y_notsu 0:97f8ed953c0d 184 //sdata = ain.read();
y_notsu 0:97f8ed953c0d 185
y_notsu 0:97f8ed953c0d 186 //oled1.cls();
y_notsu 0:97f8ed953c0d 187
y_notsu 0:97f8ed953c0d 188 if(oledmodevalue==0x01)
y_notsu 0:97f8ed953c0d 189 {
y_notsu 0:97f8ed953c0d 190 oled1.cls();
y_notsu 0:97f8ed953c0d 191 oled1.locate(0,1);
y_notsu 0:97f8ed953c0d 192 oled1.foreground(0xff00ff);
y_notsu 0:97f8ed953c0d 193 oled1.printf("RTC");
y_notsu 0:97f8ed953c0d 194 oled1.locate(0,2);
y_notsu 0:97f8ed953c0d 195 oled1.foreground(0x00ffff);
y_notsu 0:97f8ed953c0d 196 oled1.printf("%02d/%02d/%02d(%s)",
y_notsu 0:97f8ed953c0d 197 psGPSRTC_Data->bRTC_year, psGPSRTC_Data->bRTC_mon, psGPSRTC_Data->bRTC_day,
y_notsu 0:97f8ed953c0d 198 Get_Week_String(psGPSRTC_Data->bRTC_week));
y_notsu 0:97f8ed953c0d 199 oled1.locate(0,3);
y_notsu 0:97f8ed953c0d 200 oled1.printf("%02d:%02d:%02d",
y_notsu 0:97f8ed953c0d 201 psGPSRTC_Data->bRTC_hour, psGPSRTC_Data->bRTC_min, psGPSRTC_Data->bRTC_sec);
y_notsu 0:97f8ed953c0d 202 oled1.locate(0,4);
y_notsu 0:97f8ed953c0d 203 oled1.foreground(0xff0000);//Red
y_notsu 0:97f8ed953c0d 204 oled1.printf("----------");
y_notsu 0:97f8ed953c0d 205 oled1.foreground(0x00ffff); //Cyan
y_notsu 0:97f8ed953c0d 206 oled1.foreground(0xff00ff);
y_notsu 0:97f8ed953c0d 207 oled1.locate(0,5);
y_notsu 0:97f8ed953c0d 208 oled1.printf("GPS");
y_notsu 0:97f8ed953c0d 209 oled1.foreground(0xffff00); //Yellow
y_notsu 0:97f8ed953c0d 210 oled1.locate(0,6);
y_notsu 0:97f8ed953c0d 211 oled1.printf("UTC =");
y_notsu 0:97f8ed953c0d 212 oled1.printf("%02d:%02d:%02d",
y_notsu 0:97f8ed953c0d 213 psGPSRTC_Data->bGPS_UTC_hour, psGPSRTC_Data->bGPS_UTC_min, psGPSRTC_Data->bGPS_UTC_sec);
y_notsu 0:97f8ed953c0d 214 oled1.locate(0,7);
y_notsu 0:97f8ed953c0d 215 //oled1.foreground(0x00ffff); //Cyan
y_notsu 0:97f8ed953c0d 216 oled1.printf("LAT =");
y_notsu 0:97f8ed953c0d 217 oled1.printf("%c %02d:%02d:%02d", psGPSRTC_Data->cGPS_LAT,
y_notsu 0:97f8ed953c0d 218 psGPSRTC_Data->bGPS_LAT_deg, psGPSRTC_Data->bGPS_LAT_min, psGPSRTC_Data->bGPS_LAT_sec);
y_notsu 0:97f8ed953c0d 219 oled1.foreground(0xffff00); //Yellow
y_notsu 0:97f8ed953c0d 220 oled1.locate(0,8);
y_notsu 0:97f8ed953c0d 221 oled1.printf("LNG =");
y_notsu 0:97f8ed953c0d 222 oled1.printf("%c%03d:%02d:%02d", psGPSRTC_Data->cGPS_LNG,
y_notsu 0:97f8ed953c0d 223 psGPSRTC_Data->bGPS_LNG_deg, psGPSRTC_Data->bGPS_LNG_min, psGPSRTC_Data->bGPS_LNG_sec);
y_notsu 0:97f8ed953c0d 224 oled1.locate(0,9);
y_notsu 0:97f8ed953c0d 225 oled1.printf("Qual=");
y_notsu 0:97f8ed953c0d 226 oled1.printf("%c ", psGPSRTC_Data->cGPS_Quality);
y_notsu 0:97f8ed953c0d 227 oled1.locate(0,10);
y_notsu 0:97f8ed953c0d 228 oled1.foreground(0x00ffff); //Cyan
y_notsu 0:97f8ed953c0d 229 oled1.printf("Sat =");
y_notsu 0:97f8ed953c0d 230 oled1.printf("%3d ", psGPSRTC_Data->bGPS_Sat);
y_notsu 0:97f8ed953c0d 231 oled1.locate(0,11);
y_notsu 0:97f8ed953c0d 232 oled1.printf("HDOP=");
y_notsu 0:97f8ed953c0d 233 oled1.printf("%1d.%1d ", psGPSRTC_Data-> bGPS_HDOP_I, psGPSRTC_Data->bGPS_HDOP_D);
y_notsu 0:97f8ed953c0d 234 oled1.locate(0,12);
y_notsu 0:97f8ed953c0d 235 oled1.printf("ASL =");
y_notsu 0:97f8ed953c0d 236 oled1.printf("%4dm", psGPSRTC_Data->wGPS_ASL_m);
y_notsu 0:97f8ed953c0d 237 oled1.locate(0,13);
y_notsu 0:97f8ed953c0d 238 oled1.printf("GEO =");
y_notsu 0:97f8ed953c0d 239 oled1.printf("%4dm", psGPSRTC_Data->wGPS_GEO_m);
y_notsu 0:97f8ed953c0d 240 }
y_notsu 0:97f8ed953c0d 241 else //display sensor value (update 10sec)
y_notsu 0:97f8ed953c0d 242 {
y_notsu 0:97f8ed953c0d 243
y_notsu 0:97f8ed953c0d 244 switch(count)
y_notsu 0:97f8ed953c0d 245 {
y_notsu 0:97f8ed953c0d 246 case 0:
y_notsu 0:97f8ed953c0d 247 c1en=0;
y_notsu 0:97f8ed953c0d 248 sdata=c1;
y_notsu 0:97f8ed953c0d 249 c1=0;
y_notsu 0:97f8ed953c0d 250 c1en=1;
y_notsu 0:97f8ed953c0d 251 break;
y_notsu 0:97f8ed953c0d 252 case 10:
y_notsu 0:97f8ed953c0d 253 c2en=0;
y_notsu 0:97f8ed953c0d 254 sdata=c2;
y_notsu 0:97f8ed953c0d 255 c2=0;
y_notsu 0:97f8ed953c0d 256 c2en=1;
y_notsu 0:97f8ed953c0d 257 break;
y_notsu 0:97f8ed953c0d 258 case 20:
y_notsu 0:97f8ed953c0d 259 c3en=0;
y_notsu 0:97f8ed953c0d 260 sdata=c3;
y_notsu 0:97f8ed953c0d 261 c3=0;
y_notsu 0:97f8ed953c0d 262 c3en=1;
y_notsu 0:97f8ed953c0d 263 break;
y_notsu 0:97f8ed953c0d 264 case 30:
y_notsu 0:97f8ed953c0d 265 c4en=0;
y_notsu 0:97f8ed953c0d 266 sdata=c4;
y_notsu 0:97f8ed953c0d 267 c4=0;
y_notsu 0:97f8ed953c0d 268 c4en=1;
y_notsu 0:97f8ed953c0d 269 break;
y_notsu 0:97f8ed953c0d 270 case 40:
y_notsu 0:97f8ed953c0d 271 c5en=0;
y_notsu 0:97f8ed953c0d 272 sdata=c5;
y_notsu 0:97f8ed953c0d 273 c5=0;
y_notsu 0:97f8ed953c0d 274 c5en=1;
y_notsu 0:97f8ed953c0d 275 break;
y_notsu 0:97f8ed953c0d 276 case 50:
y_notsu 0:97f8ed953c0d 277 c6en=0;
y_notsu 0:97f8ed953c0d 278 sdata=c6;
y_notsu 0:97f8ed953c0d 279 c6=0;
y_notsu 0:97f8ed953c0d 280 c6en=1;
y_notsu 0:97f8ed953c0d 281 break;
y_notsu 0:97f8ed953c0d 282 default:
y_notsu 0:97f8ed953c0d 283 sdata=sdata;
y_notsu 0:97f8ed953c0d 284 break;
y_notsu 0:97f8ed953c0d 285 }
y_notsu 0:97f8ed953c0d 286 if(sdata>maxdata) maxdata=sdata;
y_notsu 0:97f8ed953c0d 287 if((count%10)==1)
y_notsu 0:97f8ed953c0d 288 {
y_notsu 0:97f8ed953c0d 289 oled1.cls();
y_notsu 0:97f8ed953c0d 290 float mSvh = float(sdata)/633.0;
y_notsu 0:97f8ed953c0d 291 graphnum++;
y_notsu 0:97f8ed953c0d 292 if(graphnum==16) graphnum=0;
y_notsu 0:97f8ed953c0d 293 graph[graphnum]=sdata;
y_notsu 0:97f8ed953c0d 294
y_notsu 0:97f8ed953c0d 295 for(int i=0;i<=15;i++)
y_notsu 0:97f8ed953c0d 296 {
y_notsu 0:97f8ed953c0d 297 int width = int(graph[i]/10);
y_notsu 0:97f8ed953c0d 298 if(i!=graphnum)
y_notsu 0:97f8ed953c0d 299 oled1.fill(i*8,28+(100-width),7,width,0xffff00);
y_notsu 0:97f8ed953c0d 300 else
y_notsu 0:97f8ed953c0d 301 oled1.fill(i*8,28+(100-width),7,width,0xff00ff);
y_notsu 0:97f8ed953c0d 302 }
y_notsu 0:97f8ed953c0d 303 oled1.locate(0,1);
y_notsu 0:97f8ed953c0d 304 oled1.foreground(0xff00ff); //Magenta
y_notsu 0:97f8ed953c0d 305 oled1.printf("Sensor value");
y_notsu 0:97f8ed953c0d 306 oled1.locate(0,2);
y_notsu 0:97f8ed953c0d 307 oled1.foreground(0x00ffff); //Cyan
y_notsu 0:97f8ed953c0d 308 oled1.printf("%4.1f max:%4.1f",sdata,maxdata);
y_notsu 0:97f8ed953c0d 309 oled1.locate(0,3);
y_notsu 0:97f8ed953c0d 310 oled1.printf("%7.4f [uSv/h]",mSvh);
y_notsu 0:97f8ed953c0d 311 }
y_notsu 0:97f8ed953c0d 312 }
y_notsu 0:97f8ed953c0d 313
y_notsu 0:97f8ed953c0d 314 count ++;
y_notsu 0:97f8ed953c0d 315
y_notsu 0:97f8ed953c0d 316 if((count%10)==1)
y_notsu 0:97f8ed953c0d 317 {
y_notsu 0:97f8ed953c0d 318 FILE *fp=fopen("/sd/datalog.csv","a");
y_notsu 0:97f8ed953c0d 319 if(fp==NULL)
y_notsu 0:97f8ed953c0d 320 {
y_notsu 0:97f8ed953c0d 321 error("Could not open file for write\n");
y_notsu 0:97f8ed953c0d 322 }
y_notsu 0:97f8ed953c0d 323 fprintf(fp,"UTC ,");
y_notsu 0:97f8ed953c0d 324 fprintf(fp,"%02d:%02d:%02d ,",
y_notsu 0:97f8ed953c0d 325 psGPSRTC_Data->bRTC_hour, psGPSRTC_Data->bRTC_min, psGPSRTC_Data->bRTC_sec);
y_notsu 0:97f8ed953c0d 326 fprintf(fp,"LAT ,");
y_notsu 0:97f8ed953c0d 327 fprintf(fp,"%c,%02d:%02d:%02d ,", psGPSRTC_Data->cGPS_LAT,
y_notsu 0:97f8ed953c0d 328 psGPSRTC_Data->bGPS_LAT_deg, psGPSRTC_Data->bGPS_LAT_min, psGPSRTC_Data->bGPS_LAT_sec);
y_notsu 0:97f8ed953c0d 329 fprintf(fp,"LNG ,");
y_notsu 0:97f8ed953c0d 330 fprintf(fp,"%c, %03d:%02d:%02d ,", psGPSRTC_Data->cGPS_LNG,
y_notsu 0:97f8ed953c0d 331 psGPSRTC_Data->bGPS_LNG_deg, psGPSRTC_Data->bGPS_LNG_min, psGPSRTC_Data->bGPS_LNG_sec);
y_notsu 0:97f8ed953c0d 332 fprintf(fp,"Count,%4.2f \n",sdata);
y_notsu 0:97f8ed953c0d 333 fclose(fp);
y_notsu 0:97f8ed953c0d 334 }
y_notsu 0:97f8ed953c0d 335 //Serial PC communication
y_notsu 0:97f8ed953c0d 336 if(pcmodevalue==0x00)
y_notsu 0:97f8ed953c0d 337 {
y_notsu 0:97f8ed953c0d 338 pc.printf("UTC,");
y_notsu 0:97f8ed953c0d 339 pc.printf("%02d:%02d:%02d ,",
y_notsu 0:97f8ed953c0d 340 psGPSRTC_Data->bRTC_hour, psGPSRTC_Data->bRTC_min, psGPSRTC_Data->bRTC_sec);
y_notsu 0:97f8ed953c0d 341 pc.printf("LAT,");
y_notsu 0:97f8ed953c0d 342 pc.printf("%c,%02d:%02d:%02d ,", psGPSRTC_Data->cGPS_LAT,
y_notsu 0:97f8ed953c0d 343 psGPSRTC_Data->bGPS_LAT_deg, psGPSRTC_Data->bGPS_LAT_min, psGPSRTC_Data->bGPS_LAT_sec);
y_notsu 0:97f8ed953c0d 344 pc.printf("LNG,");
y_notsu 0:97f8ed953c0d 345 pc.printf("%c, %03d:%02d:%02d ,", psGPSRTC_Data->cGPS_LNG,
y_notsu 0:97f8ed953c0d 346 psGPSRTC_Data->bGPS_LNG_deg, psGPSRTC_Data->bGPS_LNG_min, psGPSRTC_Data->bGPS_LNG_sec);
y_notsu 0:97f8ed953c0d 347 }
y_notsu 0:97f8ed953c0d 348 if(count==60) count=0;
y_notsu 0:97f8ed953c0d 349
y_notsu 0:97f8ed953c0d 350 wait(0.3);
y_notsu 0:97f8ed953c0d 351
y_notsu 0:97f8ed953c0d 352 if((psGPSRTC_Data->bGPS_Sat)<=3)
y_notsu 0:97f8ed953c0d 353 {
y_notsu 0:97f8ed953c0d 354 lcd.cls();
y_notsu 0:97f8ed953c0d 355 lcd.locate(0,0);
y_notsu 0:97f8ed953c0d 356 lcd.printf("Can't read GPS");
y_notsu 0:97f8ed953c0d 357 }
y_notsu 0:97f8ed953c0d 358 else
y_notsu 0:97f8ed953c0d 359 {
y_notsu 0:97f8ed953c0d 360 lcd.cls();
y_notsu 0:97f8ed953c0d 361 lcd.locate(0,0);
y_notsu 0:97f8ed953c0d 362 lcd.printf("GPS data reading");
y_notsu 0:97f8ed953c0d 363 }
y_notsu 0:97f8ed953c0d 364
y_notsu 0:97f8ed953c0d 365 lcd.locate(0,1);
y_notsu 0:97f8ed953c0d 366 lcd.printf("Count=%4.1f",sdata);
y_notsu 0:97f8ed953c0d 367 if(pcmodevalue==0x00)
y_notsu 0:97f8ed953c0d 368 pc.printf("Count=%4.1f\n",sdata);
y_notsu 0:97f8ed953c0d 369
y_notsu 0:97f8ed953c0d 370 }
y_notsu 0:97f8ed953c0d 371
y_notsu 0:97f8ed953c0d 372
y_notsu 0:97f8ed953c0d 373 }
y_notsu 0:97f8ed953c0d 374
y_notsu 0:97f8ed953c0d 375 void oled_image2(const unsigned int *ptr2)
y_notsu 0:97f8ed953c0d 376 {
y_notsu 0:97f8ed953c0d 377 short height,width;
y_notsu 0:97f8ed953c0d 378 int colour;
y_notsu 0:97f8ed953c0d 379 height = *ptr2;
y_notsu 0:97f8ed953c0d 380 ptr2++;
y_notsu 0:97f8ed953c0d 381 width = *ptr2;
y_notsu 0:97f8ed953c0d 382 ptr2++;
y_notsu 0:97f8ed953c0d 383 oled1.locate(0,0);
y_notsu 0:97f8ed953c0d 384 for(int i=1;i<=width;i++)
y_notsu 0:97f8ed953c0d 385 {
y_notsu 0:97f8ed953c0d 386 for(int j=1;j<=height;j++)
y_notsu 0:97f8ed953c0d 387 {
y_notsu 0:97f8ed953c0d 388 colour = (((*ptr2&0xF800)<<8) | ((*ptr2&0x07E0)<<5) | ((*ptr2&0x001F)<<3));
y_notsu 0:97f8ed953c0d 389 oled1.pixel(j,i,colour);
y_notsu 0:97f8ed953c0d 390 ptr2++;
y_notsu 0:97f8ed953c0d 391 }
y_notsu 0:97f8ed953c0d 392 }
y_notsu 0:97f8ed953c0d 393 }
y_notsu 0:97f8ed953c0d 394
y_notsu 0:97f8ed953c0d 395 /*
y_notsu 0:97f8ed953c0d 396 * history:
y_notsu 0:97f8ed953c0d 397 * 0.5 (2011-Apr-07) : initial published version
y_notsu 0:97f8ed953c0d 398 * 0.51 (2011-Apr-08) : minor modification to make the source more consistent (use " MARMEX_OB_oled::HEIGHT" instead of 128)
y_notsu 0:97f8ed953c0d 399 */