assignment
Dependencies: BSP_B-L475E-IOT01
main.cpp@27:a2f73b18cbb0, 2018-12-06 (annotated)
- Committer:
- alessioburatti
- Date:
- Thu Dec 06 16:48:10 2018 +0000
- Revision:
- 27:a2f73b18cbb0
- Parent:
- 26:130bb1173866
done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lmottola | 26:130bb1173866 | 1 | |
mbed_official | 0:8e251d9511b8 | 2 | #include "mbed.h" |
alessioburatti | 27:a2f73b18cbb0 | 3 | |
alessioburatti | 27:a2f73b18cbb0 | 4 | #include "stm32l475e_iot01_accelero.h" |
alessioburatti | 27:a2f73b18cbb0 | 5 | |
mbed_official | 0:8e251d9511b8 | 6 | #include <stdio.h> |
mbed_official | 0:8e251d9511b8 | 7 | #include <errno.h> |
mbed_official | 0:8e251d9511b8 | 8 | |
alessioburatti | 27:a2f73b18cbb0 | 9 | // Block devices |
mbed_official | 25:65a9183a2178 | 10 | #if COMPONENT_SPIF |
mbed_official | 0:8e251d9511b8 | 11 | #include "SPIFBlockDevice.h" |
mbed_official | 25:65a9183a2178 | 12 | #endif |
mbed_official | 25:65a9183a2178 | 13 | |
mbed_official | 25:65a9183a2178 | 14 | #if COMPONENT_DATAFLASH |
mbed_official | 1:2bfc377bcc2a | 15 | #include "DataFlashBlockDevice.h" |
alessioburatti | 27:a2f73b18cbb0 | 16 | #endif |
mbed_official | 25:65a9183a2178 | 17 | |
mbed_official | 25:65a9183a2178 | 18 | #if COMPONENT_SD |
mbed_official | 0:8e251d9511b8 | 19 | #include "SDBlockDevice.h" |
alessioburatti | 27:a2f73b18cbb0 | 20 | #endif |
mbed_official | 25:65a9183a2178 | 21 | |
mbed_official | 0:8e251d9511b8 | 22 | #include "HeapBlockDevice.h" |
mbed_official | 0:8e251d9511b8 | 23 | |
alessioburatti | 27:a2f73b18cbb0 | 24 | // File systems |
mbed_official | 0:8e251d9511b8 | 25 | #include "LittleFileSystem.h" |
mbed_official | 0:8e251d9511b8 | 26 | #include "FATFileSystem.h" |
mbed_official | 0:8e251d9511b8 | 27 | |
alessioburatti | 27:a2f73b18cbb0 | 28 | // Physical block device, can be any device that supports the BlockDevice API |
lmottola | 26:130bb1173866 | 29 | /*SPIFBlockDevice bd( |
alessioburatti | 27:a2f73b18cbb0 | 30 | MBED_CONF_SPIF_DRIVER_SPI_MOSI, |
alessioburatti | 27:a2f73b18cbb0 | 31 | MBED_CONF_SPIF_DRIVER_SPI_MISO, |
alessioburatti | 27:a2f73b18cbb0 | 32 | MBED_CONF_SPIF_DRIVER_SPI_CLK, |
alessioburatti | 27:a2f73b18cbb0 | 33 | MBED_CONF_SPIF_DRIVER_SPI_CS);*/ |
alessioburatti | 27:a2f73b18cbb0 | 34 | |
alessioburatti | 27:a2f73b18cbb0 | 35 | #define X_VALUE pDataXYZ[0] |
alessioburatti | 27:a2f73b18cbb0 | 36 | #define Y_VALUE pDataXYZ[1] |
alessioburatti | 27:a2f73b18cbb0 | 37 | #define Z_VALUE pDataXYZ[2] |
alessioburatti | 27:a2f73b18cbb0 | 38 | |
alessioburatti | 27:a2f73b18cbb0 | 39 | #define HORIZONTAL_INDEX 0 |
alessioburatti | 27:a2f73b18cbb0 | 40 | #define LONG_VERTICAL_INDEX 1 |
alessioburatti | 27:a2f73b18cbb0 | 41 | #define SHORT_VERTICAL_INDEX 2 |
lmottola | 26:130bb1173866 | 42 | |
lmottola | 26:130bb1173866 | 43 | #define BLOCK_SIZE 512 |
alessioburatti | 27:a2f73b18cbb0 | 44 | HeapBlockDevice bd(16384, BLOCK_SIZE); |
mbed_official | 0:8e251d9511b8 | 45 | |
alessioburatti | 27:a2f73b18cbb0 | 46 | // File system declaration |
mbed_official | 0:8e251d9511b8 | 47 | LittleFileSystem fs("fs"); |
mbed_official | 0:8e251d9511b8 | 48 | |
alessioburatti | 27:a2f73b18cbb0 | 49 | DigitalOut led1(LED1); |
alessioburatti | 27:a2f73b18cbb0 | 50 | DigitalOut led2(LED2); |
alessioburatti | 27:a2f73b18cbb0 | 51 | DigitalOut led3(LED3); |
alessioburatti | 27:a2f73b18cbb0 | 52 | |
alessioburatti | 27:a2f73b18cbb0 | 53 | Ticker tTicker; |
alessioburatti | 27:a2f73b18cbb0 | 54 | Thread t; |
alessioburatti | 27:a2f73b18cbb0 | 55 | |
alessioburatti | 27:a2f73b18cbb0 | 56 | static FILE *f; |
alessioburatti | 27:a2f73b18cbb0 | 57 | volatile int countedPositionsd = 0; |
alessioburatti | 27:a2f73b18cbb0 | 58 | EventQueue queue(32 * EVENTS_EVENT_SIZE); |
alessioburatti | 27:a2f73b18cbb0 | 59 | |
alessioburatti | 27:a2f73b18cbb0 | 60 | InterruptIn button(USER_BUTTON); |
alessioburatti | 27:a2f73b18cbb0 | 61 | |
alessioburatti | 27:a2f73b18cbb0 | 62 | int max3(int a, int b, int c) { |
alessioburatti | 27:a2f73b18cbb0 | 63 | if (a > b) { |
alessioburatti | 27:a2f73b18cbb0 | 64 | return a > c ? HORIZONTAL_INDEX : SHORT_VERTICAL_INDEX; |
mbed_official | 0:8e251d9511b8 | 65 | } |
alessioburatti | 27:a2f73b18cbb0 | 66 | return b > c ? LONG_VERTICAL_INDEX : SHORT_VERTICAL_INDEX; |
alessioburatti | 27:a2f73b18cbb0 | 67 | } |
alessioburatti | 27:a2f73b18cbb0 | 68 | |
alessioburatti | 27:a2f73b18cbb0 | 69 | void turnOffLeds() { |
alessioburatti | 27:a2f73b18cbb0 | 70 | led1 = 0; |
alessioburatti | 27:a2f73b18cbb0 | 71 | led2 = 0; |
alessioburatti | 27:a2f73b18cbb0 | 72 | led3 = 0; |
alessioburatti | 27:a2f73b18cbb0 | 73 | } |
mbed_official | 0:8e251d9511b8 | 74 | |
alessioburatti | 27:a2f73b18cbb0 | 75 | void toggleLed() { |
alessioburatti | 27:a2f73b18cbb0 | 76 | int16_t occurencies[3] = {0}; |
mbed_official | 0:8e251d9511b8 | 77 | fflush(stdout); |
alessioburatti | 27:a2f73b18cbb0 | 78 | fflush(f); |
alessioburatti | 27:a2f73b18cbb0 | 79 | |
alessioburatti | 27:a2f73b18cbb0 | 80 | fseek(f, 0, SEEK_SET); |
alessioburatti | 27:a2f73b18cbb0 | 81 | |
alessioburatti | 27:a2f73b18cbb0 | 82 | printf("Start reading\n"); |
alessioburatti | 27:a2f73b18cbb0 | 83 | |
alessioburatti | 27:a2f73b18cbb0 | 84 | int number; |
alessioburatti | 27:a2f73b18cbb0 | 85 | while (!feof(f)) { |
alessioburatti | 27:a2f73b18cbb0 | 86 | fscanf(f, "%d", &number); |
alessioburatti | 27:a2f73b18cbb0 | 87 | if (number == HORIZONTAL_INDEX || number == LONG_VERTICAL_INDEX || number == SHORT_VERTICAL_INDEX) { |
alessioburatti | 27:a2f73b18cbb0 | 88 | occurencies[number] = occurencies[number] + 1; |
alessioburatti | 27:a2f73b18cbb0 | 89 | } |
mbed_official | 0:8e251d9511b8 | 90 | } |
alessioburatti | 27:a2f73b18cbb0 | 91 | |
alessioburatti | 27:a2f73b18cbb0 | 92 | printf("%d %d %d\n", occurencies[HORIZONTAL_INDEX], occurencies[LONG_VERTICAL_INDEX], occurencies[SHORT_VERTICAL_INDEX]); |
alessioburatti | 27:a2f73b18cbb0 | 93 | |
alessioburatti | 27:a2f73b18cbb0 | 94 | int mostOccurentValue = max3(occurencies[0], occurencies[1], occurencies[2]); |
alessioburatti | 27:a2f73b18cbb0 | 95 | |
alessioburatti | 27:a2f73b18cbb0 | 96 | printf("Max %d\n", mostOccurentValue); |
alessioburatti | 27:a2f73b18cbb0 | 97 | |
alessioburatti | 27:a2f73b18cbb0 | 98 | turnOffLeds(); |
alessioburatti | 27:a2f73b18cbb0 | 99 | if (mostOccurentValue == HORIZONTAL_INDEX) { |
alessioburatti | 27:a2f73b18cbb0 | 100 | led1 = 1; |
alessioburatti | 27:a2f73b18cbb0 | 101 | } else if (mostOccurentValue == LONG_VERTICAL_INDEX) { |
alessioburatti | 27:a2f73b18cbb0 | 102 | led2 = 1; |
alessioburatti | 27:a2f73b18cbb0 | 103 | } else if (mostOccurentValue == SHORT_VERTICAL_INDEX) { |
alessioburatti | 27:a2f73b18cbb0 | 104 | led3 = 1; |
alessioburatti | 27:a2f73b18cbb0 | 105 | } |
alessioburatti | 27:a2f73b18cbb0 | 106 | |
mbed_official | 0:8e251d9511b8 | 107 | fflush(stdout); |
alessioburatti | 27:a2f73b18cbb0 | 108 | int err = fclose(f); |
alessioburatti | 27:a2f73b18cbb0 | 109 | printf("%s\n", (err < 0 ? "Fail :(" : "OK")); |
alessioburatti | 27:a2f73b18cbb0 | 110 | if (err < 0) { |
alessioburatti | 27:a2f73b18cbb0 | 111 | error("error: %s (%d)\n", strerror(err), -err); |
alessioburatti | 27:a2f73b18cbb0 | 112 | } |
alessioburatti | 27:a2f73b18cbb0 | 113 | err = fs.unmount(); |
alessioburatti | 27:a2f73b18cbb0 | 114 | printf("%s\n", (err < 0 ? "Fail :(" : "OK")); |
alessioburatti | 27:a2f73b18cbb0 | 115 | if (err < 0) { |
mbed_official | 0:8e251d9511b8 | 116 | error("error: %s (%d)\n", strerror(-err), err); |
mbed_official | 0:8e251d9511b8 | 117 | } |
mbed_official | 0:8e251d9511b8 | 118 | } |
mbed_official | 0:8e251d9511b8 | 119 | |
alessioburatti | 27:a2f73b18cbb0 | 120 | bool isInRange100(int val) { |
alessioburatti | 27:a2f73b18cbb0 | 121 | return val < 100 && val > -100; |
alessioburatti | 27:a2f73b18cbb0 | 122 | } |
mbed_official | 0:8e251d9511b8 | 123 | |
alessioburatti | 27:a2f73b18cbb0 | 124 | bool isInRange900_1000(int val) { |
alessioburatti | 27:a2f73b18cbb0 | 125 | return (val < 1050 && val > 950) || (val < -950 && val > -1050); |
alessioburatti | 27:a2f73b18cbb0 | 126 | } |
mbed_official | 0:8e251d9511b8 | 127 | |
alessioburatti | 27:a2f73b18cbb0 | 128 | void savePosition() { |
alessioburatti | 27:a2f73b18cbb0 | 129 | int16_t pDataXYZ[3] = {0}; |
alessioburatti | 27:a2f73b18cbb0 | 130 | BSP_ACCELERO_AccGetXYZ(pDataXYZ); |
alessioburatti | 27:a2f73b18cbb0 | 131 | if (isInRange100(X_VALUE) && isInRange100(Y_VALUE) && isInRange900_1000(Z_VALUE)) { |
alessioburatti | 27:a2f73b18cbb0 | 132 | fprintf(f, "%d\n", HORIZONTAL_INDEX); |
alessioburatti | 27:a2f73b18cbb0 | 133 | } else if (isInRange100(X_VALUE) && isInRange900_1000(Y_VALUE) && isInRange100(Z_VALUE)) { |
alessioburatti | 27:a2f73b18cbb0 | 134 | fprintf(f, "%d\n", LONG_VERTICAL_INDEX); |
alessioburatti | 27:a2f73b18cbb0 | 135 | } else if (isInRange900_1000(X_VALUE) && isInRange100(Y_VALUE) && isInRange100(Z_VALUE)) { |
alessioburatti | 27:a2f73b18cbb0 | 136 | fprintf(f, "%d\n", SHORT_VERTICAL_INDEX); |
alessioburatti | 27:a2f73b18cbb0 | 137 | } |
alessioburatti | 27:a2f73b18cbb0 | 138 | fflush(f); |
alessioburatti | 27:a2f73b18cbb0 | 139 | fflush(stdout); |
alessioburatti | 27:a2f73b18cbb0 | 140 | } |
alessioburatti | 27:a2f73b18cbb0 | 141 | |
mbed_official | 0:8e251d9511b8 | 142 | |
alessioburatti | 27:a2f73b18cbb0 | 143 | void tickerBlock() { |
alessioburatti | 27:a2f73b18cbb0 | 144 | queue.call(savePosition); |
alessioburatti | 27:a2f73b18cbb0 | 145 | countedPositionsd++; |
alessioburatti | 27:a2f73b18cbb0 | 146 | if (countedPositionsd == 1000) { |
alessioburatti | 27:a2f73b18cbb0 | 147 | tTicker.detach(); |
alessioburatti | 27:a2f73b18cbb0 | 148 | queue.call(toggleLed); |
alessioburatti | 27:a2f73b18cbb0 | 149 | countedPositionsd = 0; |
alessioburatti | 27:a2f73b18cbb0 | 150 | } |
alessioburatti | 27:a2f73b18cbb0 | 151 | } |
alessioburatti | 27:a2f73b18cbb0 | 152 | |
alessioburatti | 27:a2f73b18cbb0 | 153 | int main(){ |
alessioburatti | 27:a2f73b18cbb0 | 154 | t.start(callback(&queue, &EventQueue::dispatch_forever)); |
alessioburatti | 27:a2f73b18cbb0 | 155 | BSP_ACCELERO_Init(); |
alessioburatti | 27:a2f73b18cbb0 | 156 | |
alessioburatti | 27:a2f73b18cbb0 | 157 | // Try to mount the filesystem |
mbed_official | 0:8e251d9511b8 | 158 | printf("Mounting the filesystem... "); |
mbed_official | 0:8e251d9511b8 | 159 | fflush(stdout); |
mbed_official | 0:8e251d9511b8 | 160 | int err = fs.mount(&bd); |
mbed_official | 0:8e251d9511b8 | 161 | printf("%s\n", (err ? "Fail :(" : "OK")); |
mbed_official | 0:8e251d9511b8 | 162 | if (err) { |
alessioburatti | 27:a2f73b18cbb0 | 163 | // Reformat if we can't mount the filesystem |
alessioburatti | 27:a2f73b18cbb0 | 164 | // this should only happen on the first boot |
mbed_official | 0:8e251d9511b8 | 165 | printf("No filesystem found, formatting... "); |
mbed_official | 0:8e251d9511b8 | 166 | fflush(stdout); |
mbed_official | 0:8e251d9511b8 | 167 | err = fs.reformat(&bd); |
mbed_official | 0:8e251d9511b8 | 168 | printf("%s\n", (err ? "Fail :(" : "OK")); |
mbed_official | 0:8e251d9511b8 | 169 | if (err) { |
mbed_official | 0:8e251d9511b8 | 170 | error("error: %s (%d)\n", strerror(-err), err); |
mbed_official | 0:8e251d9511b8 | 171 | } |
mbed_official | 0:8e251d9511b8 | 172 | } |
alessioburatti | 27:a2f73b18cbb0 | 173 | |
alessioburatti | 27:a2f73b18cbb0 | 174 | // Open the numbers file |
mbed_official | 0:8e251d9511b8 | 175 | printf("Opening \"/fs/numbers.txt\"... "); |
mbed_official | 0:8e251d9511b8 | 176 | fflush(stdout); |
alessioburatti | 27:a2f73b18cbb0 | 177 | f = fopen("/fs/numbers.txt", "r+"); |
mbed_official | 0:8e251d9511b8 | 178 | printf("%s\n", (!f ? "Fail :(" : "OK")); |
mbed_official | 0:8e251d9511b8 | 179 | if (!f) { |
alessioburatti | 27:a2f73b18cbb0 | 180 | // Create the numbers file if it doesn't exist |
mbed_official | 0:8e251d9511b8 | 181 | printf("No file found, creating a new file... "); |
mbed_official | 0:8e251d9511b8 | 182 | fflush(stdout); |
mbed_official | 0:8e251d9511b8 | 183 | f = fopen("/fs/numbers.txt", "w+"); |
mbed_official | 0:8e251d9511b8 | 184 | printf("%s\n", (!f ? "Fail :(" : "OK")); |
mbed_official | 0:8e251d9511b8 | 185 | if (!f) { |
mbed_official | 0:8e251d9511b8 | 186 | error("error: %s (%d)\n", strerror(errno), -errno); |
mbed_official | 0:8e251d9511b8 | 187 | } |
mbed_official | 0:8e251d9511b8 | 188 | } |
mbed_official | 0:8e251d9511b8 | 189 | |
alessioburatti | 27:a2f73b18cbb0 | 190 | tTicker.attach(&tickerBlock, 0.01); |
mbed_official | 0:8e251d9511b8 | 191 | } |