mbed/ARM 活用事例 第3章 SDカードを使ってファイルを操作するプログラムを作る

Dependencies:   EthernetNetIf NTPClient_NetServices TextLCD mbed ConfigFile SDFileSystem

Committer:
sunifu
Date:
Tue Oct 04 13:04:02 2011 +0000
Revision:
0:3f9b3f85f89b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunifu 0:3f9b3f85f89b 1 #include "mbed.h"
sunifu 0:3f9b3f85f89b 2 #include "TextLCD.h"
sunifu 0:3f9b3f85f89b 3 #include "SDFileSystem.h"
sunifu 0:3f9b3f85f89b 4 #include "ConfigFile.h"
sunifu 0:3f9b3f85f89b 5 #include "NTPClient.h"
sunifu 0:3f9b3f85f89b 6 #include "EthernetNetIf.h"
sunifu 0:3f9b3f85f89b 7
sunifu 0:3f9b3f85f89b 8 TextLCD lcd(p24, p26, p27, p28, p29, p30);
sunifu 0:3f9b3f85f89b 9 SDFileSystem sd(p5, p6, p7, p8, "sd1") ;
sunifu 0:3f9b3f85f89b 10 LocalFileSystem local("local");
sunifu 0:3f9b3f85f89b 11
sunifu 0:3f9b3f85f89b 12 ConfigFile cfg;
sunifu 0:3f9b3f85f89b 13 AnalogIn temp_in(p20);
sunifu 0:3f9b3f85f89b 14 AnalogIn humid_in(p19);
sunifu 0:3f9b3f85f89b 15
sunifu 0:3f9b3f85f89b 16 Ticker in, write;
sunifu 0:3f9b3f85f89b 17
sunifu 0:3f9b3f85f89b 18 char strTimeMsg[16];
sunifu 0:3f9b3f85f89b 19
sunifu 0:3f9b3f85f89b 20 float r_temp, r_humid;
sunifu 0:3f9b3f85f89b 21 NTPClient ntp;
sunifu 0:3f9b3f85f89b 22
sunifu 0:3f9b3f85f89b 23 void dataWriting() {
sunifu 0:3f9b3f85f89b 24 FILE *fp;
sunifu 0:3f9b3f85f89b 25 //
sunifu 0:3f9b3f85f89b 26 lcd.cls();
sunifu 0:3f9b3f85f89b 27 if ( (fp = fopen("/sd1/env.txt","a")) == NULL ) {
sunifu 0:3f9b3f85f89b 28 lcd.printf("Open Failed. \n") ;
sunifu 0:3f9b3f85f89b 29 exit(0);
sunifu 0:3f9b3f85f89b 30 }
sunifu 0:3f9b3f85f89b 31 printf("%s,%6.2f,%6.2f\r\n",strTimeMsg,r_temp, r_humid);
sunifu 0:3f9b3f85f89b 32 fprintf(fp,"%s,%5.3f,%5.3f\r\n",strTimeMsg,r_temp, r_humid);
sunifu 0:3f9b3f85f89b 33 fclose(fp);
sunifu 0:3f9b3f85f89b 34 }
sunifu 0:3f9b3f85f89b 35
sunifu 0:3f9b3f85f89b 36 void UpdateLCD(){
sunifu 0:3f9b3f85f89b 37
sunifu 0:3f9b3f85f89b 38 float temp,humid;
sunifu 0:3f9b3f85f89b 39 time_t ctTime;
sunifu 0:3f9b3f85f89b 40
sunifu 0:3f9b3f85f89b 41 temp = temp_in;
sunifu 0:3f9b3f85f89b 42 humid = humid_in;
sunifu 0:3f9b3f85f89b 43
sunifu 0:3f9b3f85f89b 44 // r_temp = temp * 3.3 * 100 ; // ---- (1)
sunifu 0:3f9b3f85f89b 45 r_temp = temp * 55.0 ; // ---- (2)
sunifu 0:3f9b3f85f89b 46 r_humid = humid * 3.3 * 100 ;
sunifu 0:3f9b3f85f89b 47
sunifu 0:3f9b3f85f89b 48 lcd.cls();
sunifu 0:3f9b3f85f89b 49 lcd.locate(1,1);
sunifu 0:3f9b3f85f89b 50 lcd.printf("%5.1f",r_temp);
sunifu 0:3f9b3f85f89b 51 lcd.locate(6,1);
sunifu 0:3f9b3f85f89b 52 lcd.putc(0xDf);
sunifu 0:3f9b3f85f89b 53 lcd.putc(0x43);
sunifu 0:3f9b3f85f89b 54
sunifu 0:3f9b3f85f89b 55 lcd.locate(9,1);
sunifu 0:3f9b3f85f89b 56 lcd.printf("%5.1f%%",r_humid);
sunifu 0:3f9b3f85f89b 57
sunifu 0:3f9b3f85f89b 58 ctTime = time(NULL)+32400;
sunifu 0:3f9b3f85f89b 59 strftime(strTimeMsg,16,"%y/%m/%d %H:%M",localtime(&ctTime));
sunifu 0:3f9b3f85f89b 60
sunifu 0:3f9b3f85f89b 61 lcd.locate(0,0);
sunifu 0:3f9b3f85f89b 62 lcd.printf("%s",strTimeMsg);
sunifu 0:3f9b3f85f89b 63 }
sunifu 0:3f9b3f85f89b 64
sunifu 0:3f9b3f85f89b 65 /* ----- Set RTC by ConfigFile -----*/
sunifu 0:3f9b3f85f89b 66 void setRTC_ConfFile()
sunifu 0:3f9b3f85f89b 67 {
sunifu 0:3f9b3f85f89b 68 char *strData = "DATE";
sunifu 0:3f9b3f85f89b 69 char dvalue[16];
sunifu 0:3f9b3f85f89b 70 char *strTime = "TIME";
sunifu 0:3f9b3f85f89b 71 char tvalue[16];
sunifu 0:3f9b3f85f89b 72 int year, month;
sunifu 0:3f9b3f85f89b 73 struct tm ltime;
sunifu 0:3f9b3f85f89b 74
sunifu 0:3f9b3f85f89b 75 if (!cfg.read("/local/datetime.cfg")) {
sunifu 0:3f9b3f85f89b 76 printf("Failure to read a configuration file.\n");
sunifu 0:3f9b3f85f89b 77 }
sunifu 0:3f9b3f85f89b 78
sunifu 0:3f9b3f85f89b 79 /*
sunifu 0:3f9b3f85f89b 80 * Get a configuration value.
sunifu 0:3f9b3f85f89b 81 */
sunifu 0:3f9b3f85f89b 82 if (cfg.getValue(strData, &dvalue[0], sizeof(dvalue))) {
sunifu 0:3f9b3f85f89b 83
sunifu 0:3f9b3f85f89b 84 }
sunifu 0:3f9b3f85f89b 85 if (cfg.getValue(strTime, &tvalue[0], sizeof(tvalue))) {
sunifu 0:3f9b3f85f89b 86
sunifu 0:3f9b3f85f89b 87 }
sunifu 0:3f9b3f85f89b 88 sscanf(dvalue,"%d/%d/%d",&year,&month,&ltime.tm_mday);
sunifu 0:3f9b3f85f89b 89 sscanf(tvalue,"%d:%d",&ltime.tm_hour,&ltime.tm_min);
sunifu 0:3f9b3f85f89b 90
sunifu 0:3f9b3f85f89b 91 ltime.tm_year = year - 1900;
sunifu 0:3f9b3f85f89b 92 ltime.tm_mon = month -1 ;
sunifu 0:3f9b3f85f89b 93 ltime.tm_sec = 0;
sunifu 0:3f9b3f85f89b 94
sunifu 0:3f9b3f85f89b 95 set_time(mktime(&ltime)-32400) ;
sunifu 0:3f9b3f85f89b 96 printf("[able to read a datetime.cfg]\r\n");
sunifu 0:3f9b3f85f89b 97 }
sunifu 0:3f9b3f85f89b 98
sunifu 0:3f9b3f85f89b 99
sunifu 0:3f9b3f85f89b 100
sunifu 0:3f9b3f85f89b 101 /* ----- Set RTC by NTP ----- */
sunifu 0:3f9b3f85f89b 102 void setRTC_NTP()
sunifu 0:3f9b3f85f89b 103 {
sunifu 0:3f9b3f85f89b 104 char strNtpErrMsg[32] ;
sunifu 0:3f9b3f85f89b 105 EthernetErr ethErr;
sunifu 0:3f9b3f85f89b 106 EthernetNetIf eth;
sunifu 0:3f9b3f85f89b 107
sunifu 0:3f9b3f85f89b 108 /* static ip
sunifu 0:3f9b3f85f89b 109 EthernetNetIf eth( // (2) -- static IP address
sunifu 0:3f9b3f85f89b 110 IpAddr(192,168,0,20), // IP Address
sunifu 0:3f9b3f85f89b 111 IpAddr(255,255,255,0), // Subnet Mask
sunifu 0:3f9b3f85f89b 112 IpAddr(192,168,0,1), // Default Gateway
sunifu 0:3f9b3f85f89b 113 IpAddr(192,168,0,1) // DNS Server
sunifu 0:3f9b3f85f89b 114 ) ;
sunifu 0:3f9b3f85f89b 115 */
sunifu 0:3f9b3f85f89b 116
sunifu 0:3f9b3f85f89b 117
sunifu 0:3f9b3f85f89b 118 lcd.cls();
sunifu 0:3f9b3f85f89b 119 lcd.locate(0,0);
sunifu 0:3f9b3f85f89b 120 lcd.printf("Please wait...");
sunifu 0:3f9b3f85f89b 121
sunifu 0:3f9b3f85f89b 122 ethErr = eth.setup() ;
sunifu 0:3f9b3f85f89b 123
sunifu 0:3f9b3f85f89b 124 if( ethErr != ETH_OK )
sunifu 0:3f9b3f85f89b 125 {
sunifu 0:3f9b3f85f89b 126 printf("Error %d in setup.\r\n", ethErr);
sunifu 0:3f9b3f85f89b 127 lcd.locate(0,1);
sunifu 0:3f9b3f85f89b 128 lcd.printf("NW Setup Error.");
sunifu 0:3f9b3f85f89b 129 }
sunifu 0:3f9b3f85f89b 130
sunifu 0:3f9b3f85f89b 131
sunifu 0:3f9b3f85f89b 132 Host ntpsrv(IpAddr(), 123, "ntp.nict.jp") ;
sunifu 0:3f9b3f85f89b 133 //Host ntpsrv(IpAddr(), 123, "192.244.80.200");
sunifu 0:3f9b3f85f89b 134 NTPResult ntpResult = ntp.setTime(ntpsrv) ;
sunifu 0:3f9b3f85f89b 135
sunifu 0:3f9b3f85f89b 136 if( ntpResult == NTP_OK ){
sunifu 0:3f9b3f85f89b 137 sprintf(strNtpErrMsg,"NTP Connect OK!");
sunifu 0:3f9b3f85f89b 138 }else if ( ntpResult == NTP_PRTCL ){
sunifu 0:3f9b3f85f89b 139 sprintf(strNtpErrMsg,"NTP Protocol error.") ;
sunifu 0:3f9b3f85f89b 140 }else if ( ntpResult == NTP_TIMEOUT ){
sunifu 0:3f9b3f85f89b 141 sprintf(strNtpErrMsg,"Connection timeout.");
sunifu 0:3f9b3f85f89b 142 }else if ( ntpResult == NTP_DNS ){
sunifu 0:3f9b3f85f89b 143 sprintf(strNtpErrMsg,"Could not resolve DNS hostname.") ;
sunifu 0:3f9b3f85f89b 144 }else if ( ntpResult == NTP_PROCESSING ){
sunifu 0:3f9b3f85f89b 145 sprintf(strNtpErrMsg,"Processing.");
sunifu 0:3f9b3f85f89b 146 }else{
sunifu 0:3f9b3f85f89b 147 sprintf(strNtpErrMsg,"NTP Error.");
sunifu 0:3f9b3f85f89b 148 }
sunifu 0:3f9b3f85f89b 149 printf("[%s]\r\n",strNtpErrMsg);
sunifu 0:3f9b3f85f89b 150 }
sunifu 0:3f9b3f85f89b 151
sunifu 0:3f9b3f85f89b 152
sunifu 0:3f9b3f85f89b 153 int main() {
sunifu 0:3f9b3f85f89b 154
sunifu 0:3f9b3f85f89b 155 // set RTC by ConfigFile
sunifu 0:3f9b3f85f89b 156 //setRTC_ConfFile() ;
sunifu 0:3f9b3f85f89b 157
sunifu 0:3f9b3f85f89b 158 // set RTC by NTP
sunifu 0:3f9b3f85f89b 159 setRTC_NTP();
sunifu 0:3f9b3f85f89b 160
sunifu 0:3f9b3f85f89b 161 lcd.cls();
sunifu 0:3f9b3f85f89b 162 lcd.locate(0,0);
sunifu 0:3f9b3f85f89b 163 lcd.printf("Please wait...");
sunifu 0:3f9b3f85f89b 164
sunifu 0:3f9b3f85f89b 165 in.attach(&UpdateLCD,10);
sunifu 0:3f9b3f85f89b 166 write.attach(&dataWriting,300);
sunifu 0:3f9b3f85f89b 167
sunifu 0:3f9b3f85f89b 168 while(1){
sunifu 0:3f9b3f85f89b 169 }
sunifu 0:3f9b3f85f89b 170 }