Solution to Task 690

Dependencies:   BMP280 ELEC350-Practicals-FZ429 BME280

Fork of Task690solution-mbed-os-FZ429ZI_ by University of Plymouth - Stages 1, 2 and 3

main.cpp

Committer:
noutram
Date:
2019-11-22
Revision:
6:0ce59a5ca801
Parent:
5:4959019b2904

File content as of revision 6:0ce59a5ca801:

/* Access an SD Card using SPI */
 
 #include "mbed.h"
 #include "SDBlockDevice.h"
 #include "FATFileSystem.h"
 #include "sample_hardware.hpp"
 #include "mbed_events.h"
 
 //SD Card Object
SDBlockDevice sd(PB_5, D12, D13, D10); // mosi, miso, sclk, cs

//Event queue for main
EventQueue queue;

//File pointer for the SD card
FILE* fp;

//Flag to indicate if the user has ejected the SD card
bool ejected = false;

//This is called every 5 seconds by the main event queue (main thread) 
void takeSample()
{
    //If the card is unmounted, just return
    if (ejected == true) {
        return;    
    }
    
    //Read Sensors (I2C)
    float temp     = sensor.getTemperature();
    float pressure = sensor.getPressure();
    
    //Write to SD Card
    fprintf(fp, "%f,%f\n", temp, pressure);
    
    //Flash to indicate the sampling is alive
    redLED = 1;
    Thread::wait(100);
    redLED = 0;
    
    //Chheck switches - press both to eject
    if ((SW1 == 1) && (SW2 == 1)) {
        //Close File
        fclose(fp);
        
        //Close down SD card (flush buffers)
        sd.deinit();
        
        //Let user know     
        puts("You can now remove the SD Card\n");
        yellowLED = 1;
        
        //Flag to record the event
        ejected = true;
    }
}
 
 int main()
{
    //POWER ON SELF TEST
    post();
    
    printf("Initialise\n");
    //FileSystemLike(*sd);

    // call the SDBlockDevice instance initialisation method.
    if ( sd.init() != 0) {
        printf("Init failed \n");
        errorCode(FATAL);
    }    
    
    //Create a filing system for SD Card
    FATFileSystem fs("sd", &sd);
    
    // **************
    // Open to APPEND
    // **************
    fp = fopen("/sd/test.txt","a");
    
    //Check file handle (stream)
    if (fp == NULL) {
        error("Could not open file for write\n");
        errorCode(FATAL);
    }
    
    //Set up tasks on the main thread
    queue.call_every(5000, takeSample);
    
    //Main queue event loop
    queue.dispatch();

}