example micro:bit pedometer

Dependencies:   microbit

Committer:
giobauermeister
Date:
Fri Apr 27 13:04:12 2018 +0000
Revision:
0:01ca25814675
example micro:bit pedometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
giobauermeister 0:01ca25814675 1 #include "MicroBit.h"
giobauermeister 0:01ca25814675 2 #include "MicroBitUARTService.h"
giobauermeister 0:01ca25814675 3
giobauermeister 0:01ca25814675 4 MicroBit uBit;
giobauermeister 0:01ca25814675 5 MicroBitUARTService *uart;
giobauermeister 0:01ca25814675 6
giobauermeister 0:01ca25814675 7 uint16_t step_counter = 0;
giobauermeister 0:01ca25814675 8 bool in_range = false;
giobauermeister 0:01ca25814675 9 char stepsString[50];
giobauermeister 0:01ca25814675 10
giobauermeister 0:01ca25814675 11 int connected = 0;
giobauermeister 0:01ca25814675 12
giobauermeister 0:01ca25814675 13 MicroBitImage img("0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n0 0 0 0 1\n");
giobauermeister 0:01ca25814675 14
giobauermeister 0:01ca25814675 15 //
giobauermeister 0:01ca25814675 16 // Scales the given value that is in the -1024 to 1024 range
giobauermeister 0:01ca25814675 17 // int a value between 0 and 4.
giobauermeister 0:01ca25814675 18 //
giobauermeister 0:01ca25814675 19 int pixel_from_g(int value)
giobauermeister 0:01ca25814675 20 {
giobauermeister 0:01ca25814675 21 int x = 0;
giobauermeister 0:01ca25814675 22
giobauermeister 0:01ca25814675 23 if (value > -750)
giobauermeister 0:01ca25814675 24 x++;
giobauermeister 0:01ca25814675 25 if (value > -250)
giobauermeister 0:01ca25814675 26 x++;
giobauermeister 0:01ca25814675 27 if (value > 250)
giobauermeister 0:01ca25814675 28 x++;
giobauermeister 0:01ca25814675 29 if (value > 750)
giobauermeister 0:01ca25814675 30 x++;
giobauermeister 0:01ca25814675 31
giobauermeister 0:01ca25814675 32 return x;
giobauermeister 0:01ca25814675 33 }
giobauermeister 0:01ca25814675 34
giobauermeister 0:01ca25814675 35 void onConnected(MicroBitEvent e)
giobauermeister 0:01ca25814675 36 {
giobauermeister 0:01ca25814675 37 //uBit.display.scroll("C");
giobauermeister 0:01ca25814675 38
giobauermeister 0:01ca25814675 39 connected = 1;
giobauermeister 0:01ca25814675 40
giobauermeister 0:01ca25814675 41 while (connected == 1) {
giobauermeister 0:01ca25814675 42 int x = pixel_from_g(uBit.accelerometer.getX());
giobauermeister 0:01ca25814675 43 int y = pixel_from_g(uBit.accelerometer.getY());
giobauermeister 0:01ca25814675 44
giobauermeister 0:01ca25814675 45 uBit.display.image.clear();
giobauermeister 0:01ca25814675 46 uBit.display.image.setPixelValue(x, y, 255);
giobauermeister 0:01ca25814675 47 //uBit.display.image.setPixelValue(1, 0, 255);
giobauermeister 0:01ca25814675 48 if(y < 4)
giobauermeister 0:01ca25814675 49 {
giobauermeister 0:01ca25814675 50 in_range = true;
giobauermeister 0:01ca25814675 51 while(in_range)
giobauermeister 0:01ca25814675 52 {
giobauermeister 0:01ca25814675 53 y = pixel_from_g(uBit.accelerometer.getY());
giobauermeister 0:01ca25814675 54 if(y == 4)
giobauermeister 0:01ca25814675 55 {
giobauermeister 0:01ca25814675 56 in_range = false;
giobauermeister 0:01ca25814675 57 step_counter ++;
giobauermeister 0:01ca25814675 58 }
giobauermeister 0:01ca25814675 59 }
giobauermeister 0:01ca25814675 60 sprintf(stepsString, "%d", step_counter);
giobauermeister 0:01ca25814675 61 uart->send(stepsString);
giobauermeister 0:01ca25814675 62
giobauermeister 0:01ca25814675 63 uBit.serial.send("steps: ");
giobauermeister 0:01ca25814675 64 uBit.serial.send(step_counter);
giobauermeister 0:01ca25814675 65 uBit.serial.send("\r\n");
giobauermeister 0:01ca25814675 66
giobauermeister 0:01ca25814675 67 }
giobauermeister 0:01ca25814675 68 uBit.sleep(100);
giobauermeister 0:01ca25814675 69 }
giobauermeister 0:01ca25814675 70
giobauermeister 0:01ca25814675 71 }
giobauermeister 0:01ca25814675 72 void onDisconnected(MicroBitEvent e)
giobauermeister 0:01ca25814675 73 {
giobauermeister 0:01ca25814675 74 //uBit.display.scroll("D");
giobauermeister 0:01ca25814675 75 connected = 0;
giobauermeister 0:01ca25814675 76 step_counter = 0;
giobauermeister 0:01ca25814675 77
giobauermeister 0:01ca25814675 78
giobauermeister 0:01ca25814675 79
giobauermeister 0:01ca25814675 80 while(connected == 0)
giobauermeister 0:01ca25814675 81 {
giobauermeister 0:01ca25814675 82 uBit.display.scroll(img, 50, -1);
giobauermeister 0:01ca25814675 83 uBit.display.scroll(img, 50, +1);
giobauermeister 0:01ca25814675 84 }
giobauermeister 0:01ca25814675 85 }
giobauermeister 0:01ca25814675 86
giobauermeister 0:01ca25814675 87
giobauermeister 0:01ca25814675 88
giobauermeister 0:01ca25814675 89 int main()
giobauermeister 0:01ca25814675 90 {
giobauermeister 0:01ca25814675 91 // Initialise the micro:bit runtime.
giobauermeister 0:01ca25814675 92 uBit.init();
giobauermeister 0:01ca25814675 93 uBit.serial.baud(115200);
giobauermeister 0:01ca25814675 94 uBit.serial.send("Hello World\n");
giobauermeister 0:01ca25814675 95
giobauermeister 0:01ca25814675 96 uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnected);
giobauermeister 0:01ca25814675 97 uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected);
giobauermeister 0:01ca25814675 98
giobauermeister 0:01ca25814675 99 uart = new MicroBitUARTService(*uBit.ble, 32, 32);
giobauermeister 0:01ca25814675 100
giobauermeister 0:01ca25814675 101 //uBit.display.scroll("Ready");
giobauermeister 0:01ca25814675 102
giobauermeister 0:01ca25814675 103
giobauermeister 0:01ca25814675 104 //MicroBitImage i(heart_w,heart_h,heart);
giobauermeister 0:01ca25814675 105 //uBit.display.animate(i,10000,5);
giobauermeister 0:01ca25814675 106
giobauermeister 0:01ca25814675 107 while(connected == 0)
giobauermeister 0:01ca25814675 108 {
giobauermeister 0:01ca25814675 109 uBit.display.scroll(img, 50, -1);
giobauermeister 0:01ca25814675 110 uBit.display.scroll(img, 50, +1);
giobauermeister 0:01ca25814675 111 }
giobauermeister 0:01ca25814675 112
giobauermeister 0:01ca25814675 113 release_fiber();
giobauermeister 0:01ca25814675 114
giobauermeister 0:01ca25814675 115 //
giobauermeister 0:01ca25814675 116 // Periodically read the accelerometer x and y values, and plot a
giobauermeister 0:01ca25814675 117 // scaled version of this ont the display.
giobauermeister 0:01ca25814675 118 //
giobauermeister 0:01ca25814675 119 //while(1)
giobauermeister 0:01ca25814675 120 // {
giobauermeister 0:01ca25814675 121 // int x = pixel_from_g(uBit.accelerometer.getX());
giobauermeister 0:01ca25814675 122 // int y = pixel_from_g(uBit.accelerometer.getY());
giobauermeister 0:01ca25814675 123 //
giobauermeister 0:01ca25814675 124 // uBit.display.image.clear();
giobauermeister 0:01ca25814675 125 // uBit.display.image.setPixelValue(x, y, 255);
giobauermeister 0:01ca25814675 126 // //uBit.display.image.setPixelValue(1, 0, 255);
giobauermeister 0:01ca25814675 127 // if(y < 4)
giobauermeister 0:01ca25814675 128 // {
giobauermeister 0:01ca25814675 129 // in_range = true;
giobauermeister 0:01ca25814675 130 // while(in_range)
giobauermeister 0:01ca25814675 131 // {
giobauermeister 0:01ca25814675 132 // y = pixel_from_g(uBit.accelerometer.getY());
giobauermeister 0:01ca25814675 133 // if(y == 4)
giobauermeister 0:01ca25814675 134 // {
giobauermeister 0:01ca25814675 135 // in_range = false;
giobauermeister 0:01ca25814675 136 // step_counter ++;
giobauermeister 0:01ca25814675 137 // }
giobauermeister 0:01ca25814675 138 // }
giobauermeister 0:01ca25814675 139 // //y = pixel_from_g(uBit.accelerometer.getY());
giobauermeister 0:01ca25814675 140 // //if(y == 4)
giobauermeister 0:01ca25814675 141 // uBit.serial.send("steps: ");
giobauermeister 0:01ca25814675 142 // uBit.serial.send(step_counter);
giobauermeister 0:01ca25814675 143 // uBit.serial.send("\r\n");
giobauermeister 0:01ca25814675 144 //
giobauermeister 0:01ca25814675 145 // }
giobauermeister 0:01ca25814675 146 //
giobauermeister 0:01ca25814675 147 // uBit.sleep(100);
giobauermeister 0:01ca25814675 148 // }
giobauermeister 0:01ca25814675 149 }