エレキジャック Web版 mbedで初めてのマイコン開発 メモリカードを使ったデータの読み書き<3/3> センサから得たデータをSDに書き込むプログラムです。時刻設定はNTPを使っています。 http://www.eleki-jack.com/arm/2010/12/mbed-7.html
Dependencies: EthernetNetIf NTPClient_NetServices TextLCD mbed SDFileSystem
main.cpp@0:3bee4ab4e52e, 2011-02-04 (annotated)
- Committer:
- sunifu
- Date:
- Fri Feb 04 15:20:31 2011 +0000
- Revision:
- 0:3bee4ab4e52e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sunifu | 0:3bee4ab4e52e | 1 | #include "mbed.h" |
sunifu | 0:3bee4ab4e52e | 2 | #include "TextLCD.h" |
sunifu | 0:3bee4ab4e52e | 3 | #include "SDFileSystem.h" |
sunifu | 0:3bee4ab4e52e | 4 | #include "EthernetNetIf.h" |
sunifu | 0:3bee4ab4e52e | 5 | #include "NTPClient.h" |
sunifu | 0:3bee4ab4e52e | 6 | |
sunifu | 0:3bee4ab4e52e | 7 | |
sunifu | 0:3bee4ab4e52e | 8 | TextLCD lcd(p24, p26, p27, p28, p29, p30); |
sunifu | 0:3bee4ab4e52e | 9 | AnalogIn temp_in(p20); |
sunifu | 0:3bee4ab4e52e | 10 | SDFileSystem sd(p5, p6, p7, p8, "sd1") ; |
sunifu | 0:3bee4ab4e52e | 11 | |
sunifu | 0:3bee4ab4e52e | 12 | Ticker lcdTimer, writeTimer; |
sunifu | 0:3bee4ab4e52e | 13 | char strNtpErrMsg[32] ; |
sunifu | 0:3bee4ab4e52e | 14 | char strDispMsg[32]; |
sunifu | 0:3bee4ab4e52e | 15 | double temp; |
sunifu | 0:3bee4ab4e52e | 16 | |
sunifu | 0:3bee4ab4e52e | 17 | void dataWriting() { |
sunifu | 0:3bee4ab4e52e | 18 | FILE *fp; |
sunifu | 0:3bee4ab4e52e | 19 | // |
sunifu | 0:3bee4ab4e52e | 20 | if ( (fp = fopen("/sd1/temp.txt","a")) == NULL ) { |
sunifu | 0:3bee4ab4e52e | 21 | printf("Open Failed. \n") ; |
sunifu | 0:3bee4ab4e52e | 22 | exit(0); |
sunifu | 0:3bee4ab4e52e | 23 | } |
sunifu | 0:3bee4ab4e52e | 24 | |
sunifu | 0:3bee4ab4e52e | 25 | // |
sunifu | 0:3bee4ab4e52e | 26 | fprintf(fp,"%s,%5.3f,%5.3f\r\n",strDispMsg,temp, temp*55); |
sunifu | 0:3bee4ab4e52e | 27 | |
sunifu | 0:3bee4ab4e52e | 28 | // |
sunifu | 0:3bee4ab4e52e | 29 | printf("%s,%5.3f,%5.3f\r\n",strDispMsg,temp, temp*55) ; |
sunifu | 0:3bee4ab4e52e | 30 | |
sunifu | 0:3bee4ab4e52e | 31 | // |
sunifu | 0:3bee4ab4e52e | 32 | fclose(fp); |
sunifu | 0:3bee4ab4e52e | 33 | } |
sunifu | 0:3bee4ab4e52e | 34 | void lcdUpdate(){ |
sunifu | 0:3bee4ab4e52e | 35 | double rtemp; |
sunifu | 0:3bee4ab4e52e | 36 | char dt[16]; |
sunifu | 0:3bee4ab4e52e | 37 | time_t ctTime ; |
sunifu | 0:3bee4ab4e52e | 38 | |
sunifu | 0:3bee4ab4e52e | 39 | // |
sunifu | 0:3bee4ab4e52e | 40 | temp = temp_in; |
sunifu | 0:3bee4ab4e52e | 41 | rtemp = temp * 55.0 ; |
sunifu | 0:3bee4ab4e52e | 42 | |
sunifu | 0:3bee4ab4e52e | 43 | // |
sunifu | 0:3bee4ab4e52e | 44 | lcd.locate(0,0); |
sunifu | 0:3bee4ab4e52e | 45 | lcd.printf("RoomTemp %5.2f",rtemp); |
sunifu | 0:3bee4ab4e52e | 46 | lcd.locate(14,0); |
sunifu | 0:3bee4ab4e52e | 47 | lcd.putc(0xDf); |
sunifu | 0:3bee4ab4e52e | 48 | lcd.putc(0x43); |
sunifu | 0:3bee4ab4e52e | 49 | |
sunifu | 0:3bee4ab4e52e | 50 | // |
sunifu | 0:3bee4ab4e52e | 51 | ctTime = time(NULL)+32400 ; |
sunifu | 0:3bee4ab4e52e | 52 | strftime(strDispMsg,32,"%Y/%m/%d %H:%M",localtime(&ctTime)); |
sunifu | 0:3bee4ab4e52e | 53 | |
sunifu | 0:3bee4ab4e52e | 54 | // |
sunifu | 0:3bee4ab4e52e | 55 | strftime(dt,16," %m/%d %X",localtime(&ctTime)); |
sunifu | 0:3bee4ab4e52e | 56 | lcd.locate(0,1); |
sunifu | 0:3bee4ab4e52e | 57 | lcd.printf("%s",dt); |
sunifu | 0:3bee4ab4e52e | 58 | } |
sunifu | 0:3bee4ab4e52e | 59 | |
sunifu | 0:3bee4ab4e52e | 60 | |
sunifu | 0:3bee4ab4e52e | 61 | int main() { |
sunifu | 0:3bee4ab4e52e | 62 | EthernetNetIf eth; |
sunifu | 0:3bee4ab4e52e | 63 | NTPClient ntp; |
sunifu | 0:3bee4ab4e52e | 64 | |
sunifu | 0:3bee4ab4e52e | 65 | lcd.cls(); |
sunifu | 0:3bee4ab4e52e | 66 | lcd.locate(0,0); |
sunifu | 0:3bee4ab4e52e | 67 | lcd.printf("Please wait..."); |
sunifu | 0:3bee4ab4e52e | 68 | |
sunifu | 0:3bee4ab4e52e | 69 | // |
sunifu | 0:3bee4ab4e52e | 70 | EthernetErr ethErr = eth.setup() ; |
sunifu | 0:3bee4ab4e52e | 71 | if( ethErr != ETH_OK ) |
sunifu | 0:3bee4ab4e52e | 72 | { |
sunifu | 0:3bee4ab4e52e | 73 | printf("Error %d in setup.\r\n", ethErr); |
sunifu | 0:3bee4ab4e52e | 74 | lcd.locate(0,1); |
sunifu | 0:3bee4ab4e52e | 75 | lcd.printf("NW Setup Error."); |
sunifu | 0:3bee4ab4e52e | 76 | } |
sunifu | 0:3bee4ab4e52e | 77 | |
sunifu | 0:3bee4ab4e52e | 78 | Host ntpsrv(IpAddr(), 123, "ntp.nict.jp") ; |
sunifu | 0:3bee4ab4e52e | 79 | NTPResult ntpResult = ntp.setTime(ntpsrv) ; |
sunifu | 0:3bee4ab4e52e | 80 | |
sunifu | 0:3bee4ab4e52e | 81 | if( ntpResult == NTP_OK ){ |
sunifu | 0:3bee4ab4e52e | 82 | sprintf(strNtpErrMsg,"NTP Connect OK!\r\n"); |
sunifu | 0:3bee4ab4e52e | 83 | }else if ( ntpResult == NTP_PRTCL ){ |
sunifu | 0:3bee4ab4e52e | 84 | sprintf(strNtpErrMsg,"NTP Protocol error.\r\n") ; |
sunifu | 0:3bee4ab4e52e | 85 | }else if ( ntpResult == NTP_TIMEOUT ){ |
sunifu | 0:3bee4ab4e52e | 86 | sprintf(strNtpErrMsg,"Connection timeout.\r\n"); |
sunifu | 0:3bee4ab4e52e | 87 | }else if ( ntpResult == NTP_DNS ){ |
sunifu | 0:3bee4ab4e52e | 88 | sprintf(strNtpErrMsg,"Could not resolve DNS hostname.\r\n") ; |
sunifu | 0:3bee4ab4e52e | 89 | }else if ( ntpResult == NTP_PROCESSING ){ |
sunifu | 0:3bee4ab4e52e | 90 | sprintf(strNtpErrMsg,"Processing.\r\n"); |
sunifu | 0:3bee4ab4e52e | 91 | }else{ |
sunifu | 0:3bee4ab4e52e | 92 | sprintf(strNtpErrMsg,"NTP Error."); |
sunifu | 0:3bee4ab4e52e | 93 | } |
sunifu | 0:3bee4ab4e52e | 94 | |
sunifu | 0:3bee4ab4e52e | 95 | printf("%s\r\n",strNtpErrMsg); |
sunifu | 0:3bee4ab4e52e | 96 | |
sunifu | 0:3bee4ab4e52e | 97 | lcdTimer.attach(&lcdUpdate,1.0); |
sunifu | 0:3bee4ab4e52e | 98 | |
sunifu | 0:3bee4ab4e52e | 99 | writeTimer.attach(&dataWriting, 60.0); |
sunifu | 0:3bee4ab4e52e | 100 | |
sunifu | 0:3bee4ab4e52e | 101 | while(1){ |
sunifu | 0:3bee4ab4e52e | 102 | } |
sunifu | 0:3bee4ab4e52e | 103 | } |