Exercise 1

Dependencies:   BSP_B-L475E-IOT01

Committer:
mcalzana
Date:
Thu Dec 06 15:09:45 2018 +0000
Revision:
0:bcd4eb707fcf
Exercise 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcalzana 0:bcd4eb707fcf 1
mcalzana 0:bcd4eb707fcf 2 #include "mbed.h"
mcalzana 0:bcd4eb707fcf 3 #include <stdio.h>
mcalzana 0:bcd4eb707fcf 4 #include <errno.h>
mcalzana 0:bcd4eb707fcf 5
mcalzana 0:bcd4eb707fcf 6 // Block devices
mcalzana 0:bcd4eb707fcf 7 #if COMPONENT_SPIF
mcalzana 0:bcd4eb707fcf 8 #include "SPIFBlockDevice.h"
mcalzana 0:bcd4eb707fcf 9 #endif
mcalzana 0:bcd4eb707fcf 10
mcalzana 0:bcd4eb707fcf 11 #if COMPONENT_DATAFLASH
mcalzana 0:bcd4eb707fcf 12 #include "DataFlashBlockDevice.h"
mcalzana 0:bcd4eb707fcf 13 #endif
mcalzana 0:bcd4eb707fcf 14
mcalzana 0:bcd4eb707fcf 15 #if COMPONENT_SD
mcalzana 0:bcd4eb707fcf 16 #include "SDBlockDevice.h"
mcalzana 0:bcd4eb707fcf 17 #endif
mcalzana 0:bcd4eb707fcf 18
mcalzana 0:bcd4eb707fcf 19 #include "HeapBlockDevice.h"
mcalzana 0:bcd4eb707fcf 20
mcalzana 0:bcd4eb707fcf 21 // File systems
mcalzana 0:bcd4eb707fcf 22 #include "LittleFileSystem.h"
mcalzana 0:bcd4eb707fcf 23 #include "FATFileSystem.h"
mcalzana 0:bcd4eb707fcf 24
mcalzana 0:bcd4eb707fcf 25 #include "stm32l475e_iot01_accelero.h"
mcalzana 0:bcd4eb707fcf 26
mcalzana 0:bcd4eb707fcf 27 // Physical block device, can be any device that supports the BlockDevice API
mcalzana 0:bcd4eb707fcf 28 /*SPIFBlockDevice bd(
mcalzana 0:bcd4eb707fcf 29 MBED_CONF_SPIF_DRIVER_SPI_MOSI,
mcalzana 0:bcd4eb707fcf 30 MBED_CONF_SPIF_DRIVER_SPI_MISO,
mcalzana 0:bcd4eb707fcf 31 MBED_CONF_SPIF_DRIVER_SPI_CLK,
mcalzana 0:bcd4eb707fcf 32 MBED_CONF_SPIF_DRIVER_SPI_CS);*/
mcalzana 0:bcd4eb707fcf 33
mcalzana 0:bcd4eb707fcf 34 #define BLOCK_SIZE 512
mcalzana 0:bcd4eb707fcf 35 HeapBlockDevice bd(4096, BLOCK_SIZE);
mcalzana 0:bcd4eb707fcf 36
mcalzana 0:bcd4eb707fcf 37 // File system declaration
mcalzana 0:bcd4eb707fcf 38 LittleFileSystem fs("fs");
mcalzana 0:bcd4eb707fcf 39
mcalzana 0:bcd4eb707fcf 40 DigitalOut led1(LED1);
mcalzana 0:bcd4eb707fcf 41 DigitalOut led2(LED2);
mcalzana 0:bcd4eb707fcf 42 DigitalOut led3(LED3);
mcalzana 0:bcd4eb707fcf 43
mcalzana 0:bcd4eb707fcf 44 // Set up the button to trigger an erase
mcalzana 0:bcd4eb707fcf 45 InterruptIn irq(BUTTON1);
mcalzana 0:bcd4eb707fcf 46 void erase() {
mcalzana 0:bcd4eb707fcf 47 printf("Initializing the block device... ");
mcalzana 0:bcd4eb707fcf 48 fflush(stdout);
mcalzana 0:bcd4eb707fcf 49 int err = bd.init();
mcalzana 0:bcd4eb707fcf 50 printf("%s\n", (err ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 51 if (err) {
mcalzana 0:bcd4eb707fcf 52 error("error: %s (%d)\n", strerror(-err), err);
mcalzana 0:bcd4eb707fcf 53 }
mcalzana 0:bcd4eb707fcf 54
mcalzana 0:bcd4eb707fcf 55 printf("Erasing the block device... ");
mcalzana 0:bcd4eb707fcf 56 fflush(stdout);
mcalzana 0:bcd4eb707fcf 57 err = bd.erase(0, bd.size());
mcalzana 0:bcd4eb707fcf 58 printf("%s\n", (err ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 59 if (err) {
mcalzana 0:bcd4eb707fcf 60 error("error: %s (%d)\n", strerror(-err), err);
mcalzana 0:bcd4eb707fcf 61 }
mcalzana 0:bcd4eb707fcf 62
mcalzana 0:bcd4eb707fcf 63 printf("Deinitializing the block device... ");
mcalzana 0:bcd4eb707fcf 64 fflush(stdout);
mcalzana 0:bcd4eb707fcf 65 err = bd.deinit();
mcalzana 0:bcd4eb707fcf 66 printf("%s\n", (err ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 67 if (err) {
mcalzana 0:bcd4eb707fcf 68 error("error: %s (%d)\n", strerror(-err), err);
mcalzana 0:bcd4eb707fcf 69 }
mcalzana 0:bcd4eb707fcf 70 }
mcalzana 0:bcd4eb707fcf 71
mcalzana 0:bcd4eb707fcf 72
mcalzana 0:bcd4eb707fcf 73 // Entry point for the example
mcalzana 0:bcd4eb707fcf 74
mcalzana 0:bcd4eb707fcf 75 Ticker toggle_write_to_file;
mcalzana 0:bcd4eb707fcf 76 EventQueue queue(16 * EVENTS_EVENT_SIZE);
mcalzana 0:bcd4eb707fcf 77 Thread t;
mcalzana 0:bcd4eb707fcf 78 static FILE *f;
mcalzana 0:bcd4eb707fcf 79 volatile int counter = 0;
mcalzana 0:bcd4eb707fcf 80 time_t begin = time(NULL);
mcalzana 0:bcd4eb707fcf 81
mcalzana 0:bcd4eb707fcf 82
mcalzana 0:bcd4eb707fcf 83
mcalzana 0:bcd4eb707fcf 84 void writeAccToFile(){
mcalzana 0:bcd4eb707fcf 85 int16_t pDataXYZ[3] = {0};
mcalzana 0:bcd4eb707fcf 86 BSP_ACCELERO_AccGetXYZ(pDataXYZ);
mcalzana 0:bcd4eb707fcf 87 int x = abs(pDataXYZ[0]);
mcalzana 0:bcd4eb707fcf 88 int y = abs(pDataXYZ[1]);
mcalzana 0:bcd4eb707fcf 89 int z = abs(pDataXYZ[2]);
mcalzana 0:bcd4eb707fcf 90 char c;
mcalzana 0:bcd4eb707fcf 91 if(z > 950 && z < 1050){
mcalzana 0:bcd4eb707fcf 92 c = 'z';
mcalzana 0:bcd4eb707fcf 93 } else if(y > 950 && y < 1050){
mcalzana 0:bcd4eb707fcf 94 c = 'y';
mcalzana 0:bcd4eb707fcf 95 }else if(x > 950 && x < 1050){
mcalzana 0:bcd4eb707fcf 96 c = 'x';
mcalzana 0:bcd4eb707fcf 97 }else{
mcalzana 0:bcd4eb707fcf 98 c = 'o';
mcalzana 0:bcd4eb707fcf 99 }
mcalzana 0:bcd4eb707fcf 100 fprintf(f, "%c", c);
mcalzana 0:bcd4eb707fcf 101 fflush(stdout);
mcalzana 0:bcd4eb707fcf 102 }
mcalzana 0:bcd4eb707fcf 103
mcalzana 0:bcd4eb707fcf 104 void readAccFile(){
mcalzana 0:bcd4eb707fcf 105 printf("end sampling \n");
mcalzana 0:bcd4eb707fcf 106
mcalzana 0:bcd4eb707fcf 107 // Close the file which also flushes any cached writes
mcalzana 0:bcd4eb707fcf 108 printf("Closing \"/fs/numbers.txt\"... ");
mcalzana 0:bcd4eb707fcf 109 fflush(stdout);
mcalzana 0:bcd4eb707fcf 110 int err = fclose(f);
mcalzana 0:bcd4eb707fcf 111 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 112 if (err < 0) {
mcalzana 0:bcd4eb707fcf 113 error("error: %s (%d)\n", strerror(errno), -errno);
mcalzana 0:bcd4eb707fcf 114 }
mcalzana 0:bcd4eb707fcf 115
mcalzana 0:bcd4eb707fcf 116 printf("Opening \"/fs/numbers.txt\"... ");
mcalzana 0:bcd4eb707fcf 117 fflush(stdout);
mcalzana 0:bcd4eb707fcf 118 f = fopen("/fs/numbers.txt", "r");
mcalzana 0:bcd4eb707fcf 119 printf("%s\n", (!f ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 120 if (!f) {
mcalzana 0:bcd4eb707fcf 121 error("error: %s (%d)\n", strerror(errno), -errno);
mcalzana 0:bcd4eb707fcf 122 }
mcalzana 0:bcd4eb707fcf 123
mcalzana 0:bcd4eb707fcf 124 int xCount = 0;
mcalzana 0:bcd4eb707fcf 125 int yCount = 0;
mcalzana 0:bcd4eb707fcf 126 int zCount = 0;
mcalzana 0:bcd4eb707fcf 127
mcalzana 0:bcd4eb707fcf 128 while (!feof(f)) {
mcalzana 0:bcd4eb707fcf 129 char c = fgetc(f);
mcalzana 0:bcd4eb707fcf 130 if(c == 'x'){
mcalzana 0:bcd4eb707fcf 131 xCount++;
mcalzana 0:bcd4eb707fcf 132 }else if(c == 'y'){
mcalzana 0:bcd4eb707fcf 133 yCount++;
mcalzana 0:bcd4eb707fcf 134 }else if(c == 'z'){
mcalzana 0:bcd4eb707fcf 135 zCount++;
mcalzana 0:bcd4eb707fcf 136 }
mcalzana 0:bcd4eb707fcf 137 }
mcalzana 0:bcd4eb707fcf 138 printf("Values: x: %d, y:%d, z: %d \n", xCount, yCount, zCount);
mcalzana 0:bcd4eb707fcf 139
mcalzana 0:bcd4eb707fcf 140 //Switch on the LED. x is default Led.
mcalzana 0:bcd4eb707fcf 141 if(xCount >= yCount && xCount >= zCount){
mcalzana 0:bcd4eb707fcf 142 led3 = 1;
mcalzana 0:bcd4eb707fcf 143 }else if(yCount > xCount && yCount > zCount){
mcalzana 0:bcd4eb707fcf 144 led2 = 1;
mcalzana 0:bcd4eb707fcf 145 }else{
mcalzana 0:bcd4eb707fcf 146 led1 = 1;
mcalzana 0:bcd4eb707fcf 147 }
mcalzana 0:bcd4eb707fcf 148
mcalzana 0:bcd4eb707fcf 149 printf("\rClosing \"/fs/numbers.txt\"... ");
mcalzana 0:bcd4eb707fcf 150 fflush(stdout);
mcalzana 0:bcd4eb707fcf 151 err = fclose(f);
mcalzana 0:bcd4eb707fcf 152 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 153 if (err < 0) {
mcalzana 0:bcd4eb707fcf 154 error("error: %s (%d)\n", strerror(errno), -errno);
mcalzana 0:bcd4eb707fcf 155 }
mcalzana 0:bcd4eb707fcf 156
mcalzana 0:bcd4eb707fcf 157 // Tidy up
mcalzana 0:bcd4eb707fcf 158 printf("Unmounting... ");
mcalzana 0:bcd4eb707fcf 159 fflush(stdout);
mcalzana 0:bcd4eb707fcf 160 err = fs.unmount();
mcalzana 0:bcd4eb707fcf 161 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 162 if (err < 0) {
mcalzana 0:bcd4eb707fcf 163 error("error: %s (%d)\n", strerror(-err), err);
mcalzana 0:bcd4eb707fcf 164 }
mcalzana 0:bcd4eb707fcf 165 printf("Mbed OS filesystem example done!\n");
mcalzana 0:bcd4eb707fcf 166
mcalzana 0:bcd4eb707fcf 167 }
mcalzana 0:bcd4eb707fcf 168
mcalzana 0:bcd4eb707fcf 169 void readSensorsInterupt() {
mcalzana 0:bcd4eb707fcf 170 queue.call(writeAccToFile);
mcalzana 0:bcd4eb707fcf 171 counter++;
mcalzana 0:bcd4eb707fcf 172 if (counter == 1000) {
mcalzana 0:bcd4eb707fcf 173 toggle_write_to_file.detach();
mcalzana 0:bcd4eb707fcf 174 queue.call(readAccFile);
mcalzana 0:bcd4eb707fcf 175 }
mcalzana 0:bcd4eb707fcf 176 }
mcalzana 0:bcd4eb707fcf 177
mcalzana 0:bcd4eb707fcf 178 int main() {
mcalzana 0:bcd4eb707fcf 179 // Setup the erase event on button press, use the event queue
mcalzana 0:bcd4eb707fcf 180 // to avoid running in interrupt context
mcalzana 0:bcd4eb707fcf 181 irq.fall(mbed_event_queue()->event(erase));
mcalzana 0:bcd4eb707fcf 182
mcalzana 0:bcd4eb707fcf 183 // Try to mount the filesystem
mcalzana 0:bcd4eb707fcf 184 printf("Mounting the filesystem... ");
mcalzana 0:bcd4eb707fcf 185 fflush(stdout);
mcalzana 0:bcd4eb707fcf 186 int err = fs.mount(&bd);
mcalzana 0:bcd4eb707fcf 187 printf("%s\n", (err ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 188 if (err) {
mcalzana 0:bcd4eb707fcf 189 // Reformat if we can't mount the filesystem
mcalzana 0:bcd4eb707fcf 190 // this should only happen on the first boot
mcalzana 0:bcd4eb707fcf 191 printf("No filesystem found, formatting... ");
mcalzana 0:bcd4eb707fcf 192 fflush(stdout);
mcalzana 0:bcd4eb707fcf 193 err = fs.reformat(&bd);
mcalzana 0:bcd4eb707fcf 194 printf("%s\n", (err ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 195 if (err) {
mcalzana 0:bcd4eb707fcf 196 error("error: %s (%d)\n", strerror(-err), err);
mcalzana 0:bcd4eb707fcf 197 }
mcalzana 0:bcd4eb707fcf 198 }
mcalzana 0:bcd4eb707fcf 199
mcalzana 0:bcd4eb707fcf 200 // Open the numbers file
mcalzana 0:bcd4eb707fcf 201 printf("Opening \"/fs/numbers.txt\"... ");
mcalzana 0:bcd4eb707fcf 202 fflush(stdout);
mcalzana 0:bcd4eb707fcf 203 f = fopen("/fs/numbers.txt", "r +");
mcalzana 0:bcd4eb707fcf 204 printf("%s\n", (!f ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 205 if (!f) {
mcalzana 0:bcd4eb707fcf 206 // Create the numbers file if it doesn't exist
mcalzana 0:bcd4eb707fcf 207 printf("No file found, creating a new file... ");
mcalzana 0:bcd4eb707fcf 208 fflush(stdout);
mcalzana 0:bcd4eb707fcf 209 f = fopen("/fs/numbers.txt", "w+");
mcalzana 0:bcd4eb707fcf 210 printf("%s\n", (!f ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 211 if (!f) {
mcalzana 0:bcd4eb707fcf 212 error("error: %s (%d)\n", strerror(errno), -errno);
mcalzana 0:bcd4eb707fcf 213 }
mcalzana 0:bcd4eb707fcf 214
mcalzana 0:bcd4eb707fcf 215 printf("Seeking file... ");
mcalzana 0:bcd4eb707fcf 216 fflush(stdout);
mcalzana 0:bcd4eb707fcf 217 err = fseek(f, 0, SEEK_SET);
mcalzana 0:bcd4eb707fcf 218 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
mcalzana 0:bcd4eb707fcf 219 if (err < 0) {
mcalzana 0:bcd4eb707fcf 220 error("error: %s (%d)\n", strerror(errno), -errno);
mcalzana 0:bcd4eb707fcf 221 }
mcalzana 0:bcd4eb707fcf 222 }
mcalzana 0:bcd4eb707fcf 223
mcalzana 0:bcd4eb707fcf 224 t.start(callback(&queue, &EventQueue::dispatch_forever));
mcalzana 0:bcd4eb707fcf 225 BSP_ACCELERO_Init();
mcalzana 0:bcd4eb707fcf 226 led1 = 0;
mcalzana 0:bcd4eb707fcf 227 led2 = 0;
mcalzana 0:bcd4eb707fcf 228 led3 = 0;
mcalzana 0:bcd4eb707fcf 229 printf("Start sampling... \n");
mcalzana 0:bcd4eb707fcf 230 begin = time(NULL);
mcalzana 0:bcd4eb707fcf 231 toggle_write_to_file.attach(&readSensorsInterupt, 0.01);
mcalzana 0:bcd4eb707fcf 232 }
mcalzana 0:bcd4eb707fcf 233
mcalzana 0:bcd4eb707fcf 234
mcalzana 0:bcd4eb707fcf 235
mcalzana 0:bcd4eb707fcf 236
mcalzana 0:bcd4eb707fcf 237
mcalzana 0:bcd4eb707fcf 238
mcalzana 0:bcd4eb707fcf 239
mcalzana 0:bcd4eb707fcf 240
mcalzana 0:bcd4eb707fcf 241
mcalzana 0:bcd4eb707fcf 242
mcalzana 0:bcd4eb707fcf 243
mcalzana 0:bcd4eb707fcf 244