program to experiment with microbit

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?

UserRevisionLine numberNew 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 }