A program designed to run on the microbit. Used for driving a buggy.
Diff: Microbit_function.cpp
- Revision:
- 0:4aa6e1498925
diff -r 000000000000 -r 4aa6e1498925 Microbit_function.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Microbit_function.cpp Mon Mar 27 12:14:03 2017 +0000 @@ -0,0 +1,112 @@ + +#include "Microbit_function.h" +#include "mbed.h" + +MicroBit uBit; + +// These MiroBit images are used by the Display function to indicate what direction the buggy will travel in. +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"); +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"); +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"); +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"); +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"); +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"); +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"); +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"); +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"); +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"); + +// +MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_ALL); +MicroBitPin P1(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_ALL); + +extern void microBit_Setup() +{ + uBit.init(); +} + +extern void Display(Direction Current_Direction) // This function is used to simply display the direction the motors are turning +{ + switch(Current_Direction) // Displays the related arrow accoring to which direction the buggy is moving in. + { + case Up: uBit.display.printAsync(arrow_Up); break; + case Down: uBit.display.printAsync(arrow_Down); break; + case Right: uBit.display.printAsync(arrow_Right); break; + case Left: uBit.display.printAsync(arrow_Left); break; + case TopLeft: uBit.display.printAsync(arrow_TopLeft); break; + case BottomLeft: uBit.display.printAsync(arrow_BottomLeft); break; + case TopRight: uBit.display.printAsync(arrow_TopRight); break; + case BottomRight: uBit.display.printAsync(arrow_BottomRight); break; + case Stop: uBit.display.printAsync(cross); break; + case Clear: uBit.display.clear(); break; + } +} +extern void pointNorth() //This function Will direct the buggy to face North +{ + int direction = uBit.compass.heading(); //Declare a variable to store the direction in + while((direction > 2) && (direction < 358)) // While it is not facing north + { + if (direction <= 180) // if it is less then 180 then turn left + { + left(0.1); + } + if (direction > 180) // if it is more then 180 then turn right + { + right(0.1); + } + direction = uBit.compass.heading(); // check the direction again + } +} + +extern void pointSouth() // this function is similar to hedNorth but will point to South instead +{ + int direction = uBit.compass.heading(); //Declares a variable which will be used to store the direction + while((direction < 178) || (direction > 182)) //While it is not pointing South + { + if ((direction > 180) && (direction <= 360)) // if it is between 180 and 360 turn left. + { + left(0.1); + } + if ((direction > 0) && (direction <=180)) // if it is less than 180 turn right. + { + right(0.1); + } + direction = uBit.compass.heading(); // check the direction again + } +} + +extern Compass_Dirs Compass() // this function is designed to display the direction the microbit is facing, and returns that value. +{ + int direction = uBit.compass.heading(); // declare a variable to be used for storing the direction. + if((direction < 45) || (direction >= 325)) // if the direciton is pointing generally north then output North. + { + uBit.display.print("N"); + return North; + } + else if((direction < 135) && (direction >= 45)) // if the direction is generally east then output east. + { + uBit.display.print("E"); + return East; + } + else if((direction < 225) && (direction >= 135)) // if the direction is generally South then output south + { + uBit.display.print("S"); + return South; + } + else if((direction < 325) && (direction >= 225)) // if the direction is generally West then output West. + { + uBit.display.print("W"); + return West; + } + return Default; +} + +extern int left_Sensor()// This function returns the analogue voltage on the left sensor. +{ + return P0.getAnalogValue(); //This is the function that actually get the voltage. +} + +extern int right_Sensor() //This function returns the analogue voltage of the right sensor. +{ + return P1.getAnalogValue(); //gets the voltage on P1, should be connected to the right sensor. +} \ No newline at end of file