http://http://diytec.web.fc2.com/mark2r2/
Dependencies: EthernetNetIf NTPClient_NetServices mbed ConfigFile
main.cpp@0:08a4d61cd84c, 2011-09-20 (annotated)
- Committer:
- mark2r2
- Date:
- Tue Sep 20 12:46:26 2011 +0000
- Revision:
- 0:08a4d61cd84c
V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mark2r2 | 0:08a4d61cd84c | 1 | /************************************************************* |
mark2r2 | 0:08a4d61cd84c | 2 | |
mark2r2 | 0:08a4d61cd84c | 3 | main.c |
mark2r2 | 0:08a4d61cd84c | 4 | |
mark2r2 | 0:08a4d61cd84c | 5 | *************************************************************/ |
mark2r2 | 0:08a4d61cd84c | 6 | #include "geiger.h" |
mark2r2 | 0:08a4d61cd84c | 7 | |
mark2r2 | 0:08a4d61cd84c | 8 | void calculate_sv(){ |
mark2r2 | 0:08a4d61cd84c | 9 | cpm = 0; |
mark2r2 | 0:08a4d61cd84c | 10 | for(int i=0; i<=first_touch_index; i++){ |
mark2r2 | 0:08a4d61cd84c | 11 | cpm += cpm_array[i]; |
mark2r2 | 0:08a4d61cd84c | 12 | } |
mark2r2 | 0:08a4d61cd84c | 13 | cpm /= ((first_touch_index+1)*((float)CHUNK/60)); |
mark2r2 | 0:08a4d61cd84c | 14 | |
mark2r2 | 0:08a4d61cd84c | 15 | uSv = cpm/carib + offset_usv; |
mark2r2 | 0:08a4d61cd84c | 16 | if (uSv <0) uSv = 0; |
mark2r2 | 0:08a4d61cd84c | 17 | |
mark2r2 | 0:08a4d61cd84c | 18 | //peak usv set |
mark2r2 | 0:08a4d61cd84c | 19 | if(peak_uSv<uSv){ |
mark2r2 | 0:08a4d61cd84c | 20 | peak_uSv=uSv; |
mark2r2 | 0:08a4d61cd84c | 21 | } |
mark2r2 | 0:08a4d61cd84c | 22 | |
mark2r2 | 0:08a4d61cd84c | 23 | // for long term average |
mark2r2 | 0:08a4d61cd84c | 24 | long_cpm=0; |
mark2r2 | 0:08a4d61cd84c | 25 | unsigned long cpm_sum=0; |
mark2r2 | 0:08a4d61cd84c | 26 | for (int i=0; i<= long_first_touch_index; i++) { |
mark2r2 | 0:08a4d61cd84c | 27 | cpm_sum += long_cpm_array[i]; |
mark2r2 | 0:08a4d61cd84c | 28 | } |
mark2r2 | 0:08a4d61cd84c | 29 | cpm_sum *= 60; |
mark2r2 | 0:08a4d61cd84c | 30 | long_cpm = (float)cpm_sum / ((long_first_touch_index)*60+count_second); |
mark2r2 | 0:08a4d61cd84c | 31 | long_uSv = long_cpm/carib + offset_usv; |
mark2r2 | 0:08a4d61cd84c | 32 | |
mark2r2 | 0:08a4d61cd84c | 33 | #ifdef DEBUG |
mark2r2 | 0:08a4d61cd84c | 34 | pc.printf("cpm=%3d,usv=%.3f,longcpm=%ld,long_usv=%.3f\r\n",(int)cpm,uSv,(long)long_cpm,long_uSv); |
mark2r2 | 0:08a4d61cd84c | 35 | #endif |
mark2r2 | 0:08a4d61cd84c | 36 | |
mark2r2 | 0:08a4d61cd84c | 37 | } |
mark2r2 | 0:08a4d61cd84c | 38 | |
mark2r2 | 0:08a4d61cd84c | 39 | void next_geiger_countup(){ |
mark2r2 | 0:08a4d61cd84c | 40 | |
mark2r2 | 0:08a4d61cd84c | 41 | cnt = 0; |
mark2r2 | 0:08a4d61cd84c | 42 | if(++cpm_index>=cpm_array_max){ |
mark2r2 | 0:08a4d61cd84c | 43 | cpm_index=0; |
mark2r2 | 0:08a4d61cd84c | 44 | } |
mark2r2 | 0:08a4d61cd84c | 45 | //first touch index count up |
mark2r2 | 0:08a4d61cd84c | 46 | if(cpm_index>first_touch_index){ |
mark2r2 | 0:08a4d61cd84c | 47 | first_touch_index=cpm_index; |
mark2r2 | 0:08a4d61cd84c | 48 | } |
mark2r2 | 0:08a4d61cd84c | 49 | cpm_array[cpm_index]=cnt; |
mark2r2 | 0:08a4d61cd84c | 50 | |
mark2r2 | 0:08a4d61cd84c | 51 | // for long term average |
mark2r2 | 0:08a4d61cd84c | 52 | if (++count_second >= 60) { |
mark2r2 | 0:08a4d61cd84c | 53 | if (++long_cpm_index >= long_cpm_array_max+1) { |
mark2r2 | 0:08a4d61cd84c | 54 | long_cpm_index = 0; |
mark2r2 | 0:08a4d61cd84c | 55 | } |
mark2r2 | 0:08a4d61cd84c | 56 | long_cpm_array[long_cpm_index] = 0; |
mark2r2 | 0:08a4d61cd84c | 57 | count_second = 0; |
mark2r2 | 0:08a4d61cd84c | 58 | |
mark2r2 | 0:08a4d61cd84c | 59 | if(long_cpm_index > long_first_touch_index){ |
mark2r2 | 0:08a4d61cd84c | 60 | long_first_touch_index = long_cpm_index; |
mark2r2 | 0:08a4d61cd84c | 61 | } |
mark2r2 | 0:08a4d61cd84c | 62 | } |
mark2r2 | 0:08a4d61cd84c | 63 | |
mark2r2 | 0:08a4d61cd84c | 64 | } |
mark2r2 | 0:08a4d61cd84c | 65 | |
mark2r2 | 0:08a4d61cd84c | 66 | |
mark2r2 | 0:08a4d61cd84c | 67 | // Timer -- called every 1 min. |
mark2r2 | 0:08a4d61cd84c | 68 | Ticker timer; |
mark2r2 | 0:08a4d61cd84c | 69 | |
mark2r2 | 0:08a4d61cd84c | 70 | void attime(){ |
mark2r2 | 0:08a4d61cd84c | 71 | |
mark2r2 | 0:08a4d61cd84c | 72 | next_geiger_countup(); |
mark2r2 | 0:08a4d61cd84c | 73 | if(++updateintervalcount > updateinterval){ |
mark2r2 | 0:08a4d61cd84c | 74 | updateflag=1; |
mark2r2 | 0:08a4d61cd84c | 75 | updateintervalcount=0; |
mark2r2 | 0:08a4d61cd84c | 76 | } |
mark2r2 | 0:08a4d61cd84c | 77 | } |
mark2r2 | 0:08a4d61cd84c | 78 | |
mark2r2 | 0:08a4d61cd84c | 79 | |
mark2r2 | 0:08a4d61cd84c | 80 | void geiger() |
mark2r2 | 0:08a4d61cd84c | 81 | { |
mark2r2 | 0:08a4d61cd84c | 82 | if(mode==1){ |
mark2r2 | 0:08a4d61cd84c | 83 | read_dma_data(); |
mark2r2 | 0:08a4d61cd84c | 84 | } |
mark2r2 | 0:08a4d61cd84c | 85 | |
mark2r2 | 0:08a4d61cd84c | 86 | cnt++; |
mark2r2 | 0:08a4d61cd84c | 87 | cpm_array[cpm_index]=cnt; |
mark2r2 | 0:08a4d61cd84c | 88 | long_cpm_array[long_cpm_index]++; |
mark2r2 | 0:08a4d61cd84c | 89 | |
mark2r2 | 0:08a4d61cd84c | 90 | *outLED=1; |
mark2r2 | 0:08a4d61cd84c | 91 | if(sound==1) *buzzer=1; |
mark2r2 | 0:08a4d61cd84c | 92 | click.attach(&buzzer_off,0.03); |
mark2r2 | 0:08a4d61cd84c | 93 | } |
mark2r2 | 0:08a4d61cd84c | 94 | |
mark2r2 | 0:08a4d61cd84c | 95 | void whereami() { |
mark2r2 | 0:08a4d61cd84c | 96 | if(gps->sample()&& gps->longitude!=0 && gps->latitude!=0) { |
mark2r2 | 0:08a4d61cd84c | 97 | printf("GPS:%f/%f,", gps->longitude, gps->latitude); |
mark2r2 | 0:08a4d61cd84c | 98 | } |
mark2r2 | 0:08a4d61cd84c | 99 | } |
mark2r2 | 0:08a4d61cd84c | 100 | |
mark2r2 | 0:08a4d61cd84c | 101 | |
mark2r2 | 0:08a4d61cd84c | 102 | void console_output(){ |
mark2r2 | 0:08a4d61cd84c | 103 | char msg[256]; |
mark2r2 | 0:08a4d61cd84c | 104 | msg[0]='\0'; |
mark2r2 | 0:08a4d61cd84c | 105 | if(++console_output_flag>2){ |
mark2r2 | 0:08a4d61cd84c | 106 | printable_msg(msg); |
mark2r2 | 0:08a4d61cd84c | 107 | printf("%s",msg); |
mark2r2 | 0:08a4d61cd84c | 108 | console_output_flag=0; |
mark2r2 | 0:08a4d61cd84c | 109 | } |
mark2r2 | 0:08a4d61cd84c | 110 | } |
mark2r2 | 0:08a4d61cd84c | 111 | |
mark2r2 | 0:08a4d61cd84c | 112 | //NTP setup |
mark2r2 | 0:08a4d61cd84c | 113 | void ntpget() { |
mark2r2 | 0:08a4d61cd84c | 114 | |
mark2r2 | 0:08a4d61cd84c | 115 | Host server(IpAddr(), 123, "jp.pool.ntp.org"); |
mark2r2 | 0:08a4d61cd84c | 116 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 117 | lcd.locate(0,0); |
mark2r2 | 0:08a4d61cd84c | 118 | lcd.printf("Get NTP."); |
mark2r2 | 0:08a4d61cd84c | 119 | ntpRet = ntp.setTime(server); |
mark2r2 | 0:08a4d61cd84c | 120 | |
mark2r2 | 0:08a4d61cd84c | 121 | } |
mark2r2 | 0:08a4d61cd84c | 122 | |
mark2r2 | 0:08a4d61cd84c | 123 | void pulldown() { |
mark2r2 | 0:08a4d61cd84c | 124 | DigitalIn dp05(p5); dp05.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 125 | DigitalIn dp06(p6); dp06.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 126 | DigitalIn dp07(p7); dp07.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 127 | DigitalIn dp08(p8); dp08.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 128 | DigitalIn dp09(p9); dp09.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 129 | DigitalIn dp10(p10); dp10.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 130 | DigitalIn dp11(p11); dp11.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 131 | DigitalIn dp12(p12); dp12.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 132 | DigitalIn dp13(p13); dp13.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 133 | DigitalIn dp14(p14); dp14.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 134 | DigitalIn dp15(p15); dp15.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 135 | DigitalIn dp16(p16); dp16.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 136 | DigitalIn dp17(p17); dp17.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 137 | //DigitalIn dp18(p18); dp18.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 138 | DigitalIn dp19(p19); dp19.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 139 | DigitalIn dp20(p20); dp20.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 140 | DigitalIn dp21(p21); dp21.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 141 | //DigitalIn dp22(p22); dp22.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 142 | //DigitalIn dp23(p23); dp23.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 143 | //DigitalIn dp24(p24); dp24.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 144 | DigitalIn dp25(p25); dp25.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 145 | //DigitalIn dp26(p26); dp26.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 146 | //DigitalIn dp27(p27); dp27.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 147 | //DigitalIn dp28(p28); dp28.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 148 | //DigitalIn dp29(p29); dp29.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 149 | //DigitalIn dp30(p30); dp30.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 150 | } |
mark2r2 | 0:08a4d61cd84c | 151 | |
mark2r2 | 0:08a4d61cd84c | 152 | /**************** main ***************************/ |
mark2r2 | 0:08a4d61cd84c | 153 | |
mark2r2 | 0:08a4d61cd84c | 154 | int main() { |
mark2r2 | 0:08a4d61cd84c | 155 | pulldown(); |
mark2r2 | 0:08a4d61cd84c | 156 | |
mark2r2 | 0:08a4d61cd84c | 157 | AnalogOut tri(p18); |
mark2r2 | 0:08a4d61cd84c | 158 | tri = 0.0; |
mark2r2 | 0:08a4d61cd84c | 159 | |
mark2r2 | 0:08a4d61cd84c | 160 | //cpu_setting(); |
mark2r2 | 0:08a4d61cd84c | 161 | |
mark2r2 | 0:08a4d61cd84c | 162 | // See http://mbed.org/users/no2chem/notebook/mbed-clock-control--benchmarks/ |
mark2r2 | 0:08a4d61cd84c | 163 | setSystemFrequency(0x3, 0x1, cpu_speed, 1); // Set clock freq 96MHz (full speed) |
mark2r2 | 0:08a4d61cd84c | 164 | SystemCoreClockUpdate(); |
mark2r2 | 0:08a4d61cd84c | 165 | pc.baud(460800); |
mark2r2 | 0:08a4d61cd84c | 166 | |
mark2r2 | 0:08a4d61cd84c | 167 | EthernetErr ethErr; |
mark2r2 | 0:08a4d61cd84c | 168 | |
mark2r2 | 0:08a4d61cd84c | 169 | environment_setting(fwserver); |
mark2r2 | 0:08a4d61cd84c | 170 | |
mark2r2 | 0:08a4d61cd84c | 171 | // malloc for long average |
mark2r2 | 0:08a4d61cd84c | 172 | long_cpm_array = (unsigned int *)malloc((long_cpm_array_max+1) * sizeof(unsigned int) ); |
mark2r2 | 0:08a4d61cd84c | 173 | if (long_cpm_array == NULL) { |
mark2r2 | 0:08a4d61cd84c | 174 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 175 | lcd.printf("Can't malloc for long_cpm_array"); |
mark2r2 | 0:08a4d61cd84c | 176 | pc.printf("Can't malloc for long_cpm_array"); |
mark2r2 | 0:08a4d61cd84c | 177 | abort(); |
mark2r2 | 0:08a4d61cd84c | 178 | } |
mark2r2 | 0:08a4d61cd84c | 179 | |
mark2r2 | 0:08a4d61cd84c | 180 | if (mode != -1) { |
mark2r2 | 0:08a4d61cd84c | 181 | switch(updatetype){ |
mark2r2 | 0:08a4d61cd84c | 182 | case 0: |
mark2r2 | 0:08a4d61cd84c | 183 | break; |
mark2r2 | 0:08a4d61cd84c | 184 | case 1: |
mark2r2 | 0:08a4d61cd84c | 185 | twitter_setup(); |
mark2r2 | 0:08a4d61cd84c | 186 | break; |
mark2r2 | 0:08a4d61cd84c | 187 | case 2: |
mark2r2 | 0:08a4d61cd84c | 188 | pachube_setup(&appconf); |
mark2r2 | 0:08a4d61cd84c | 189 | break; |
mark2r2 | 0:08a4d61cd84c | 190 | default: |
mark2r2 | 0:08a4d61cd84c | 191 | lcd.cls();lcd.locate(0,0); |
mark2r2 | 0:08a4d61cd84c | 192 | lcd.printf("No update to the internet\n"); |
mark2r2 | 0:08a4d61cd84c | 193 | break; |
mark2r2 | 0:08a4d61cd84c | 194 | } |
mark2r2 | 0:08a4d61cd84c | 195 | wait(0.5); |
mark2r2 | 0:08a4d61cd84c | 196 | } |
mark2r2 | 0:08a4d61cd84c | 197 | |
mark2r2 | 0:08a4d61cd84c | 198 | // ****** Initializing objects ******** |
mark2r2 | 0:08a4d61cd84c | 199 | PachubeV2CSV web(appconf.apikey); |
mark2r2 | 0:08a4d61cd84c | 200 | |
mark2r2 | 0:08a4d61cd84c | 201 | if (mode==1) { |
mark2r2 | 0:08a4d61cd84c | 202 | AnalogIn Sense15_(pin_assign(AnalogInput_pin_number)); |
mark2r2 | 0:08a4d61cd84c | 203 | Sense15=&Sense15_; |
mark2r2 | 0:08a4d61cd84c | 204 | } |
mark2r2 | 0:08a4d61cd84c | 205 | |
mark2r2 | 0:08a4d61cd84c | 206 | InterruptIn Geiger_signal(pin_assign(GMInterrupt_pin_number)); // Geiger signal |
mark2r2 | 0:08a4d61cd84c | 207 | |
mark2r2 | 0:08a4d61cd84c | 208 | DigitalOut buzzer_(pin_assign(Buzzer_pin_number)); |
mark2r2 | 0:08a4d61cd84c | 209 | buzzer=&buzzer_; |
mark2r2 | 0:08a4d61cd84c | 210 | |
mark2r2 | 0:08a4d61cd84c | 211 | DigitalOut outLED_(pin_assign(LED_pin_number)); |
mark2r2 | 0:08a4d61cd84c | 212 | outLED=&outLED_; |
mark2r2 | 0:08a4d61cd84c | 213 | |
mark2r2 | 0:08a4d61cd84c | 214 | GPS gps_(pin_assign(GPStx_pin_number), pin_assign(GPSrx_pin_number)); |
mark2r2 | 0:08a4d61cd84c | 215 | gps=&gps_; |
mark2r2 | 0:08a4d61cd84c | 216 | |
mark2r2 | 0:08a4d61cd84c | 217 | if (mode != -1) { |
mark2r2 | 0:08a4d61cd84c | 218 | printf("Version: %s\n",VERSION); |
mark2r2 | 0:08a4d61cd84c | 219 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 220 | lcd.printf("Ver %s\n",VERSION); |
mark2r2 | 0:08a4d61cd84c | 221 | wait(2); |
mark2r2 | 0:08a4d61cd84c | 222 | |
mark2r2 | 0:08a4d61cd84c | 223 | char msg[256] = ""; |
mark2r2 | 0:08a4d61cd84c | 224 | fullcalendarHyoji(msg); |
mark2r2 | 0:08a4d61cd84c | 225 | printf("Self Clock: %s\n",msg); |
mark2r2 | 0:08a4d61cd84c | 226 | |
mark2r2 | 0:08a4d61cd84c | 227 | // Ethernet setup |
mark2r2 | 0:08a4d61cd84c | 228 | fwup = new FirmwareUpdater(fwserver, BINNAME, &commonClient,true); |
mark2r2 | 0:08a4d61cd84c | 229 | |
mark2r2 | 0:08a4d61cd84c | 230 | if (eth0.link()) { |
mark2r2 | 0:08a4d61cd84c | 231 | lcd.locate(0,0);lcd.cls();lcd.printf("Setting up the Internet(DHCP)\n"); |
mark2r2 | 0:08a4d61cd84c | 232 | ethErr = eth.setup(); |
mark2r2 | 0:08a4d61cd84c | 233 | lcd.cls(); lcd.locate(0,0); |
mark2r2 | 0:08a4d61cd84c | 234 | if(ethErr){ |
mark2r2 | 0:08a4d61cd84c | 235 | lcd.printf("Please plug into the Internet."); |
mark2r2 | 0:08a4d61cd84c | 236 | printf("Error %d in setup.\n", ethErr); |
mark2r2 | 0:08a4d61cd84c | 237 | }else{ |
mark2r2 | 0:08a4d61cd84c | 238 | noInternet=0; |
mark2r2 | 0:08a4d61cd84c | 239 | IpAddr ipadr = eth.getIp(); |
mark2r2 | 0:08a4d61cd84c | 240 | lcd.printf("IP=%d.%d.%d.%d\n", |
mark2r2 | 0:08a4d61cd84c | 241 | ipadr[0],ipadr[1],ipadr[2],ipadr[3]); |
mark2r2 | 0:08a4d61cd84c | 242 | wait(2); |
mark2r2 | 0:08a4d61cd84c | 243 | if(firmware_update_interval > 0) { |
mark2r2 | 0:08a4d61cd84c | 244 | check_newfirm(); |
mark2r2 | 0:08a4d61cd84c | 245 | } |
mark2r2 | 0:08a4d61cd84c | 246 | ntpget(); |
mark2r2 | 0:08a4d61cd84c | 247 | |
mark2r2 | 0:08a4d61cd84c | 248 | memset((char *)msg, '\0', 256); |
mark2r2 | 0:08a4d61cd84c | 249 | fullcalendarHyoji(msg); |
mark2r2 | 0:08a4d61cd84c | 250 | printf("NTP Clock: %s\n",msg); |
mark2r2 | 0:08a4d61cd84c | 251 | } |
mark2r2 | 0:08a4d61cd84c | 252 | } |
mark2r2 | 0:08a4d61cd84c | 253 | } // end if (mode != -1) |
mark2r2 | 0:08a4d61cd84c | 254 | |
mark2r2 | 0:08a4d61cd84c | 255 | if (mode == 1) { |
mark2r2 | 0:08a4d61cd84c | 256 | setup_adcdma(); |
mark2r2 | 0:08a4d61cd84c | 257 | } |
mark2r2 | 0:08a4d61cd84c | 258 | |
mark2r2 | 0:08a4d61cd84c | 259 | // Geiger setup |
mark2r2 | 0:08a4d61cd84c | 260 | float stepvolt; |
mark2r2 | 0:08a4d61cd84c | 261 | const int step=40; |
mark2r2 | 0:08a4d61cd84c | 262 | for (stepvolt=0; stepvolt<volt; ) { |
mark2r2 | 0:08a4d61cd84c | 263 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 264 | lcd.printf("volt=%.0f\n", stepvolt); |
mark2r2 | 0:08a4d61cd84c | 265 | tri = stepvolt/voltagedivider/3.3; |
mark2r2 | 0:08a4d61cd84c | 266 | wait(0.5); |
mark2r2 | 0:08a4d61cd84c | 267 | stepvolt+=step; |
mark2r2 | 0:08a4d61cd84c | 268 | } |
mark2r2 | 0:08a4d61cd84c | 269 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 270 | lcd.printf("volt=%.0f\n", volt); |
mark2r2 | 0:08a4d61cd84c | 271 | tri = volt/voltagedivider/3.3; |
mark2r2 | 0:08a4d61cd84c | 272 | wait(0.5); |
mark2r2 | 0:08a4d61cd84c | 273 | |
mark2r2 | 0:08a4d61cd84c | 274 | for(int i=10; i>0; i--) { |
mark2r2 | 0:08a4d61cd84c | 275 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 276 | lcd.printf("Wait %2dsec for stabilize voltage",i); |
mark2r2 | 0:08a4d61cd84c | 277 | wait(1); |
mark2r2 | 0:08a4d61cd84c | 278 | } |
mark2r2 | 0:08a4d61cd84c | 279 | |
mark2r2 | 0:08a4d61cd84c | 280 | Geiger_signal.rise(&geiger); |
mark2r2 | 0:08a4d61cd84c | 281 | Geiger_signal.mode(PullDown); |
mark2r2 | 0:08a4d61cd84c | 282 | |
mark2r2 | 0:08a4d61cd84c | 283 | // timer interrupt |
mark2r2 | 0:08a4d61cd84c | 284 | timer.attach(&attime, CHUNK); |
mark2r2 | 0:08a4d61cd84c | 285 | |
mark2r2 | 0:08a4d61cd84c | 286 | int firmware_update_term = firmware_update_interval * 60 / (updateinterval/60); |
mark2r2 | 0:08a4d61cd84c | 287 | int firmware_update_counter=0; |
mark2r2 | 0:08a4d61cd84c | 288 | |
mark2r2 | 0:08a4d61cd84c | 289 | if (mode != -1) { |
mark2r2 | 0:08a4d61cd84c | 290 | for(int i=init_stabilize_time; i>0; i--) { |
mark2r2 | 0:08a4d61cd84c | 291 | lcd.cls(); |
mark2r2 | 0:08a4d61cd84c | 292 | lcd.printf("Wait %2dsec for stabilize cpm",i); |
mark2r2 | 0:08a4d61cd84c | 293 | wait(1); |
mark2r2 | 0:08a4d61cd84c | 294 | } |
mark2r2 | 0:08a4d61cd84c | 295 | } |
mark2r2 | 0:08a4d61cd84c | 296 | |
mark2r2 | 0:08a4d61cd84c | 297 | //************* Main Loop ******************// |
mark2r2 | 0:08a4d61cd84c | 298 | while(1){ |
mark2r2 | 0:08a4d61cd84c | 299 | |
mark2r2 | 0:08a4d61cd84c | 300 | if (mode == -1) { |
mark2r2 | 0:08a4d61cd84c | 301 | LCD_cpm_output(); |
mark2r2 | 0:08a4d61cd84c | 302 | } else if (mode != 3) { |
mark2r2 | 0:08a4d61cd84c | 303 | LCD_time_and_output(); |
mark2r2 | 0:08a4d61cd84c | 304 | } |
mark2r2 | 0:08a4d61cd84c | 305 | // console_output(); |
mark2r2 | 0:08a4d61cd84c | 306 | |
mark2r2 | 0:08a4d61cd84c | 307 | wait(1.0); |
mark2r2 | 0:08a4d61cd84c | 308 | if(mode==2){ |
mark2r2 | 0:08a4d61cd84c | 309 | whereami(); |
mark2r2 | 0:08a4d61cd84c | 310 | } |
mark2r2 | 0:08a4d61cd84c | 311 | if(mode != -1 && updateflag){ |
mark2r2 | 0:08a4d61cd84c | 312 | updateflag=0; |
mark2r2 | 0:08a4d61cd84c | 313 | if (noInternet==1 && eth0.link()==1){ |
mark2r2 | 0:08a4d61cd84c | 314 | ethErr = eth.setup(); |
mark2r2 | 0:08a4d61cd84c | 315 | if(ethErr) { |
mark2r2 | 0:08a4d61cd84c | 316 | } else { |
mark2r2 | 0:08a4d61cd84c | 317 | noInternet=0; |
mark2r2 | 0:08a4d61cd84c | 318 | ntpget(); |
mark2r2 | 0:08a4d61cd84c | 319 | } |
mark2r2 | 0:08a4d61cd84c | 320 | } |
mark2r2 | 0:08a4d61cd84c | 321 | |
mark2r2 | 0:08a4d61cd84c | 322 | if (!noInternet) { |
mark2r2 | 0:08a4d61cd84c | 323 | switch(updatetype){ |
mark2r2 | 0:08a4d61cd84c | 324 | case 0: |
mark2r2 | 0:08a4d61cd84c | 325 | break; |
mark2r2 | 0:08a4d61cd84c | 326 | case 1: |
mark2r2 | 0:08a4d61cd84c | 327 | twitter_output(); |
mark2r2 | 0:08a4d61cd84c | 328 | break; |
mark2r2 | 0:08a4d61cd84c | 329 | case 2: |
mark2r2 | 0:08a4d61cd84c | 330 | printf("pachube\r\n"); |
mark2r2 | 0:08a4d61cd84c | 331 | pachube_output(&web, &commonClient); |
mark2r2 | 0:08a4d61cd84c | 332 | printf("data uploaded to pachube\n"); |
mark2r2 | 0:08a4d61cd84c | 333 | break; |
mark2r2 | 0:08a4d61cd84c | 334 | default: |
mark2r2 | 0:08a4d61cd84c | 335 | break; |
mark2r2 | 0:08a4d61cd84c | 336 | } |
mark2r2 | 0:08a4d61cd84c | 337 | |
mark2r2 | 0:08a4d61cd84c | 338 | if(firmware_update_interval > 0 && |
mark2r2 | 0:08a4d61cd84c | 339 | firmware_update_counter++ >= firmware_update_term){ |
mark2r2 | 0:08a4d61cd84c | 340 | if(fwup->exist()==0) { |
mark2r2 | 0:08a4d61cd84c | 341 | mbed_reset(); |
mark2r2 | 0:08a4d61cd84c | 342 | } else { |
mark2r2 | 0:08a4d61cd84c | 343 | firmware_update_counter = 0; |
mark2r2 | 0:08a4d61cd84c | 344 | } |
mark2r2 | 0:08a4d61cd84c | 345 | ntpget(); |
mark2r2 | 0:08a4d61cd84c | 346 | } |
mark2r2 | 0:08a4d61cd84c | 347 | }// !noInternet |
mark2r2 | 0:08a4d61cd84c | 348 | }//if update flag |
mark2r2 | 0:08a4d61cd84c | 349 | }//while |
mark2r2 | 0:08a4d61cd84c | 350 | }//main |
mark2r2 | 0:08a4d61cd84c | 351 | |
mark2r2 | 0:08a4d61cd84c | 352 |