AccellerationFile Assignment

Dependencies:   BSP_B-L475E-IOT01

Committer:
framtk
Date:
Thu Dec 06 20:28:08 2018 +0000
Revision:
27:0cf170538518
Parent:
26:130bb1173866
done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:8e251d9511b8 1 #include "mbed.h"
mbed_official 0:8e251d9511b8 2 #include <stdio.h>
mbed_official 0:8e251d9511b8 3 #include <errno.h>
mbed_official 0:8e251d9511b8 4
mbed_official 0:8e251d9511b8 5 // Block devices
mbed_official 25:65a9183a2178 6 #if COMPONENT_SPIF
mbed_official 0:8e251d9511b8 7 #include "SPIFBlockDevice.h"
mbed_official 25:65a9183a2178 8 #endif
mbed_official 25:65a9183a2178 9
mbed_official 25:65a9183a2178 10 #if COMPONENT_DATAFLASH
mbed_official 1:2bfc377bcc2a 11 #include "DataFlashBlockDevice.h"
mbed_official 25:65a9183a2178 12 #endif
mbed_official 25:65a9183a2178 13
mbed_official 25:65a9183a2178 14 #if COMPONENT_SD
mbed_official 0:8e251d9511b8 15 #include "SDBlockDevice.h"
mbed_official 25:65a9183a2178 16 #endif
mbed_official 25:65a9183a2178 17
mbed_official 0:8e251d9511b8 18 #include "HeapBlockDevice.h"
mbed_official 0:8e251d9511b8 19
mbed_official 0:8e251d9511b8 20 // File systems
mbed_official 0:8e251d9511b8 21 #include "LittleFileSystem.h"
mbed_official 0:8e251d9511b8 22 #include "FATFileSystem.h"
framtk 27:0cf170538518 23 #include "stm32l475e_iot01_accelero.h"
mbed_official 0:8e251d9511b8 24
mbed_official 0:8e251d9511b8 25 // Physical block device, can be any device that supports the BlockDevice API
lmottola 26:130bb1173866 26 /*SPIFBlockDevice bd(
mbed_official 0:8e251d9511b8 27 MBED_CONF_SPIF_DRIVER_SPI_MOSI,
mbed_official 0:8e251d9511b8 28 MBED_CONF_SPIF_DRIVER_SPI_MISO,
mbed_official 0:8e251d9511b8 29 MBED_CONF_SPIF_DRIVER_SPI_CLK,
lmottola 26:130bb1173866 30 MBED_CONF_SPIF_DRIVER_SPI_CS);*/
lmottola 26:130bb1173866 31
framtk 27:0cf170538518 32 DigitalOut led_1(LED1);
framtk 27:0cf170538518 33 DigitalOut led_2(LED2);
framtk 27:0cf170538518 34 DigitalOut led_3(LED3);
framtk 27:0cf170538518 35 Ticker check_led_status;
framtk 27:0cf170538518 36
framtk 27:0cf170538518 37 EventQueue queue(32 * EVENTS_EVENT_SIZE);
framtk 27:0cf170538518 38 Thread t;
framtk 27:0cf170538518 39
lmottola 26:130bb1173866 40 #define BLOCK_SIZE 512
framtk 27:0cf170538518 41 HeapBlockDevice bd(32768, BLOCK_SIZE);
framtk 27:0cf170538518 42
framtk 27:0cf170538518 43 #define LED_1_VALUE 1
framtk 27:0cf170538518 44 #define LED_2_VALUE 2
framtk 27:0cf170538518 45 #define LED_3_VALUE 3
mbed_official 0:8e251d9511b8 46
mbed_official 0:8e251d9511b8 47 // File system declaration
mbed_official 0:8e251d9511b8 48 LittleFileSystem fs("fs");
mbed_official 0:8e251d9511b8 49
mbed_official 0:8e251d9511b8 50 // Set up the button to trigger an erase
mbed_official 0:8e251d9511b8 51 InterruptIn irq(BUTTON1);
mbed_official 0:8e251d9511b8 52 void erase() {
mbed_official 0:8e251d9511b8 53 printf("Initializing the block device... ");
mbed_official 0:8e251d9511b8 54 fflush(stdout);
mbed_official 0:8e251d9511b8 55 int err = bd.init();
mbed_official 0:8e251d9511b8 56 printf("%s\n", (err ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 57 if (err) {
mbed_official 0:8e251d9511b8 58 error("error: %s (%d)\n", strerror(-err), err);
mbed_official 0:8e251d9511b8 59 }
mbed_official 0:8e251d9511b8 60
mbed_official 0:8e251d9511b8 61 printf("Erasing the block device... ");
mbed_official 0:8e251d9511b8 62 fflush(stdout);
mbed_official 0:8e251d9511b8 63 err = bd.erase(0, bd.size());
mbed_official 0:8e251d9511b8 64 printf("%s\n", (err ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 65 if (err) {
mbed_official 0:8e251d9511b8 66 error("error: %s (%d)\n", strerror(-err), err);
mbed_official 0:8e251d9511b8 67 }
mbed_official 0:8e251d9511b8 68
mbed_official 0:8e251d9511b8 69 printf("Deinitializing the block device... ");
mbed_official 0:8e251d9511b8 70 fflush(stdout);
mbed_official 0:8e251d9511b8 71 err = bd.deinit();
mbed_official 0:8e251d9511b8 72 printf("%s\n", (err ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 73 if (err) {
mbed_official 0:8e251d9511b8 74 error("error: %s (%d)\n", strerror(-err), err);
mbed_official 0:8e251d9511b8 75 }
mbed_official 0:8e251d9511b8 76 }
mbed_official 0:8e251d9511b8 77
framtk 27:0cf170538518 78 static FILE *f;
framtk 27:0cf170538518 79 volatile int counter = 0;
framtk 27:0cf170538518 80
framtk 27:0cf170538518 81 void read_acc() {
framtk 27:0cf170538518 82 int16_t pDataXYZ[3] = {0};
framtk 27:0cf170538518 83 BSP_ACCELERO_AccGetXYZ(pDataXYZ);
framtk 27:0cf170538518 84 if (abs(pDataXYZ[2]) > 900) { // board laying down
framtk 27:0cf170538518 85 fprintf(f, "%d\n", LED_1_VALUE);
framtk 27:0cf170538518 86 } else if (abs(pDataXYZ[1]) > 900) { // long side
framtk 27:0cf170538518 87 fprintf(f, "%d\n", LED_2_VALUE);
framtk 27:0cf170538518 88 } else if (abs(pDataXYZ[0]) > 900) { // short side
framtk 27:0cf170538518 89 fprintf(f, "%d\n", LED_3_VALUE);
framtk 27:0cf170538518 90 } else { // all other positions
framtk 27:0cf170538518 91 fprintf(f, "%d\n", -1);
framtk 27:0cf170538518 92 }
framtk 27:0cf170538518 93
framtk 27:0cf170538518 94 fflush(f);
framtk 27:0cf170538518 95 fflush(stdout);
framtk 27:0cf170538518 96 }
framtk 27:0cf170538518 97
framtk 27:0cf170538518 98 void read_data_from_file() {
framtk 27:0cf170538518 99 int led1_counter = 0;
framtk 27:0cf170538518 100 int led2_counter = 0;
framtk 27:0cf170538518 101 int led3_counter = 0;
framtk 27:0cf170538518 102 fflush(stdout);
framtk 27:0cf170538518 103 fflush(f);
framtk 27:0cf170538518 104
framtk 27:0cf170538518 105 // read file and count occurrences of position numbers
framtk 27:0cf170538518 106 fseek(f, 0, SEEK_SET);
framtk 27:0cf170538518 107 int number;
framtk 27:0cf170538518 108 while (!feof(f)) {
framtk 27:0cf170538518 109 fscanf(f, "%d", &number);
framtk 27:0cf170538518 110
framtk 27:0cf170538518 111 switch (number){
framtk 27:0cf170538518 112 case LED_1_VALUE:
framtk 27:0cf170538518 113 led1_counter += 1;
framtk 27:0cf170538518 114 break;
framtk 27:0cf170538518 115 case LED_2_VALUE:
framtk 27:0cf170538518 116 led2_counter += 1;
framtk 27:0cf170538518 117 break;
framtk 27:0cf170538518 118 case LED_3_VALUE:
framtk 27:0cf170538518 119 led3_counter += 1;
framtk 27:0cf170538518 120 break;
framtk 27:0cf170538518 121 default:
framtk 27:0cf170538518 122 break;
framtk 27:0cf170538518 123 }
framtk 27:0cf170538518 124 }
framtk 27:0cf170538518 125
framtk 27:0cf170538518 126 // check which position is the one present the most
framtk 27:0cf170538518 127 if (led1_counter > led2_counter && led1_counter > led3_counter) {
framtk 27:0cf170538518 128 led_1 = 1;
framtk 27:0cf170538518 129 led_2 = 0;
framtk 27:0cf170538518 130 led_3 = 0;
framtk 27:0cf170538518 131 } else if (led2_counter > led1_counter && led2_counter > led3_counter ) {
framtk 27:0cf170538518 132 led_1 = 0;
framtk 27:0cf170538518 133 led_2 = 1;
framtk 27:0cf170538518 134 led_3 = 0;
framtk 27:0cf170538518 135 } else if (led3_counter > led1_counter && led3_counter > led2_counter) {
framtk 27:0cf170538518 136 led_1 = 0;
framtk 27:0cf170538518 137 led_2 = 0;
framtk 27:0cf170538518 138 led_3 = 1;
framtk 27:0cf170538518 139 }
framtk 27:0cf170538518 140
framtk 27:0cf170538518 141 fflush(stdout);
framtk 27:0cf170538518 142 int err = fclose(f);
framtk 27:0cf170538518 143 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
framtk 27:0cf170538518 144 if (err < 0) {
framtk 27:0cf170538518 145 error("error: %s (%d)\n", strerror(err), -err);
framtk 27:0cf170538518 146 }
framtk 27:0cf170538518 147 err = fs.unmount();
framtk 27:0cf170538518 148 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
framtk 27:0cf170538518 149 if (err < 0) {
framtk 27:0cf170538518 150 error("error: %s (%d)\n", strerror(-err), err);
framtk 27:0cf170538518 151 }
framtk 27:0cf170538518 152
framtk 27:0cf170538518 153 if (led_1){
framtk 27:0cf170538518 154 printf("Lighting up corresponding LED 1!\n");
framtk 27:0cf170538518 155 } else if (led_2){
framtk 27:0cf170538518 156 printf("Lighting up corresponding LED 2!\n");
framtk 27:0cf170538518 157 } else if (led_3){
framtk 27:0cf170538518 158 printf("Lighting up corresponding LED 3!\n");
framtk 27:0cf170538518 159 } else {
framtk 27:0cf170538518 160 printf("No valid position detected during the sampling time, no LED lighting up!\n");
framtk 27:0cf170538518 161 }
framtk 27:0cf170538518 162
framtk 27:0cf170538518 163 }
framtk 27:0cf170538518 164
framtk 27:0cf170538518 165 void toggle_led() {
framtk 27:0cf170538518 166 queue.call(read_acc);
framtk 27:0cf170538518 167 counter++;
framtk 27:0cf170538518 168 if (counter == 100*10) {
framtk 27:0cf170538518 169 check_led_status.detach();
framtk 27:0cf170538518 170 queue.call(read_data_from_file);
framtk 27:0cf170538518 171 }
framtk 27:0cf170538518 172
framtk 27:0cf170538518 173 }
mbed_official 0:8e251d9511b8 174
mbed_official 0:8e251d9511b8 175 // Entry point for the example
mbed_official 0:8e251d9511b8 176 int main() {
framtk 27:0cf170538518 177 t.start(callback(&queue, &EventQueue::dispatch_forever));
framtk 27:0cf170538518 178 BSP_ACCELERO_Init();
framtk 27:0cf170538518 179
framtk 27:0cf170538518 180
mbed_official 0:8e251d9511b8 181 printf("--- Mbed OS filesystem example ---\n");
mbed_official 0:8e251d9511b8 182
mbed_official 12:a07d0af60cc6 183 // Setup the erase event on button press, use the event queue
mbed_official 12:a07d0af60cc6 184 // to avoid running in interrupt context
mbed_official 12:a07d0af60cc6 185 irq.fall(mbed_event_queue()->event(erase));
mbed_official 0:8e251d9511b8 186
mbed_official 0:8e251d9511b8 187 // Try to mount the filesystem
mbed_official 0:8e251d9511b8 188 printf("Mounting the filesystem... ");
mbed_official 0:8e251d9511b8 189 fflush(stdout);
mbed_official 0:8e251d9511b8 190 int err = fs.mount(&bd);
mbed_official 0:8e251d9511b8 191 printf("%s\n", (err ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 192 if (err) {
mbed_official 0:8e251d9511b8 193 // Reformat if we can't mount the filesystem
mbed_official 0:8e251d9511b8 194 // this should only happen on the first boot
mbed_official 0:8e251d9511b8 195 printf("No filesystem found, formatting... ");
mbed_official 0:8e251d9511b8 196 fflush(stdout);
mbed_official 0:8e251d9511b8 197 err = fs.reformat(&bd);
mbed_official 0:8e251d9511b8 198 printf("%s\n", (err ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 199 if (err) {
mbed_official 0:8e251d9511b8 200 error("error: %s (%d)\n", strerror(-err), err);
mbed_official 0:8e251d9511b8 201 }
mbed_official 0:8e251d9511b8 202 }
mbed_official 0:8e251d9511b8 203
mbed_official 0:8e251d9511b8 204 // Open the numbers file
mbed_official 0:8e251d9511b8 205 printf("Opening \"/fs/numbers.txt\"... ");
mbed_official 0:8e251d9511b8 206 fflush(stdout);
framtk 27:0cf170538518 207 f = fopen("/fs/numbers.txt", "r +");
mbed_official 0:8e251d9511b8 208 printf("%s\n", (!f ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 209 if (!f) {
mbed_official 0:8e251d9511b8 210 // Create the numbers file if it doesn't exist
mbed_official 0:8e251d9511b8 211 printf("No file found, creating a new file... ");
mbed_official 0:8e251d9511b8 212 fflush(stdout);
mbed_official 0:8e251d9511b8 213 f = fopen("/fs/numbers.txt", "w+");
mbed_official 0:8e251d9511b8 214 printf("%s\n", (!f ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 215 if (!f) {
mbed_official 0:8e251d9511b8 216 error("error: %s (%d)\n", strerror(errno), -errno);
mbed_official 0:8e251d9511b8 217 }
mbed_official 0:8e251d9511b8 218
mbed_official 0:8e251d9511b8 219 printf("Seeking file... ");
mbed_official 0:8e251d9511b8 220 fflush(stdout);
mbed_official 0:8e251d9511b8 221 err = fseek(f, 0, SEEK_SET);
mbed_official 0:8e251d9511b8 222 printf("%s\n", (err < 0 ? "Fail :(" : "OK"));
mbed_official 0:8e251d9511b8 223 if (err < 0) {
mbed_official 0:8e251d9511b8 224 error("error: %s (%d)\n", strerror(errno), -errno);
mbed_official 0:8e251d9511b8 225 }
mbed_official 0:8e251d9511b8 226 }
mbed_official 0:8e251d9511b8 227
framtk 27:0cf170538518 228 check_led_status.attach(&toggle_led, 0.01);
framtk 27:0cf170538518 229 }