A program designed to run on the microbit. Used for driving a buggy.

Dependencies:   microbit

Committer:
AdrianClarke
Date:
Mon Mar 27 12:14:03 2017 +0000
Revision:
0:4aa6e1498925
Initial Code

Who changed what in which revision?

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