sato sei / Mbed 2 deprecated SD_AQM_RTC_Test

Dependencies:   SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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