TemperatureButtonFile

Dependencies:   BSP_B-L475E-IOT01

Committer:
redona
Date:
Thu Dec 06 22:05:39 2018 +0000
Revision:
0:9319218c5e36
TemperatureButtonFile

Who changed what in which revision?

UserRevisionLine numberNew contents of line
redona 0:9319218c5e36 1 #include "mbed.h"
redona 0:9319218c5e36 2
redona 0:9319218c5e36 3 #include <stdio.h>
redona 0:9319218c5e36 4 #include <errno.h>
redona 0:9319218c5e36 5
redona 0:9319218c5e36 6 // Block devices
redona 0:9319218c5e36 7 #if COMPONENT_SPIF
redona 0:9319218c5e36 8 #include "SPIFBlockDevice.h"
redona 0:9319218c5e36 9 #endif
redona 0:9319218c5e36 10
redona 0:9319218c5e36 11 #if COMPONENT_DATAFLASH
redona 0:9319218c5e36 12 #include "DataFlashBlockDevice.h"
redona 0:9319218c5e36 13 #endif
redona 0:9319218c5e36 14
redona 0:9319218c5e36 15 #if COMPONENT_SD
redona 0:9319218c5e36 16 #include "SDBlockDevice.h"
redona 0:9319218c5e36 17 #endif
redona 0:9319218c5e36 18
redona 0:9319218c5e36 19 #include "HeapBlockDevice.h"
redona 0:9319218c5e36 20
redona 0:9319218c5e36 21 // File systems
redona 0:9319218c5e36 22 #include "LittleFileSystem.h"
redona 0:9319218c5e36 23 #include "FATFileSystem.h"
redona 0:9319218c5e36 24
redona 0:9319218c5e36 25 // Physical block device, can be any device that supports the BlockDevice API
redona 0:9319218c5e36 26 /*SPIFBlockDevice bd(
redona 0:9319218c5e36 27 MBED_CONF_SPIF_DRIVER_SPI_MOSI,
redona 0:9319218c5e36 28 MBED_CONF_SPIF_DRIVER_SPI_MISO,
redona 0:9319218c5e36 29 MBED_CONF_SPIF_DRIVER_SPI_CLK,
redona 0:9319218c5e36 30 MBED_CONF_SPIF_DRIVER_SPI_CS);*/
redona 0:9319218c5e36 31
redona 0:9319218c5e36 32 #define BLOCK_SIZE 512
redona 0:9319218c5e36 33 HeapBlockDevice bd(16384, BLOCK_SIZE);
redona 0:9319218c5e36 34 #include "stm32l475e_iot01_tsensor.h"
redona 0:9319218c5e36 35
redona 0:9319218c5e36 36 // File system declaration
redona 0:9319218c5e36 37 LittleFileSystem fs("fs");
redona 0:9319218c5e36 38
redona 0:9319218c5e36 39 Ticker ticker;
redona 0:9319218c5e36 40 Thread t;
redona 0:9319218c5e36 41 static FILE *f;
redona 0:9319218c5e36 42 EventQueue queue(16 * EVENTS_EVENT_SIZE);
redona 0:9319218c5e36 43 InterruptIn button(USER_BUTTON);
redona 0:9319218c5e36 44
redona 0:9319218c5e36 45
redona 0:9319218c5e36 46 void display_temperature() {
redona 0:9319218c5e36 47 int count = 1;
redona 0:9319218c5e36 48 fflush(stdout);
redona 0:9319218c5e36 49 fflush(f);
redona 0:9319218c5e36 50 fseek(f, 0, SEEK_SET);
redona 0:9319218c5e36 51 float value;
redona 0:9319218c5e36 52 while (!feof(f)) {
redona 0:9319218c5e36 53 fscanf(f, "%f", &value);
redona 0:9319218c5e36 54 printf("The %dst/nd temperature recorded was %f degress.\n", count, value);
redona 0:9319218c5e36 55 count++;
redona 0:9319218c5e36 56 }
redona 0:9319218c5e36 57 fflush(stdout);
redona 0:9319218c5e36 58 }
redona 0:9319218c5e36 59
redona 0:9319218c5e36 60
redona 0:9319218c5e36 61 void store_temperature() {
redona 0:9319218c5e36 62 float temperature = 0;
redona 0:9319218c5e36 63 temperature = BSP_TSENSOR_ReadTemp();
redona 0:9319218c5e36 64 fprintf(f, "%f\n", temperature);
redona 0:9319218c5e36 65 fflush(f);
redona 0:9319218c5e36 66 fflush(stdout);
redona 0:9319218c5e36 67 printf("A new temperature is being stored...\n");
redona 0:9319218c5e36 68 }
redona 0:9319218c5e36 69
redona 0:9319218c5e36 70 void rise_call() {
redona 0:9319218c5e36 71 queue.call(display_temperature);
redona 0:9319218c5e36 72 }
redona 0:9319218c5e36 73
redona 0:9319218c5e36 74 void ticker_call() {
redona 0:9319218c5e36 75 queue.call(store_temperature);
redona 0:9319218c5e36 76 }
redona 0:9319218c5e36 77
redona 0:9319218c5e36 78 int main(){
redona 0:9319218c5e36 79 t.start(callback(&queue, &EventQueue::dispatch_forever));
redona 0:9319218c5e36 80 BSP_TSENSOR_Init();
redona 0:9319218c5e36 81 button.rise(&rise_call);
redona 0:9319218c5e36 82
redona 0:9319218c5e36 83 // Try to mount the filesystem
redona 0:9319218c5e36 84 printf("Mounting the filesystem... ");
redona 0:9319218c5e36 85 fflush(stdout);
redona 0:9319218c5e36 86 int err = fs.mount(&bd);
redona 0:9319218c5e36 87 printf("%s\n", (err ? "Fail :(" : "OK"));
redona 0:9319218c5e36 88 if (err) {
redona 0:9319218c5e36 89 // Reformat if we can't mount the filesystem
redona 0:9319218c5e36 90 // this should only happen on the first boot
redona 0:9319218c5e36 91 printf("No filesystem found, formatting... ");
redona 0:9319218c5e36 92 fflush(stdout);
redona 0:9319218c5e36 93 err = fs.reformat(&bd);
redona 0:9319218c5e36 94 printf("%s\n", (err ? "Fail :(" : "OK"));
redona 0:9319218c5e36 95 if (err) {
redona 0:9319218c5e36 96 error("error: %s (%d)\n", strerror(-err), err);
redona 0:9319218c5e36 97 }
redona 0:9319218c5e36 98 }
redona 0:9319218c5e36 99
redona 0:9319218c5e36 100 // Open the numbers file
redona 0:9319218c5e36 101 printf("Opening \"/fs/numbers.txt\"... ");
redona 0:9319218c5e36 102 fflush(stdout);
redona 0:9319218c5e36 103 f = fopen("/fs/numbers.txt", "r+");
redona 0:9319218c5e36 104 printf("%s\n", (!f ? "Fail :(" : "OK"));
redona 0:9319218c5e36 105 if (!f) {
redona 0:9319218c5e36 106 // Create the numbers file if it doesn't exist
redona 0:9319218c5e36 107 printf("No file found, creating a new file... ");
redona 0:9319218c5e36 108 fflush(stdout);
redona 0:9319218c5e36 109 f = fopen("/fs/numbers.txt", "w+");
redona 0:9319218c5e36 110 printf("%s\n", (!f ? "Fail :(" : "OK"));
redona 0:9319218c5e36 111 if (!f) {
redona 0:9319218c5e36 112 error("error: %s (%d)\n", strerror(errno), -errno);
redona 0:9319218c5e36 113 }
redona 0:9319218c5e36 114 }
redona 0:9319218c5e36 115
redona 0:9319218c5e36 116 ticker.attach(&ticker_call, 5);
redona 0:9319218c5e36 117 }