kl25z accel dataloger

Dependencies:   MMA8451Q MMA8491Q PCF8583_rtc SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by Neil Thiessen

main.cpp

Committer:
pedro_C
Date:
2016-10-19
Revision:
26:7c2df5486af7
Parent:
20:ec1c4f02d50e

File content as of revision 26:7c2df5486af7:


#include "mbed.h"
//#include "TSISensor.h"
#include "MMA8451Q.h"
#include "MMA8491Q.h"
//#include "MAG3110.h"
//#include "MPL3115A2.h"
#include <cstdlib>
#include <iostream>

#include <stdint.h>
#include "SDFileSystem.h"


#include "PCF8583_rtc.h"

I2C i2c(PTE0, PTE1);       // sda, scl
PCF8583rtc rtc(&i2c, PCF8583_addr_2);
SDFileSystem sd(PTD2, PTD3, PTD1, PTD5, "sd"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
/*                  DI , DO ,SCK , CS
MicroSD Breakout    mbed
   CS  o-------------o PTA13    (DigitalOut cs)
   DI  o-------------o PTD2    (SPI mosi)
   VCC o-------------o VOUT
   SCK o-------------o PTD1    (SPI sclk)
   GND o-------------o GND
   DO  o-------------o PTD3    (SPI miso)
   CD  o
   */


Serial se(PTE22, PTE23);
Serial pc(USBTX,USBRX);

MMA8451Q acc51(PTE25, PTE24, 0x1D<<1);
MMA8491Q acc91(PTE0, PTE1, 0x55<<1);
//MAG3110 mag(PTE0, PTE1, 0x0E<<1);
//MPL3115A2 mpl(PTE0, PTE1, 0x60<<1);

Timer t;
//PwmOut rled(LED_RED);

//DigitalOut rled(LED_RED); partilhado com sck não usar
//DigitalOut bled(LED_BLUE);
//DigitalOut gled(LED_GREEN);

//PwmOut gled(LED_GREEN);
//PwmOut bled(LED_BLUE);

DigitalOut enMMA8491(PTC7);

DigitalOut memok (PTB0); // azul ok
DigitalOut membad (PTB2); // vermelho
DigitalOut ejeok (PTB1); //verde

DigitalIn detect (PTD4);

InterruptIn eject (PTD7); //ejectar cartão

InterruptIn intMPL3115(PTA4);
InterruptIn intMAG3110(PTA5);

DigitalIn acc91X(PTC4);
DigitalIn acc91Y(PTC3);
DigitalIn acc91Z(PTC0);
DigitalIn lock(PTB3);

int flagject = 0;//flag eject

char X_buffer [5];

int set = 0;

int readSerialString ()
{

    int x = 0;
    int aux=0;
    for(aux=0; aux<5; aux++) {
        X_buffer[aux]=0;
    }
    /*j=0;
    while(j<5) {
        X_buffer[j] = pc.getc();
        j++;
    }*/
    se.scanf("%s",&X_buffer[0]);
    x=atoi(X_buffer);
    return x;
}


void clockset()
{
    /* wait (5);
     se.printf("clockset \n");*/
    int   hours=0;
    int   mins=0;

    int   sec=0;
    int   csec=0;

    int day=0;
    int month=0;
    int year=0;

    struct DateTime_t dt;
    //NVIC_DisableIRQ(UART2_IRQn);
    wait_ms (200);
    rtc.pauseCounting();

    se.printf("\nH?");
    hours=readSerialString ();
    dt.time.hours = rtc.bin2bcd(hours);

    se.printf("\nM?");
    mins=readSerialString ();
    dt.time.minutes= rtc.bin2bcd(mins);

    se.printf("\nS?");
    sec=readSerialString ();
    dt.time.seconds = rtc.bin2bcd(sec);

    se.printf("\nCS?");
    csec=readSerialString ();
    dt.time.hundreds = rtc.bin2bcd(csec);

    se.printf("\nDia?");
    day=readSerialString ();
    dt.date.day = rtc.bin2bcd(day);

    se.printf("\nMes?");
    month=readSerialString ();
    dt.date.month = rtc.bin2bcd(month);

    se.printf("\nAno?");
    year=readSerialString ();
    dt.date.year=rtc.bin2bcd(year);

    rtc.write(TIME, dt);

    // rtc.enableCounting();
    wait_ms(10);
    //NVIC_EnableIRQ(UART2_IRQn);
    se.printf("done");
    se.printf("\n");
    set=1;
}

void flip ()

{
    flagject =1;
}




int main()

{
    se.baud(9600);
    pc.baud(115200);

  
    memok=1;
    membad=1;
    ejeok = 1;


    struct DateTime_t dt;
    
    if(lock==0&&set==0) {
        membad=0;
        wait (10);
        se.printf("clockset \n");
        clockset();
        membad=1;
    }

    using namespace std;
    //  mkdir("/sd/xxdir", 0777);

    int hours=0;
    int mins=0;

    int sec=0;
    int csec=0;
    int day=0;
    int month=0;
    int year=0;

    char name[40];

    //  char acele[110];

    float flag=0;


//   float onTime = 1.0;
//   float offTime = 0.0;
    float holdTime = 1;
    bool on = true;
    bool off = false;
    int magX = 0, magY = 0, magZ = 0;
    float mplAlt = .0, mplPres = .0, mplTemp = .0;
   // mpl.Altimeter_Mode();

    /*
        dt.time.hours = rtc.bin2bcd(23);
        dt.time.minutes = rtc.bin2bcd(59);
        dt.time.seconds = rtc.bin2bcd(50);
        dt.time.hundreds = rtc.bin2bcd(0);

        dt.date.day = rtc.bin2bcd(30);
        dt.date.month = rtc.bin2bcd(6);
        //   dt.date.year = rtc.bin2bcd(15);

        //dt.date.year = rtc.bin2bcd(15);
        dt.date.year=rtc.bin2bcd(89);
        //   dt.date.century= 99;
        rtc.write(TIME, dt);
    */


    eject.fall(&flip);
    while(true) {
        dt = rtc.read(TIME);

        hours= (((dt.time.hours & 0xF0) >> 4) * 10) + (dt.time.hours & 0x0F);
        mins= (((dt.time.minutes & 0xF0) >> 4) * 10) + (dt.time.minutes & 0x0F);
        sec= (((dt.time.seconds & 0xF0) >> 4) * 10) + (dt.time.seconds & 0x0F);
        csec= (((dt.time.hundreds & 0xF0) >> 4) * 10) + (dt.time.hundreds & 0x0F);

        day= (((dt.date.day & 0xF0) >> 4) * 10) + (dt.date.day & 0x0F);
        month= (((dt.date.month & 0xF0) >> 4) * 10) + (dt.date.month & 0x0F);
        year= (((dt.date.year & 0xF0) >> 4) * 10) + (dt.date.year & 0x0F);


        //   century= (((dt.date.century & 0xF0) >> 4) * 10) + (dt.date.century & 0x0F);
        // century= dt.date.century;


        //  const char *filename = ("/sd/%d:%d:%d:%d:%d:%d.txt",hours,mins,sec,csec,day,month,year+100+1900);
        sprintf(name ,"/sd/%d-%d-%d-%d-%d-%d-%d.txt",hours,mins,sec,csec,day,month,year+100+1900);
        FILE *fp = fopen(name, "w");
        if(fp == NULL) {
            error("Could not open file for write\n");
            //  gled = 1;
            membad=0;

        }
        memok=0;
       // mplTemp = mpl.getTemperature();
        //   t.start();

        // while(flag<360000&& flagject!=1) {
        while(flag<360000) {
            //wait_ms(2.5);
            //if(t.read_ms ()==2.5) {
            enMMA8491 = on;

            //    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());
            fprintf(fp,"MMA8451: x:%f \ty: %f \tz:%f\t      ",acc51.getAccX(),acc51.getAccY(),acc51.getAccZ());
            fprintf(fp,"MMA8491: x:%f \ty: %f \tz:%f \n",acc91.getAccX(),acc91.getAccY(),acc91.getAccZ());

            //    fprintf(fp,acele);

            if(flagject ==1) {
               // mplTemp = mpl.getTemperature();
                //fprintf(fp,"Temp:%f \n",mplTemp);
                fclose(fp);
                memok=1;
                ejeok = 0;
                while(1);
            }
            // t.reset();
            flag++;
            enMMA8491 = off;
            // }
        }


        //  t.stop();
        //  t.reset();
       // fprintf(fp,"Temp:%f \n",mplTemp);
        /*
            if (flagject ==1) {
                fclose(fp);
                memok=1;
                ejeok = 0;
                while(1);
            }*/



        // fprintf(fp, "Hello fun SD Card World!");
        fclose(fp);
        flag=0;
        /* printf("%s\n",name);
         se.printf("%d:%d:%d:%d\n",hours,mins,sec,csec);
         printf("%d/%d////%d\n",day,month,year+100+1900);
         //  printf("%d/%d////%d\n",day,month,century);


         //enMMA8491 = off;

        //       mpl.Altimeter_Mode();

         enMMA8491 = on;


         mag.getValues(&magX, &magY, &magZ);
         mplAlt = mpl.getAltimeter();
         mplTemp = mpl.getTemperature();

         cout << "MMA8451: x:" << acc51.getAccX() << "\ty:" << acc51.getAccY() << "\tz:" << acc51.getAccZ() << "\n\r" << endl;
         se.printf("MMA8451: x:%f \ty: %f \tz:%f \n",acc51.getAccX(),acc51.getAccY(),acc51.getAccZ());
         cout << "MMA8491: " << acc91X << "\t" << acc91Y << "\t" << acc91Z << "\n\r" << endl;
         cout << "MMA8491: x:" << acc91.getAccX() << "\ty:" << acc91.getAccY() << "\tz:" << acc91.getAccZ() << "\n\r" << endl;
         cout << "MAG3110: " << magX << "\t" << magY << "\t" << magZ << "\n\r" << endl;
         mpl.Barometric_Mode();
         wait(holdTime);

         enMMA8491 = off;



         mplPres = mpl.getPressure();

         //cout << "Touch: " << tsi.readPercentage() << "\n\r" << endl;
         cout << "MPL3115: " << mplAlt << "\t" << mplPres << "\t" << mplTemp << "\n\r" << endl;
         mpl.Altimeter_Mode();
         wait(holdTime);*/


    }
    return 0;
}