A program designed to run on the microbit. Used for driving a buggy.
Microbit_function.cpp@0:4aa6e1498925, 2017-03-27 (annotated)
- Committer:
- AdrianClarke
- Date:
- Mon Mar 27 12:14:03 2017 +0000
- Revision:
- 0:4aa6e1498925
Initial Code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AdrianClarke | 0:4aa6e1498925 | 1 | |
AdrianClarke | 0:4aa6e1498925 | 2 | #include "Microbit_function.h" |
AdrianClarke | 0:4aa6e1498925 | 3 | #include "mbed.h" |
AdrianClarke | 0:4aa6e1498925 | 4 | |
AdrianClarke | 0:4aa6e1498925 | 5 | MicroBit uBit; |
AdrianClarke | 0:4aa6e1498925 | 6 | |
AdrianClarke | 0:4aa6e1498925 | 7 | // These MiroBit images are used by the Display function to indicate what direction the buggy will travel in. |
AdrianClarke | 0:4aa6e1498925 | 8 | MicroBitImage arrow_Up("0,0,1,0,0\n0,1,1,1,0\n1,0,1,0,1\n0,0,1,0,0\n0,0,1,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 9 | MicroBitImage arrow_Down("0,0,1,0,0\n0,0,1,0,0\n1,0,1,0,1\n0,1,1,1,0\n0,0,1,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 10 | MicroBitImage arrow_Left("0,0,1,0,0\n0,1,0,0,0\n1,1,1,1,1\n0,1,0,0,0\n0,0,1,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 11 | MicroBitImage arrow_Right("0,0,1,0,0\n0,0,0,1,0\n1,1,1,1,1\n0,0,0,1,0\n0,0,1,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 12 | MicroBitImage arrow_TopLeft("1,1,1,0,0\n1,1,0,0,0\n1,0,1,0,0\n0,0,0,1,0\n0,0,0,0,1\n"); |
AdrianClarke | 0:4aa6e1498925 | 13 | MicroBitImage arrow_TopRight("0,0,1,1,1\n0,0,0,1,1\n0,0,1,0,1\n0,1,0,0,0\n1,0,0,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 14 | MicroBitImage arrow_BottomLeft("0,0,0,0,1\n0,0,0,1,0\n1,0,1,0,0\n1,1,0,0,0\n1,1,1,0,0\n"); |
AdrianClarke | 0:4aa6e1498925 | 15 | MicroBitImage arrow_BottomRight("1,0,0,0,0\n0,1,0,0,0\n0,0,1,0,1\n0,0,0,1,1\n0,0,1,1,1\n"); |
AdrianClarke | 0:4aa6e1498925 | 16 | MicroBitImage cross("1,0,0,0,1\n0,1,0,1,0\n0,0,1,0,0\n0,1,0,1,0\n1,0,0,0,1\n"); |
AdrianClarke | 0:4aa6e1498925 | 17 | MicroBitImage On("1,1,1,1,1\n1,1,1,1,1\n1,1,1,1,1\n1,1,1,1,1\n1,1,1,1,1\n"); |
AdrianClarke | 0:4aa6e1498925 | 18 | |
AdrianClarke | 0:4aa6e1498925 | 19 | // |
AdrianClarke | 0:4aa6e1498925 | 20 | MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_ALL); |
AdrianClarke | 0:4aa6e1498925 | 21 | MicroBitPin P1(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_ALL); |
AdrianClarke | 0:4aa6e1498925 | 22 | |
AdrianClarke | 0:4aa6e1498925 | 23 | extern void microBit_Setup() |
AdrianClarke | 0:4aa6e1498925 | 24 | { |
AdrianClarke | 0:4aa6e1498925 | 25 | uBit.init(); |
AdrianClarke | 0:4aa6e1498925 | 26 | } |
AdrianClarke | 0:4aa6e1498925 | 27 | |
AdrianClarke | 0:4aa6e1498925 | 28 | extern void Display(Direction Current_Direction) // This function is used to simply display the direction the motors are turning |
AdrianClarke | 0:4aa6e1498925 | 29 | { |
AdrianClarke | 0:4aa6e1498925 | 30 | switch(Current_Direction) // Displays the related arrow accoring to which direction the buggy is moving in. |
AdrianClarke | 0:4aa6e1498925 | 31 | { |
AdrianClarke | 0:4aa6e1498925 | 32 | case Up: uBit.display.printAsync(arrow_Up); break; |
AdrianClarke | 0:4aa6e1498925 | 33 | case Down: uBit.display.printAsync(arrow_Down); break; |
AdrianClarke | 0:4aa6e1498925 | 34 | case Right: uBit.display.printAsync(arrow_Right); break; |
AdrianClarke | 0:4aa6e1498925 | 35 | case Left: uBit.display.printAsync(arrow_Left); break; |
AdrianClarke | 0:4aa6e1498925 | 36 | case TopLeft: uBit.display.printAsync(arrow_TopLeft); break; |
AdrianClarke | 0:4aa6e1498925 | 37 | case BottomLeft: uBit.display.printAsync(arrow_BottomLeft); break; |
AdrianClarke | 0:4aa6e1498925 | 38 | case TopRight: uBit.display.printAsync(arrow_TopRight); break; |
AdrianClarke | 0:4aa6e1498925 | 39 | case BottomRight: uBit.display.printAsync(arrow_BottomRight); break; |
AdrianClarke | 0:4aa6e1498925 | 40 | case Stop: uBit.display.printAsync(cross); break; |
AdrianClarke | 0:4aa6e1498925 | 41 | case Clear: uBit.display.clear(); break; |
AdrianClarke | 0:4aa6e1498925 | 42 | } |
AdrianClarke | 0:4aa6e1498925 | 43 | } |
AdrianClarke | 0:4aa6e1498925 | 44 | extern void pointNorth() //This function Will direct the buggy to face North |
AdrianClarke | 0:4aa6e1498925 | 45 | { |
AdrianClarke | 0:4aa6e1498925 | 46 | int direction = uBit.compass.heading(); //Declare a variable to store the direction in |
AdrianClarke | 0:4aa6e1498925 | 47 | while((direction > 2) && (direction < 358)) // While it is not facing north |
AdrianClarke | 0:4aa6e1498925 | 48 | { |
AdrianClarke | 0:4aa6e1498925 | 49 | if (direction <= 180) // if it is less then 180 then turn left |
AdrianClarke | 0:4aa6e1498925 | 50 | { |
AdrianClarke | 0:4aa6e1498925 | 51 | left(0.1); |
AdrianClarke | 0:4aa6e1498925 | 52 | } |
AdrianClarke | 0:4aa6e1498925 | 53 | if (direction > 180) // if it is more then 180 then turn right |
AdrianClarke | 0:4aa6e1498925 | 54 | { |
AdrianClarke | 0:4aa6e1498925 | 55 | right(0.1); |
AdrianClarke | 0:4aa6e1498925 | 56 | } |
AdrianClarke | 0:4aa6e1498925 | 57 | direction = uBit.compass.heading(); // check the direction again |
AdrianClarke | 0:4aa6e1498925 | 58 | } |
AdrianClarke | 0:4aa6e1498925 | 59 | } |
AdrianClarke | 0:4aa6e1498925 | 60 | |
AdrianClarke | 0:4aa6e1498925 | 61 | extern void pointSouth() // this function is similar to hedNorth but will point to South instead |
AdrianClarke | 0:4aa6e1498925 | 62 | { |
AdrianClarke | 0:4aa6e1498925 | 63 | int direction = uBit.compass.heading(); //Declares a variable which will be used to store the direction |
AdrianClarke | 0:4aa6e1498925 | 64 | while((direction < 178) || (direction > 182)) //While it is not pointing South |
AdrianClarke | 0:4aa6e1498925 | 65 | { |
AdrianClarke | 0:4aa6e1498925 | 66 | if ((direction > 180) && (direction <= 360)) // if it is between 180 and 360 turn left. |
AdrianClarke | 0:4aa6e1498925 | 67 | { |
AdrianClarke | 0:4aa6e1498925 | 68 | left(0.1); |
AdrianClarke | 0:4aa6e1498925 | 69 | } |
AdrianClarke | 0:4aa6e1498925 | 70 | if ((direction > 0) && (direction <=180)) // if it is less than 180 turn right. |
AdrianClarke | 0:4aa6e1498925 | 71 | { |
AdrianClarke | 0:4aa6e1498925 | 72 | right(0.1); |
AdrianClarke | 0:4aa6e1498925 | 73 | } |
AdrianClarke | 0:4aa6e1498925 | 74 | direction = uBit.compass.heading(); // check the direction again |
AdrianClarke | 0:4aa6e1498925 | 75 | } |
AdrianClarke | 0:4aa6e1498925 | 76 | } |
AdrianClarke | 0:4aa6e1498925 | 77 | |
AdrianClarke | 0:4aa6e1498925 | 78 | extern Compass_Dirs Compass() // this function is designed to display the direction the microbit is facing, and returns that value. |
AdrianClarke | 0:4aa6e1498925 | 79 | { |
AdrianClarke | 0:4aa6e1498925 | 80 | int direction = uBit.compass.heading(); // declare a variable to be used for storing the direction. |
AdrianClarke | 0:4aa6e1498925 | 81 | if((direction < 45) || (direction >= 325)) // if the direciton is pointing generally north then output North. |
AdrianClarke | 0:4aa6e1498925 | 82 | { |
AdrianClarke | 0:4aa6e1498925 | 83 | uBit.display.print("N"); |
AdrianClarke | 0:4aa6e1498925 | 84 | return North; |
AdrianClarke | 0:4aa6e1498925 | 85 | } |
AdrianClarke | 0:4aa6e1498925 | 86 | else if((direction < 135) && (direction >= 45)) // if the direction is generally east then output east. |
AdrianClarke | 0:4aa6e1498925 | 87 | { |
AdrianClarke | 0:4aa6e1498925 | 88 | uBit.display.print("E"); |
AdrianClarke | 0:4aa6e1498925 | 89 | return East; |
AdrianClarke | 0:4aa6e1498925 | 90 | } |
AdrianClarke | 0:4aa6e1498925 | 91 | else if((direction < 225) && (direction >= 135)) // if the direction is generally South then output south |
AdrianClarke | 0:4aa6e1498925 | 92 | { |
AdrianClarke | 0:4aa6e1498925 | 93 | uBit.display.print("S"); |
AdrianClarke | 0:4aa6e1498925 | 94 | return South; |
AdrianClarke | 0:4aa6e1498925 | 95 | } |
AdrianClarke | 0:4aa6e1498925 | 96 | else if((direction < 325) && (direction >= 225)) // if the direction is generally West then output West. |
AdrianClarke | 0:4aa6e1498925 | 97 | { |
AdrianClarke | 0:4aa6e1498925 | 98 | uBit.display.print("W"); |
AdrianClarke | 0:4aa6e1498925 | 99 | return West; |
AdrianClarke | 0:4aa6e1498925 | 100 | } |
AdrianClarke | 0:4aa6e1498925 | 101 | return Default; |
AdrianClarke | 0:4aa6e1498925 | 102 | } |
AdrianClarke | 0:4aa6e1498925 | 103 | |
AdrianClarke | 0:4aa6e1498925 | 104 | extern int left_Sensor()// This function returns the analogue voltage on the left sensor. |
AdrianClarke | 0:4aa6e1498925 | 105 | { |
AdrianClarke | 0:4aa6e1498925 | 106 | return P0.getAnalogValue(); //This is the function that actually get the voltage. |
AdrianClarke | 0:4aa6e1498925 | 107 | } |
AdrianClarke | 0:4aa6e1498925 | 108 | |
AdrianClarke | 0:4aa6e1498925 | 109 | extern int right_Sensor() //This function returns the analogue voltage of the right sensor. |
AdrianClarke | 0:4aa6e1498925 | 110 | { |
AdrianClarke | 0:4aa6e1498925 | 111 | return P1.getAnalogValue(); //gets the voltage on P1, should be connected to the right sensor. |
AdrianClarke | 0:4aa6e1498925 | 112 | } |