This program is for mbed-Geiger counter system. It use OLED module, GPS module (with RTC), TextLCD, SD FileSystem and some Interrupt pin.
main.cpp@0:97f8ed953c0d, 2011-07-02 (annotated)
- Committer:
- y_notsu
- Date:
- Sat Jul 02 22:05:27 2011 +0000
- Revision:
- 0:97f8ed953c0d
rev.0.0
Who changed what in which revision?
User | Revision | Line number | New 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 | */ |