Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem mbed
main.cpp
00001 #include "mbed.h" 00002 #include "SDFileSystem.h" 00003 #include "RTC8564.h" 00004 #include "AQM0802A.h" 00005 #include "string.h" 00006 00007 Ticker Ticker1; 00008 00009 Serial pc(USBTX, USBRX); 00010 I2C i2c(p9, p10); 00011 00012 00013 //Serial sio(p9, p10); 00014 Serial sio(p28, p27); 00015 DigitalOut led1(LED1); 00016 DigitalOut led2(LED2); 00017 DigitalOut led3(LED3); 00018 DigitalOut led4(LED4); 00019 DigitalOut beep(p15); 00020 00021 00022 char year, month, day, week; 00023 char hour, minute, sec; 00024 char lastsec; 00025 char week_chr[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; 00026 Timer timer; 00027 //DigitalIn button(p21, PullUp); 00028 //lpc sdi 00029 // sdo 00030 // sck 00031 // cs 00032 SDFileSystem sd(p5, p6, p7, p8, "sd"); 00033 00034 // 00035 //SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); 00036 //SDFileSystem sd(PB_5, PB_4, PB_3, PA_4, "sd"); 00037 //SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); 00038 00039 int index=0; 00040 char buffer[128]; 00041 char sdatetime[32];//2016/05/26 hh:nn:ss 00042 char sdate[7];//yymmdd 00043 char stime[7];//hhnnss 00044 int redirect=0; 00045 00046 void TimePrintLCD(void) 00047 { 00048 year = rtc_read(YEARS); 00049 month = rtc_read(MONTHS); 00050 day = rtc_read(DAYS); 00051 week = rtc_read(WEEKDAYS); 00052 hour = rtc_read(HOURS); 00053 minute = rtc_read(MINUTES); 00054 sec = rtc_read(SECONDS); 00055 /* 00056 pc.printf("20%c%c/%c%c/%c%c %s\n", 00057 ((year >> 4) & 0x03) + 0x30, (year & 0x0F) + 0x30, 00058 ((month >> 4) & 0x01) + 0x30, (month & 0x0F) + 0x30, 00059 ((day >> 4) & 0x03)+ 0x30, (day & 0x0F) + 0x30, 00060 week_chr[week & 0x07]); 00061 */ 00062 sdate[0] = ((year >> 4) & 0x03) + 0x30; 00063 sdate[1] = (year & 0x0F) + 0x30; 00064 sdate[2] = ((month >> 4) & 0x01) + 0x30; 00065 sdate[3] = (month & 0x0F) + 0x30; 00066 sdate[4] = ((day >> 4) & 0x03)+ 0x30; 00067 sdate[5] = (day & 0x0F) + 0x30; 00068 sdate[6] = 0; 00069 lcd_setCursor(0, 0); 00070 lcd_printStr(sdate); 00071 /* 00072 pc.printf("%c%c:%c%c:%c%c\n", 00073 ((hour >> 4) & 0x03) + 0x30, (hour & 0x0F) + 0x30, 00074 (minute >> 4) + 0x30, (minute & 0x0F) + 0x30, 00075 (sec >> 4) + 0x30, (sec & 0x0F) + 0x30 ); 00076 */ 00077 stime[0] = ((hour >> 4) & 0x03) + 0x30; 00078 stime[1] = (hour & 0x0F) + 0x30; 00079 stime[2] = (minute >> 4) + 0x30; 00080 stime[3] = (minute & 0x0F) + 0x30; 00081 stime[4] = (sec >> 4) + 0x30; 00082 stime[5] = (sec & 0x0F) + 0x30; 00083 stime[6] = 0; 00084 00085 lcd_setCursor(0, 1); 00086 lcd_printStr(stime); 00087 00088 sdatetime[0] = '2'; 00089 sdatetime[1] = '0'; 00090 sdatetime[2] = sdate[0]; 00091 sdatetime[3] = sdate[1]; 00092 sdatetime[4] = '/'; 00093 sdatetime[5] = sdate[2]; 00094 sdatetime[6] = sdate[3]; 00095 sdatetime[7] = '/'; 00096 sdatetime[8] = sdate[4]; 00097 sdatetime[9] = sdate[5]; 00098 sdatetime[10] = ' '; 00099 00100 sdatetime[11] = stime[0]; 00101 sdatetime[12] = stime[1]; 00102 sdatetime[13] = '/'; 00103 sdatetime[14] = stime[2]; 00104 sdatetime[15] = stime[3]; 00105 sdatetime[16] = '/'; 00106 sdatetime[17] = stime[4]; 00107 sdatetime[18] = stime[5]; 00108 sdatetime[19] = 0; 00109 } 00110 00111 void WriteDat(void) 00112 { 00113 00114 char sf[64]; 00115 strcpy(sf, sdate); 00116 strcat(sf,".csv"); 00117 //FileHandle* file = sd.open(sf, O_WRONLY | O_CREAT | O_TRUNC); 00118 FileHandle* file = sd.open(sf, O_WRONLY | O_CREAT | O_APPEND); 00119 pc.printf("[%s]\n", sf); 00120 00121 strcpy(sf, sdatetime); 00122 strcat(sf,", "); 00123 strcat(sf,"999"); 00124 strcat(sf,"\r\n"); 00125 pc.printf("[%s]\n", sf); 00126 if (file != NULL) { 00127 if (file->write(sf, strlen(sf)) != strlen(sf)) { 00128 pc.printf("write error!\n"); 00129 } 00130 } 00131 file->close(); 00132 } 00133 00134 00135 void SDCardTest() 00136 { 00137 //Make sure a card is present 00138 if (!sd.card_present()) { 00139 pc.printf("\nNo card present!\n"); 00140 return; 00141 } 00142 00143 //Try to mount the SD card 00144 pc.printf("\nMounting SD card..."); 00145 if (sd.mount() != 0) { 00146 pc.printf("failed!\n"); 00147 return; 00148 } 00149 pc.printf("success!\n"); 00150 //Display the card type 00151 pc.printf("\tCard type: "); 00152 SDFileSystem::CardType cardType = sd.card_type(); 00153 if (cardType == SDFileSystem::CARD_NONE) 00154 pc.printf("None\n"); 00155 else if (cardType == SDFileSystem::CARD_MMC) 00156 pc.printf("MMC\n"); 00157 else if (cardType == SDFileSystem::CARD_SD) 00158 pc.printf("SD\n"); 00159 else if (cardType == SDFileSystem::CARD_SDHC) 00160 pc.printf("SDHC\n"); 00161 else 00162 pc.printf("Unknown\n"); 00163 //Display the card capacity 00164 pc.printf("\tSectors: %u\n", sd.disk_sectors()); 00165 pc.printf("\tCapacity: %.1fMB\n", sd.disk_sectors() / 2048.0); 00166 } 00167 00168 void cmd(char *scmd) 00169 { 00170 pc.printf("[%s]\n", scmd); 00171 switch (scmd[0]) { 00172 case 'b': 00173 case 'B'://b1 00174 if(strlen(scmd)> 1) { 00175 if(scmd[1]=='1') { 00176 beep=1; 00177 led4 = 1; 00178 } else { 00179 led4 = 0; 00180 beep=0; 00181 } 00182 } 00183 break; 00184 case 'W': 00185 case 'w':// 00186 WriteDat(); 00187 break; 00188 00189 case 'r': 00190 case 'R':// 00191 led3=1; 00192 redirect=1; 00193 break; 00194 00195 case '0': 00196 led4 = 0; 00197 beep=0; 00198 led3=0; 00199 redirect=0; 00200 break; 00201 00202 case 't': 00203 case 'T'://T 20170516xxxxxx 00204 if(strlen(scmd)> 8) { 00205 rtc_setdaytime(&scmd[4], &scmd[6], &scmd[8], &scmd[10], &scmd[12], &scmd[14], "0"); 00206 } 00207 TimePrintLCD(); 00208 pc.printf("%s %s\n", sdate, stime); 00209 break; 00210 } 00211 } 00212 00213 void Int1Sec() 00214 { 00215 led4 = !led4; 00216 sec = rtc_read(SECONDS); 00217 if(lastsec == sec) return; 00218 lastsec = sec; 00219 00220 TimePrintLCD(); 00221 if(sec==0) { 00222 WriteDat(); 00223 } 00224 } 00225 00226 int main() 00227 { 00228 BusOut leds(LED1, LED2); 00229 beep=0; 00230 00231 led1 = 0; 00232 led2 = 0; 00233 led3 = 0; 00234 led4 = 0; 00235 pc.baud(115200); 00236 pc.printf("\nStart\n"); 00237 led1 = 1; 00238 00239 //sio 00240 sio.baud(115200); 00241 //sio.printf("\nStart\n"); 00242 //Configure CRC, large frames, and write validation 00243 00244 //rtc 00245 sec = rtc_read(SECONDS); 00246 pc.printf("sec:[%x]\n", sec); 00247 if(sec > 59) { 00248 pc.printf("set!\n"); 00249 rtc_setdaytime("17", "01", "01", "00", "00", "00", "6"); 00250 } 00251 //sd 00252 sd.crc(true); 00253 sd.large_frames(true); 00254 sd.write_validation(true); 00255 00256 //lcd 00257 lcd_init(); 00258 setContrast(35); 00259 lcd_setCursor(0, 0); 00260 lcd_printStr("SATO"); 00261 lcd_setCursor(0, 1); 00262 lcd_printStr("SEI"); 00263 00264 Ticker1.attach(&Int1Sec, 0.8); 00265 00266 index = 0; 00267 //for(int i=0; i<1; i++){ 00268 while(true) { 00269 if(sio.readable() && redirect) { 00270 pc.putc(sio.getc()); 00271 } 00272 if(pc.readable()) { 00273 char c = pc.getc(); 00274 pc.printf("%c", c); 00275 led2 = !led2; 00276 switch (c) { 00277 case '\r': 00278 case '\n': 00279 cmd(buffer); 00280 index=0; 00281 break; 00282 00283 default: 00284 buffer[index] = c; 00285 if(index<32)index++; 00286 } 00287 } 00288 } 00289 } 00290
Generated on Wed Jul 27 2022 08:01:45 by
1.7.2