kl25z accel dataloger

Dependencies:   MMA8451Q MMA8491Q PCF8583_rtc SDFileSystem mbed

Fork of SDFileSystem_HelloWorld by Neil Thiessen

Revision:
26:7c2df5486af7
Parent:
20:ec1c4f02d50e
--- a/main.cpp	Mon Aug 29 15:06:56 2016 +0000
+++ b/main.cpp	Wed Oct 19 10:29:47 2016 +0000
@@ -1,129 +1,339 @@
+
 #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"
 
-Timer timer;
-DigitalIn button(p21, PullUp);
-SDFileSystem sd(p5, p6, p7, p20, "sd", p22, SDFileSystem::SWITCH_NEG_NO, 25000000);
-char buffer[4096];
+
+#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);
 
-void writeTest()
+//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 ()
 {
-    //Test write performance by creating a 1MB file
-    printf("Testing %iB write performance...", sizeof(buffer));
-    FileHandle* file = sd.open("Test File.bin", O_WRONLY | O_CREAT | O_TRUNC);
-    if (file != NULL) {
-        timer.start();
-        for (int i = 0; i < (1048576 / sizeof(buffer)); i++) {
-            if (file->write(buffer, sizeof(buffer)) != sizeof(buffer)) {
-                timer.stop();
-                printf("write error!\n");
-                timer.reset();
-                return;
-            }
-        }
-        timer.stop();
-        if (file->close())
-            printf("failed to close file!\n");
-        else
-            printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
-        timer.reset();
-    } else {
-        printf("failed to create file!\n");
+
+    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 readTest()
+
+void clockset()
 {
-    //Test read performance by reading the 1MB file created by writeTest()
-    printf("Testing %iB read performance...", sizeof(buffer));
-    FileHandle* file = sd.open("Test File.bin", O_RDONLY);
-    if (file != NULL) {
-        timer.start();
-        int iterations = 0;
-        while (file->read(buffer, sizeof(buffer)) == sizeof(buffer))
-            iterations++;
-        timer.stop();
-        if (iterations != (1048576 / sizeof(buffer)))
-            printf("read error!\n");
-        else if (file->close())
-            printf("failed to close file!\n");
-        else if (sd.remove("Test File.bin"))
-            printf("failed to delete file!\n");
-        else
-            printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
-        timer.reset();
-    } else {
-        printf("failed to open file!\n");
-    }
+    /* 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()
+
 {
-    //Configure CRC, large frames, and write validation
-    sd.crc(true);
-    sd.large_frames(true);
-    sd.write_validation(true);
+    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;
 
-    //Fill the buffer with random data for the write test
-    srand(time(NULL));
-    for (int i = 0; i < sizeof(buffer); i++)
-        buffer[i] = rand();
+    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);
 
-    while(1) {
-        //Simple button debouncing
-        wait(0.5);
+        //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);
 
-        //Print the start message
-        printf("\nPress the button to perform tests: ");
+        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;
+
 
-        //Wait for the button to be pressed
-        while(button);
+        //  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;
 
-        //Make sure a card is present
-        if (!sd.card_present()) {
-            printf("\nNo card present!\n");
-            continue;
+            //    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;
+            // }
         }
 
-        //Try to mount the SD card
-        printf("\nMounting SD card...");
-        if (sd.mount() != 0) {
-            printf("failed!\n");
-            continue;
-        }
-        printf("success!\n");
+
+        //  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;
 
-        //Display the card type
-        printf("\tCard type: ");
-        SDFileSystem::CardType cardType = sd.card_type();
-        if (cardType == SDFileSystem::CARD_NONE)
-            printf("None\n");
-        else if (cardType == SDFileSystem::CARD_MMC)
-            printf("MMC\n");
-        else if (cardType == SDFileSystem::CARD_SD)
-            printf("SD\n");
-        else if (cardType == SDFileSystem::CARD_SDHC)
-            printf("SDHC\n");
-        else
-            printf("Unknown\n");
+
+         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);
 
-        //Display the card capacity
-        printf("\tSectors: %u\n", sd.disk_sectors());
-        printf("\tCapacity: %.1fMB\n", sd.disk_sectors() / 2048.0);
+         enMMA8491 = off;
+
+
+
+         mplPres = mpl.getPressure();
 
-        /*//Format the card
-        printf("Formatting SD card...");
-        if (sd.format() != 0) {
-            printf("failed!\n");
-            continue;
-        }
-        printf("success!\n");*/
+         //cout << "Touch: " << tsi.readPercentage() << "\n\r" << endl;
+         cout << "MPL3115: " << mplAlt << "\t" << mplPres << "\t" << mplTemp << "\n\r" << endl;
+         mpl.Altimeter_Mode();
+         wait(holdTime);*/
 
-        //Perform a read/write test
-        writeTest();
-        readTest();
 
-        //Unmount the SD card
-        sd.unmount();
     }
+    return 0;
 }