program to experiment with microbit
main.cpp@0:b630f8a79965, 2016-08-22 (annotated)
- Committer:
- isaeldiaz
- Date:
- Mon Aug 22 11:32:02 2016 +0000
- Revision:
- 0:b630f8a79965
- Child:
- 1:464fc8833089
buggy experimental program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
isaeldiaz | 0:b630f8a79965 | 1 | |
isaeldiaz | 0:b630f8a79965 | 2 | #include "MicroBit.h" |
isaeldiaz | 0:b630f8a79965 | 3 | |
isaeldiaz | 0:b630f8a79965 | 4 | enum eDirection { COAST, FORWARD, REVERSE, BRAKE}; |
isaeldiaz | 0:b630f8a79965 | 5 | MicroBit uBit; |
isaeldiaz | 0:b630f8a79965 | 6 | |
isaeldiaz | 0:b630f8a79965 | 7 | |
isaeldiaz | 0:b630f8a79965 | 8 | MicroBitPin P1 = MicroBitPin(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_DIGITAL); |
isaeldiaz | 0:b630f8a79965 | 9 | |
isaeldiaz | 0:b630f8a79965 | 10 | |
isaeldiaz | 0:b630f8a79965 | 11 | void driveMotors(eDirection dir) |
isaeldiaz | 0:b630f8a79965 | 12 | { |
isaeldiaz | 0:b630f8a79965 | 13 | switch(dir) |
isaeldiaz | 0:b630f8a79965 | 14 | { |
isaeldiaz | 0:b630f8a79965 | 15 | case FORWARD: |
isaeldiaz | 0:b630f8a79965 | 16 | uBit.display.scroll("FORWARD"); |
isaeldiaz | 0:b630f8a79965 | 17 | uBit.io.P0.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 18 | uBit.io.P8.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 19 | uBit.io.P12.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 20 | uBit.io.P16.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 21 | break; |
isaeldiaz | 0:b630f8a79965 | 22 | case REVERSE: |
isaeldiaz | 0:b630f8a79965 | 23 | uBit.display.scroll("REVERSE"); |
isaeldiaz | 0:b630f8a79965 | 24 | uBit.io.P0.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 25 | uBit.io.P8.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 26 | uBit.io.P12.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 27 | uBit.io.P16.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 28 | break; |
isaeldiaz | 0:b630f8a79965 | 29 | case BRAKE: |
isaeldiaz | 0:b630f8a79965 | 30 | uBit.display.scroll("BRAKE"); |
isaeldiaz | 0:b630f8a79965 | 31 | uBit.io.P0.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 32 | uBit.io.P8.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 33 | uBit.io.P12.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 34 | uBit.io.P16.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 35 | break; |
isaeldiaz | 0:b630f8a79965 | 36 | default: |
isaeldiaz | 0:b630f8a79965 | 37 | uBit.io.P0.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 38 | uBit.io.P8.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 39 | uBit.io.P12.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 40 | uBit.io.P16.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 41 | break; |
isaeldiaz | 0:b630f8a79965 | 42 | } |
isaeldiaz | 0:b630f8a79965 | 43 | |
isaeldiaz | 0:b630f8a79965 | 44 | } |
isaeldiaz | 0:b630f8a79965 | 45 | |
isaeldiaz | 0:b630f8a79965 | 46 | void onPulse(MicroBitEvent e) |
isaeldiaz | 0:b630f8a79965 | 47 | { |
isaeldiaz | 0:b630f8a79965 | 48 | int duration = e.timestamp; |
isaeldiaz | 0:b630f8a79965 | 49 | uBit.serial.printf("%d, ", duration); |
isaeldiaz | 0:b630f8a79965 | 50 | } |
isaeldiaz | 0:b630f8a79965 | 51 | |
isaeldiaz | 0:b630f8a79965 | 52 | void sendPing(void) |
isaeldiaz | 0:b630f8a79965 | 53 | { |
isaeldiaz | 0:b630f8a79965 | 54 | uBit.serial.printf("."); |
isaeldiaz | 0:b630f8a79965 | 55 | uBit.io.P2.setDigitalValue(1); |
isaeldiaz | 0:b630f8a79965 | 56 | // Ping must be at least 10us long |
isaeldiaz | 0:b630f8a79965 | 57 | wait_us(12); |
isaeldiaz | 0:b630f8a79965 | 58 | uBit.io.P2.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 59 | } |
isaeldiaz | 0:b630f8a79965 | 60 | |
isaeldiaz | 0:b630f8a79965 | 61 | int main() |
isaeldiaz | 0:b630f8a79965 | 62 | { |
isaeldiaz | 0:b630f8a79965 | 63 | // Initialise the micro:bit runtime. |
isaeldiaz | 0:b630f8a79965 | 64 | uBit.init(); |
isaeldiaz | 0:b630f8a79965 | 65 | uBit.serial.printf("Initializing\n"); |
isaeldiaz | 0:b630f8a79965 | 66 | uBit.display.scroll("SONAR"); |
isaeldiaz | 0:b630f8a79965 | 67 | uBit.io.P2.setDigitalValue(0); |
isaeldiaz | 0:b630f8a79965 | 68 | |
isaeldiaz | 0:b630f8a79965 | 69 | P1.eventOn(MICROBIT_PIN_EVENT_ON_PULSE); |
isaeldiaz | 0:b630f8a79965 | 70 | P1.setPull(PullUp); |
isaeldiaz | 0:b630f8a79965 | 71 | uBit.messageBus.listen(MICROBIT_ID_IO_P1, MICROBIT_PIN_EVT_PULSE_LO, onPulse, MESSAGE_BUS_LISTENER_IMMEDIATE); |
isaeldiaz | 0:b630f8a79965 | 72 | while(1){ |
isaeldiaz | 0:b630f8a79965 | 73 | sendPing(); |
isaeldiaz | 0:b630f8a79965 | 74 | uBit.sleep(2000); |
isaeldiaz | 0:b630f8a79965 | 75 | } |
isaeldiaz | 0:b630f8a79965 | 76 | |
isaeldiaz | 0:b630f8a79965 | 77 | |
isaeldiaz | 0:b630f8a79965 | 78 | // If main exits, there may still be other fibers running or registered event handlers etc. |
isaeldiaz | 0:b630f8a79965 | 79 | // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then |
isaeldiaz | 0:b630f8a79965 | 80 | // sit in the idle task forever, in a power efficient sleep. |
isaeldiaz | 0:b630f8a79965 | 81 | release_fiber(); |
isaeldiaz | 0:b630f8a79965 | 82 | } |