kl25z accel dataloger

Dependencies:   MMA8451Q MMA8491Q PCF8583_rtc SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by Neil Thiessen

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 #include "mbed.h"
00003 //#include "TSISensor.h"
00004 #include "MMA8451Q.h"
00005 #include "MMA8491Q.h"
00006 //#include "MAG3110.h"
00007 //#include "MPL3115A2.h"
00008 #include <cstdlib>
00009 #include <iostream>
00010 
00011 #include <stdint.h>
00012 #include "SDFileSystem.h"
00013 
00014 
00015 #include "PCF8583_rtc.h"
00016 
00017 I2C i2c(PTE0, PTE1);       // sda, scl
00018 PCF8583rtc rtc(&i2c, PCF8583_addr_2);
00019 SDFileSystem sd(PTD2, PTD3, PTD1, PTD5, "sd"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
00020 /*                  DI , DO ,SCK , CS
00021 MicroSD Breakout    mbed
00022    CS  o-------------o PTA13    (DigitalOut cs)
00023    DI  o-------------o PTD2    (SPI mosi)
00024    VCC o-------------o VOUT
00025    SCK o-------------o PTD1    (SPI sclk)
00026    GND o-------------o GND
00027    DO  o-------------o PTD3    (SPI miso)
00028    CD  o
00029    */
00030 
00031 
00032 Serial se(PTE22, PTE23);
00033 Serial pc(USBTX,USBRX);
00034 
00035 MMA8451Q acc51(PTE25, PTE24, 0x1D<<1);
00036 MMA8491Q acc91(PTE0, PTE1, 0x55<<1);
00037 //MAG3110 mag(PTE0, PTE1, 0x0E<<1);
00038 //MPL3115A2 mpl(PTE0, PTE1, 0x60<<1);
00039 
00040 Timer t;
00041 //PwmOut rled(LED_RED);
00042 
00043 //DigitalOut rled(LED_RED); partilhado com sck não usar
00044 //DigitalOut bled(LED_BLUE);
00045 //DigitalOut gled(LED_GREEN);
00046 
00047 //PwmOut gled(LED_GREEN);
00048 //PwmOut bled(LED_BLUE);
00049 
00050 DigitalOut enMMA8491(PTC7);
00051 
00052 DigitalOut memok (PTB0); // azul ok
00053 DigitalOut membad (PTB2); // vermelho
00054 DigitalOut ejeok (PTB1); //verde
00055 
00056 DigitalIn detect (PTD4);
00057 
00058 InterruptIn eject (PTD7); //ejectar cartão
00059 
00060 InterruptIn intMPL3115(PTA4);
00061 InterruptIn intMAG3110(PTA5);
00062 
00063 DigitalIn acc91X(PTC4);
00064 DigitalIn acc91Y(PTC3);
00065 DigitalIn acc91Z(PTC0);
00066 DigitalIn lock(PTB3);
00067 
00068 int flagject = 0;//flag eject
00069 
00070 char X_buffer [5];
00071 
00072 int set = 0;
00073 
00074 int readSerialString ()
00075 {
00076 
00077     int x = 0;
00078     int aux=0;
00079     for(aux=0; aux<5; aux++) {
00080         X_buffer[aux]=0;
00081     }
00082     /*j=0;
00083     while(j<5) {
00084         X_buffer[j] = pc.getc();
00085         j++;
00086     }*/
00087     se.scanf("%s",&X_buffer[0]);
00088     x=atoi(X_buffer);
00089     return x;
00090 }
00091 
00092 
00093 void clockset()
00094 {
00095     /* wait (5);
00096      se.printf("clockset \n");*/
00097     int   hours=0;
00098     int   mins=0;
00099 
00100     int   sec=0;
00101     int   csec=0;
00102 
00103     int day=0;
00104     int month=0;
00105     int year=0;
00106 
00107     struct DateTime_t dt;
00108     //NVIC_DisableIRQ(UART2_IRQn);
00109     wait_ms (200);
00110     rtc.pauseCounting();
00111 
00112     se.printf("\nH?");
00113     hours=readSerialString ();
00114     dt.time.hours = rtc.bin2bcd(hours);
00115 
00116     se.printf("\nM?");
00117     mins=readSerialString ();
00118     dt.time.minutes= rtc.bin2bcd(mins);
00119 
00120     se.printf("\nS?");
00121     sec=readSerialString ();
00122     dt.time.seconds = rtc.bin2bcd(sec);
00123 
00124     se.printf("\nCS?");
00125     csec=readSerialString ();
00126     dt.time.hundreds = rtc.bin2bcd(csec);
00127 
00128     se.printf("\nDia?");
00129     day=readSerialString ();
00130     dt.date.day = rtc.bin2bcd(day);
00131 
00132     se.printf("\nMes?");
00133     month=readSerialString ();
00134     dt.date.month = rtc.bin2bcd(month);
00135 
00136     se.printf("\nAno?");
00137     year=readSerialString ();
00138     dt.date.year=rtc.bin2bcd(year);
00139 
00140     rtc.write(TIME, dt);
00141 
00142     // rtc.enableCounting();
00143     wait_ms(10);
00144     //NVIC_EnableIRQ(UART2_IRQn);
00145     se.printf("done");
00146     se.printf("\n");
00147     set=1;
00148 }
00149 
00150 void flip ()
00151 
00152 {
00153     flagject =1;
00154 }
00155 
00156 
00157 
00158 
00159 int main()
00160 
00161 {
00162     se.baud(9600);
00163     pc.baud(115200);
00164 
00165   
00166     memok=1;
00167     membad=1;
00168     ejeok = 1;
00169 
00170 
00171     struct DateTime_t dt;
00172     
00173     if(lock==0&&set==0) {
00174         membad=0;
00175         wait (10);
00176         se.printf("clockset \n");
00177         clockset();
00178         membad=1;
00179     }
00180 
00181     using namespace std;
00182     //  mkdir("/sd/xxdir", 0777);
00183 
00184     int hours=0;
00185     int mins=0;
00186 
00187     int sec=0;
00188     int csec=0;
00189     int day=0;
00190     int month=0;
00191     int year=0;
00192 
00193     char name[40];
00194 
00195     //  char acele[110];
00196 
00197     float flag=0;
00198 
00199 
00200 //   float onTime = 1.0;
00201 //   float offTime = 0.0;
00202     float holdTime = 1;
00203     bool on = true;
00204     bool off = false;
00205     int magX = 0, magY = 0, magZ = 0;
00206     float mplAlt = .0, mplPres = .0, mplTemp = .0;
00207    // mpl.Altimeter_Mode();
00208 
00209     /*
00210         dt.time.hours = rtc.bin2bcd(23);
00211         dt.time.minutes = rtc.bin2bcd(59);
00212         dt.time.seconds = rtc.bin2bcd(50);
00213         dt.time.hundreds = rtc.bin2bcd(0);
00214 
00215         dt.date.day = rtc.bin2bcd(30);
00216         dt.date.month = rtc.bin2bcd(6);
00217         //   dt.date.year = rtc.bin2bcd(15);
00218 
00219         //dt.date.year = rtc.bin2bcd(15);
00220         dt.date.year=rtc.bin2bcd(89);
00221         //   dt.date.century= 99;
00222         rtc.write(TIME, dt);
00223     */
00224 
00225 
00226     eject.fall(&flip);
00227     while(true) {
00228         dt = rtc.read(TIME);
00229 
00230         hours= (((dt.time.hours & 0xF0) >> 4) * 10) + (dt.time.hours & 0x0F);
00231         mins= (((dt.time.minutes & 0xF0) >> 4) * 10) + (dt.time.minutes & 0x0F);
00232         sec= (((dt.time.seconds & 0xF0) >> 4) * 10) + (dt.time.seconds & 0x0F);
00233         csec= (((dt.time.hundreds & 0xF0) >> 4) * 10) + (dt.time.hundreds & 0x0F);
00234 
00235         day= (((dt.date.day & 0xF0) >> 4) * 10) + (dt.date.day & 0x0F);
00236         month= (((dt.date.month & 0xF0) >> 4) * 10) + (dt.date.month & 0x0F);
00237         year= (((dt.date.year & 0xF0) >> 4) * 10) + (dt.date.year & 0x0F);
00238 
00239 
00240         //   century= (((dt.date.century & 0xF0) >> 4) * 10) + (dt.date.century & 0x0F);
00241         // century= dt.date.century;
00242 
00243 
00244         //  const char *filename = ("/sd/%d:%d:%d:%d:%d:%d.txt",hours,mins,sec,csec,day,month,year+100+1900);
00245         sprintf(name ,"/sd/%d-%d-%d-%d-%d-%d-%d.txt",hours,mins,sec,csec,day,month,year+100+1900);
00246         FILE *fp = fopen(name, "w");
00247         if(fp == NULL) {
00248             error("Could not open file for write\n");
00249             //  gled = 1;
00250             membad=0;
00251 
00252         }
00253         memok=0;
00254        // mplTemp = mpl.getTemperature();
00255         //   t.start();
00256 
00257         // while(flag<360000&& flagject!=1) {
00258         while(flag<360000) {
00259             //wait_ms(2.5);
00260             //if(t.read_ms ()==2.5) {
00261             enMMA8491 = on;
00262 
00263             //    sprintf(acele,"MMA8451: x:%f \ty: %f \tz:%f\t     MMA8491: x:%f \ty: %f \tz:%f \n",acc51.getAccX(),acc51.getAccY(),acc51.getAccZ(),acc91.getAccX(),acc91.getAccY(),acc91.getAccZ());
00264             fprintf(fp,"MMA8451: x:%f \ty: %f \tz:%f\t      ",acc51.getAccX(),acc51.getAccY(),acc51.getAccZ());
00265             fprintf(fp,"MMA8491: x:%f \ty: %f \tz:%f \n",acc91.getAccX(),acc91.getAccY(),acc91.getAccZ());
00266 
00267             //    fprintf(fp,acele);
00268 
00269             if(flagject ==1) {
00270                // mplTemp = mpl.getTemperature();
00271                 //fprintf(fp,"Temp:%f \n",mplTemp);
00272                 fclose(fp);
00273                 memok=1;
00274                 ejeok = 0;
00275                 while(1);
00276             }
00277             // t.reset();
00278             flag++;
00279             enMMA8491 = off;
00280             // }
00281         }
00282 
00283 
00284         //  t.stop();
00285         //  t.reset();
00286        // fprintf(fp,"Temp:%f \n",mplTemp);
00287         /*
00288             if (flagject ==1) {
00289                 fclose(fp);
00290                 memok=1;
00291                 ejeok = 0;
00292                 while(1);
00293             }*/
00294 
00295 
00296 
00297         // fprintf(fp, "Hello fun SD Card World!");
00298         fclose(fp);
00299         flag=0;
00300         /* printf("%s\n",name);
00301          se.printf("%d:%d:%d:%d\n",hours,mins,sec,csec);
00302          printf("%d/%d////%d\n",day,month,year+100+1900);
00303          //  printf("%d/%d////%d\n",day,month,century);
00304 
00305 
00306          //enMMA8491 = off;
00307 
00308         //       mpl.Altimeter_Mode();
00309 
00310          enMMA8491 = on;
00311 
00312 
00313          mag.getValues(&magX, &magY, &magZ);
00314          mplAlt = mpl.getAltimeter();
00315          mplTemp = mpl.getTemperature();
00316 
00317          cout << "MMA8451: x:" << acc51.getAccX() << "\ty:" << acc51.getAccY() << "\tz:" << acc51.getAccZ() << "\n\r" << endl;
00318          se.printf("MMA8451: x:%f \ty: %f \tz:%f \n",acc51.getAccX(),acc51.getAccY(),acc51.getAccZ());
00319          cout << "MMA8491: " << acc91X << "\t" << acc91Y << "\t" << acc91Z << "\n\r" << endl;
00320          cout << "MMA8491: x:" << acc91.getAccX() << "\ty:" << acc91.getAccY() << "\tz:" << acc91.getAccZ() << "\n\r" << endl;
00321          cout << "MAG3110: " << magX << "\t" << magY << "\t" << magZ << "\n\r" << endl;
00322          mpl.Barometric_Mode();
00323          wait(holdTime);
00324 
00325          enMMA8491 = off;
00326 
00327 
00328 
00329          mplPres = mpl.getPressure();
00330 
00331          //cout << "Touch: " << tsi.readPercentage() << "\n\r" << endl;
00332          cout << "MPL3115: " << mplAlt << "\t" << mplPres << "\t" << mplTemp << "\n\r" << endl;
00333          mpl.Altimeter_Mode();
00334          wait(holdTime);*/
00335 
00336 
00337     }
00338     return 0;
00339 }