Samples temperature once per minute - Stores the time series on a file - Displays the time series on STDout, from the beginning of the file up to current time, when pressing the button
Dependencies: BSP_B-L475E-IOT01
Revision 0:e53ff6cb04fd, committed 2018-12-06
- Comitter:
- vicara
- Date:
- Thu Dec 06 17:49:10 2018 +0000
- Commit message:
- temperature once per minute
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BSP_B-L475E-IOT01.lib Thu Dec 06 17:49:10 2018 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/ST/code/BSP_B-L475E-IOT01/#9dfa42666f03
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 06 17:49:10 2018 +0000 @@ -0,0 +1,121 @@ +#include "mbed.h" + +#include <stdio.h> +#include <errno.h> + +// Block devices +#if COMPONENT_SPIF +#include "SPIFBlockDevice.h" +#endif + +#if COMPONENT_DATAFLASH +#include "DataFlashBlockDevice.h" +#endif + +#if COMPONENT_SD +#include "SDBlockDevice.h" +#endif + +#include "HeapBlockDevice.h" + +// File systems +#include "LittleFileSystem.h" +#include "FATFileSystem.h" + +// Physical block device, can be any device that supports the BlockDevice API +/*SPIFBlockDevice bd( + MBED_CONF_SPIF_DRIVER_SPI_MOSI, + MBED_CONF_SPIF_DRIVER_SPI_MISO, + MBED_CONF_SPIF_DRIVER_SPI_CLK, + MBED_CONF_SPIF_DRIVER_SPI_CS);*/ + +#define BLOCK_SIZE 512 +HeapBlockDevice bd(16384, BLOCK_SIZE); +#include "stm32l475e_iot01_tsensor.h" + + +// File system declaration +LittleFileSystem fs("fs"); + +Ticker timeout_ticker; +Thread t; + +static FILE *f; +volatile int seconds_passed = 0; +EventQueue queue(32 * EVENTS_EVENT_SIZE); + +void write_temperature_on_file() { + float temperature = 0; + temperature = BSP_TSENSOR_ReadTemp(); + fprintf(f, "%f\n", temperature); + fflush(f); + fflush(stdout); + printf("New temperature stored in the file\n"); +} + +void print_temperature_from_file() { + printf("\n====== PRINTING TEMPERATURE RECORDED SO FAR ======\n"); + int order = 1; + fflush(stdout); + fflush(f); + fseek(f, 0, SEEK_SET); + float value; + while (!feof(f)) { + fscanf(f, "%f", &value); + printf(" %d: %f\n", order, value); + order++; + } + fflush(stdout); + printf("\n"); +} + +InterruptIn button(USER_BUTTON); + +void toggle() { + queue.call(print_temperature_from_file); +} + +void ticker_attach() { + queue.call(write_temperature_on_file); +} + +int main(){ + t.start(callback(&queue, &EventQueue::dispatch_forever)); + BSP_TSENSOR_Init(); + button.rise(&toggle); + + // Try to mount the filesystem + printf("Mounting the filesystem... "); + fflush(stdout); + int err = fs.mount(&bd); + printf("%s\n", (err ? "Fail :(" : "OK")); + if (err) { + // Reformat if we can't mount the filesystem + // this should only happen on the first boot + printf("No filesystem found, formatting... "); + fflush(stdout); + err = fs.reformat(&bd); + printf("%s\n", (err ? "Fail :(" : "OK")); + if (err) { + error("error: %s (%d)\n", strerror(-err), err); + } + } + + // Open the numbers file + printf("Opening \"/fs/numbers.txt\"... "); + fflush(stdout); + f = fopen("/fs/numbers.txt", "r+"); + printf("%s\n", (!f ? "Fail :(" : "OK")); + if (!f) { + // Create the numbers file if it doesn't exist + printf("No file found, creating a new file... "); + fflush(stdout); + f = fopen("/fs/numbers.txt", "w+"); + printf("%s\n", (!f ? "Fail :(" : "OK")); + if (!f) { + error("error: %s (%d)\n", strerror(errno), -errno); + } + } + + timeout_ticker.attach(&ticker_attach, 60); +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Thu Dec 06 17:49:10 2018 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#610e35ddc6d59f153173c1e7b2748cf96d6c9bcd