Team 5 AUH / Mbed 2 deprecated Team5_AUH_robot

Dependencies:   mbed

Fork of Team5_AUH_robot by Kasper Martensen

Committer:
tigrisdk
Date:
Mon Nov 09 14:52:15 2020 +0000
Revision:
9:66a4cd6ed6c3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tigrisdk 9:66a4cd6ed6c3 1 /* mbed m3pi Library
tigrisdk 9:66a4cd6ed6c3 2 * Copyright (c) 2007-2010 cstyles
tigrisdk 9:66a4cd6ed6c3 3 *
tigrisdk 9:66a4cd6ed6c3 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
tigrisdk 9:66a4cd6ed6c3 5 * of this software and associated documentation files (the "Software"), to deal
tigrisdk 9:66a4cd6ed6c3 6 * in the Software without restriction, including without limitation the rights
tigrisdk 9:66a4cd6ed6c3 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
tigrisdk 9:66a4cd6ed6c3 8 * copies of the Software, and to permit persons to whom the Software is
tigrisdk 9:66a4cd6ed6c3 9 * furnished to do so, subject to the following conditions:
tigrisdk 9:66a4cd6ed6c3 10 *
tigrisdk 9:66a4cd6ed6c3 11 * The above copyright notice and this permission notice shall be included in
tigrisdk 9:66a4cd6ed6c3 12 * all copies or substantial portions of the Software.
tigrisdk 9:66a4cd6ed6c3 13 *
tigrisdk 9:66a4cd6ed6c3 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
tigrisdk 9:66a4cd6ed6c3 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
tigrisdk 9:66a4cd6ed6c3 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
tigrisdk 9:66a4cd6ed6c3 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
tigrisdk 9:66a4cd6ed6c3 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
tigrisdk 9:66a4cd6ed6c3 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
tigrisdk 9:66a4cd6ed6c3 20 * THE SOFTWARE.
tigrisdk 9:66a4cd6ed6c3 21 */
tigrisdk 9:66a4cd6ed6c3 22
tigrisdk 9:66a4cd6ed6c3 23 #ifndef M3PI_H
tigrisdk 9:66a4cd6ed6c3 24 #define M3PI_H
tigrisdk 9:66a4cd6ed6c3 25
tigrisdk 9:66a4cd6ed6c3 26 #include "mbed.h"
tigrisdk 9:66a4cd6ed6c3 27 #include "platform.h"
tigrisdk 9:66a4cd6ed6c3 28
tigrisdk 9:66a4cd6ed6c3 29 #ifdef MBED_RPC
tigrisdk 9:66a4cd6ed6c3 30 #include "rpc.h"
tigrisdk 9:66a4cd6ed6c3 31 #endif
tigrisdk 9:66a4cd6ed6c3 32
tigrisdk 9:66a4cd6ed6c3 33 #define SEND_SIGNATURE 0x81
tigrisdk 9:66a4cd6ed6c3 34 #define SEND_RAW_SENSOR_VALUES 0x86
tigrisdk 9:66a4cd6ed6c3 35 #define SEND_TRIMPOT 0xB0
tigrisdk 9:66a4cd6ed6c3 36 #define SEND_BATTERY_MILLIVOLTS 0xB1
tigrisdk 9:66a4cd6ed6c3 37 #define DO_PLAY 0xB3
tigrisdk 9:66a4cd6ed6c3 38 #define PI_CALIBRATE 0xB4
tigrisdk 9:66a4cd6ed6c3 39 #define DO_CLEAR 0xB7
tigrisdk 9:66a4cd6ed6c3 40 #define DO_PRINT 0xB8
tigrisdk 9:66a4cd6ed6c3 41 #define DO_LCD_GOTO_XY 0xB9
tigrisdk 9:66a4cd6ed6c3 42 #define LINE_SENSORS_RESET_CALIBRATION 0xB5
tigrisdk 9:66a4cd6ed6c3 43 #define SEND_LINE_POSITION 0xB6
tigrisdk 9:66a4cd6ed6c3 44 #define AUTO_CALIBRATE 0xBA
tigrisdk 9:66a4cd6ed6c3 45 #define SET_PID 0xBB
tigrisdk 9:66a4cd6ed6c3 46 #define STOP_PID 0xBC
tigrisdk 9:66a4cd6ed6c3 47 #define M1_FORWARD 0xC1
tigrisdk 9:66a4cd6ed6c3 48 #define M1_BACKWARD 0xC2
tigrisdk 9:66a4cd6ed6c3 49 #define M2_FORWARD 0xC5
tigrisdk 9:66a4cd6ed6c3 50 #define M2_BACKWARD 0xC6
tigrisdk 9:66a4cd6ed6c3 51
tigrisdk 9:66a4cd6ed6c3 52
tigrisdk 9:66a4cd6ed6c3 53
tigrisdk 9:66a4cd6ed6c3 54 /** m3pi control class
tigrisdk 9:66a4cd6ed6c3 55 *
tigrisdk 9:66a4cd6ed6c3 56 * Example:
tigrisdk 9:66a4cd6ed6c3 57 * @code
tigrisdk 9:66a4cd6ed6c3 58 * // Drive the m3pi forward, turn left, back, turn right, at half speed for half a second
tigrisdk 9:66a4cd6ed6c3 59
tigrisdk 9:66a4cd6ed6c3 60 #include "mbed.h"
tigrisdk 9:66a4cd6ed6c3 61 #include "m3pi.h"
tigrisdk 9:66a4cd6ed6c3 62
tigrisdk 9:66a4cd6ed6c3 63 m3pi pi;
tigrisdk 9:66a4cd6ed6c3 64
tigrisdk 9:66a4cd6ed6c3 65 int main() {
tigrisdk 9:66a4cd6ed6c3 66
tigrisdk 9:66a4cd6ed6c3 67 wait(0.5);
tigrisdk 9:66a4cd6ed6c3 68
tigrisdk 9:66a4cd6ed6c3 69 pi.forward(0.5);
tigrisdk 9:66a4cd6ed6c3 70 wait (0.5);
tigrisdk 9:66a4cd6ed6c3 71 pi.left(0.5);
tigrisdk 9:66a4cd6ed6c3 72 wait (0.5);
tigrisdk 9:66a4cd6ed6c3 73 pi.backward(0.5);
tigrisdk 9:66a4cd6ed6c3 74 wait (0.5);
tigrisdk 9:66a4cd6ed6c3 75 pi.right(0.5);
tigrisdk 9:66a4cd6ed6c3 76 wait (0.5);
tigrisdk 9:66a4cd6ed6c3 77
tigrisdk 9:66a4cd6ed6c3 78 pi.stop();
tigrisdk 9:66a4cd6ed6c3 79
tigrisdk 9:66a4cd6ed6c3 80 }
tigrisdk 9:66a4cd6ed6c3 81 * @endcode
tigrisdk 9:66a4cd6ed6c3 82 */
tigrisdk 9:66a4cd6ed6c3 83 class m3pi : public Stream {
tigrisdk 9:66a4cd6ed6c3 84
tigrisdk 9:66a4cd6ed6c3 85 // Public functions
tigrisdk 9:66a4cd6ed6c3 86 public:
tigrisdk 9:66a4cd6ed6c3 87
tigrisdk 9:66a4cd6ed6c3 88 /** Create the m3pi object connected to the default pins
tigrisdk 9:66a4cd6ed6c3 89 *
tigrisdk 9:66a4cd6ed6c3 90 * @param nrst GPIO pin used for reset. Default is p23
tigrisdk 9:66a4cd6ed6c3 91 * @param tx Serial transmit pin. Default is p9
tigrisdk 9:66a4cd6ed6c3 92 * @param rx Serial receive pin. Default is p10
tigrisdk 9:66a4cd6ed6c3 93 */
tigrisdk 9:66a4cd6ed6c3 94 m3pi();
tigrisdk 9:66a4cd6ed6c3 95
tigrisdk 9:66a4cd6ed6c3 96
tigrisdk 9:66a4cd6ed6c3 97 /** Create the m3pi object connected to specific pins
tigrisdk 9:66a4cd6ed6c3 98 *
tigrisdk 9:66a4cd6ed6c3 99 */
tigrisdk 9:66a4cd6ed6c3 100 m3pi(PinName nrst, PinName tx, PinName rx);
tigrisdk 9:66a4cd6ed6c3 101
tigrisdk 9:66a4cd6ed6c3 102
tigrisdk 9:66a4cd6ed6c3 103
tigrisdk 9:66a4cd6ed6c3 104 /** Force a hardware reset of the 3pi
tigrisdk 9:66a4cd6ed6c3 105 */
tigrisdk 9:66a4cd6ed6c3 106 void reset (void);
tigrisdk 9:66a4cd6ed6c3 107
tigrisdk 9:66a4cd6ed6c3 108 /** Directly control the speed and direction of the left motor
tigrisdk 9:66a4cd6ed6c3 109 *
tigrisdk 9:66a4cd6ed6c3 110 * @param speed A normalised number -1.0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 111 */
tigrisdk 9:66a4cd6ed6c3 112 void left_motor (float speed);
tigrisdk 9:66a4cd6ed6c3 113
tigrisdk 9:66a4cd6ed6c3 114 /** Directly control the speed and direction of the right motor
tigrisdk 9:66a4cd6ed6c3 115 *
tigrisdk 9:66a4cd6ed6c3 116 * @param speed A normalised number -1.0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 117 */
tigrisdk 9:66a4cd6ed6c3 118 void right_motor (float speed);
tigrisdk 9:66a4cd6ed6c3 119
tigrisdk 9:66a4cd6ed6c3 120 /** Drive both motors forward as the same speed
tigrisdk 9:66a4cd6ed6c3 121 *
tigrisdk 9:66a4cd6ed6c3 122 * @param speed A normalised number 0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 123 */
tigrisdk 9:66a4cd6ed6c3 124 void forward (float speed);
tigrisdk 9:66a4cd6ed6c3 125
tigrisdk 9:66a4cd6ed6c3 126 /** Drive both motors backward as the same speed
tigrisdk 9:66a4cd6ed6c3 127 *
tigrisdk 9:66a4cd6ed6c3 128 * @param speed A normalised number 0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 129 */
tigrisdk 9:66a4cd6ed6c3 130 void backward (float speed);
tigrisdk 9:66a4cd6ed6c3 131
tigrisdk 9:66a4cd6ed6c3 132 /** Drive left motor backwards and right motor forwards at the same speed to turn on the spot
tigrisdk 9:66a4cd6ed6c3 133 *
tigrisdk 9:66a4cd6ed6c3 134 * @param speed A normalised number 0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 135 */
tigrisdk 9:66a4cd6ed6c3 136 void left (float speed);
tigrisdk 9:66a4cd6ed6c3 137
tigrisdk 9:66a4cd6ed6c3 138 /** Drive left motor forward and right motor backwards at the same speed to turn on the spot
tigrisdk 9:66a4cd6ed6c3 139 * @param speed A normalised number 0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 140 */
tigrisdk 9:66a4cd6ed6c3 141 void right (float speed);
tigrisdk 9:66a4cd6ed6c3 142
tigrisdk 9:66a4cd6ed6c3 143 /** Stop both motors
tigrisdk 9:66a4cd6ed6c3 144 *
tigrisdk 9:66a4cd6ed6c3 145 */
tigrisdk 9:66a4cd6ed6c3 146 void stop (void);
tigrisdk 9:66a4cd6ed6c3 147
tigrisdk 9:66a4cd6ed6c3 148 /** Read the voltage of the potentiometer on the 3pi
tigrisdk 9:66a4cd6ed6c3 149 * @returns voltage as a float
tigrisdk 9:66a4cd6ed6c3 150 *
tigrisdk 9:66a4cd6ed6c3 151 */
tigrisdk 9:66a4cd6ed6c3 152 float pot_voltage(void);
tigrisdk 9:66a4cd6ed6c3 153
tigrisdk 9:66a4cd6ed6c3 154 /** Read the battery voltage on the 3pi
tigrisdk 9:66a4cd6ed6c3 155 * @returns battery voltage as a float
tigrisdk 9:66a4cd6ed6c3 156 */
tigrisdk 9:66a4cd6ed6c3 157 float battery(void);
tigrisdk 9:66a4cd6ed6c3 158
tigrisdk 9:66a4cd6ed6c3 159 /** Read the position of the detected line
tigrisdk 9:66a4cd6ed6c3 160 * @returns position as A normalised number -1.0 - 1.0 represents the full range.
tigrisdk 9:66a4cd6ed6c3 161 * -1.0 means line is on the left, or the line has been lost
tigrisdk 9:66a4cd6ed6c3 162 * 0.0 means the line is in the middle
tigrisdk 9:66a4cd6ed6c3 163 * 1.0 means the line is on the right
tigrisdk 9:66a4cd6ed6c3 164 */
tigrisdk 9:66a4cd6ed6c3 165 float line_position (void);
tigrisdk 9:66a4cd6ed6c3 166
tigrisdk 9:66a4cd6ed6c3 167
tigrisdk 9:66a4cd6ed6c3 168 /** Calibrate the sensors. This turns the robot left then right, looking for a line
tigrisdk 9:66a4cd6ed6c3 169 *
tigrisdk 9:66a4cd6ed6c3 170 */
tigrisdk 9:66a4cd6ed6c3 171 char sensor_auto_calibrate (void);
tigrisdk 9:66a4cd6ed6c3 172
tigrisdk 9:66a4cd6ed6c3 173 /** Set calibration manually to the current settings.
tigrisdk 9:66a4cd6ed6c3 174 *
tigrisdk 9:66a4cd6ed6c3 175 */
tigrisdk 9:66a4cd6ed6c3 176 void calibrate(void);
tigrisdk 9:66a4cd6ed6c3 177
tigrisdk 9:66a4cd6ed6c3 178 /** Clear the current calibration settings
tigrisdk 9:66a4cd6ed6c3 179 *
tigrisdk 9:66a4cd6ed6c3 180 */
tigrisdk 9:66a4cd6ed6c3 181 void reset_calibration (void);
tigrisdk 9:66a4cd6ed6c3 182
tigrisdk 9:66a4cd6ed6c3 183 void PID_start(int max_speed, int a, int b, int c, int d);
tigrisdk 9:66a4cd6ed6c3 184
tigrisdk 9:66a4cd6ed6c3 185 void PID_stop();
tigrisdk 9:66a4cd6ed6c3 186
tigrisdk 9:66a4cd6ed6c3 187 /** Write to the 8 LEDs
tigrisdk 9:66a4cd6ed6c3 188 *
tigrisdk 9:66a4cd6ed6c3 189 * @param leds An 8 bit value to put on the LEDs
tigrisdk 9:66a4cd6ed6c3 190 */
tigrisdk 9:66a4cd6ed6c3 191 void leds(int val);
tigrisdk 9:66a4cd6ed6c3 192
tigrisdk 9:66a4cd6ed6c3 193 /** Locate the cursor on the 8x2 LCD
tigrisdk 9:66a4cd6ed6c3 194 *
tigrisdk 9:66a4cd6ed6c3 195 * @param x The horizontal position, from 0 to 7
tigrisdk 9:66a4cd6ed6c3 196 * @param y The vertical position, from 0 to 1
tigrisdk 9:66a4cd6ed6c3 197 */
tigrisdk 9:66a4cd6ed6c3 198 void locate(int x, int y);
tigrisdk 9:66a4cd6ed6c3 199
tigrisdk 9:66a4cd6ed6c3 200 /** Clear the LCD
tigrisdk 9:66a4cd6ed6c3 201 *
tigrisdk 9:66a4cd6ed6c3 202 */
tigrisdk 9:66a4cd6ed6c3 203 void cls(void);
tigrisdk 9:66a4cd6ed6c3 204
tigrisdk 9:66a4cd6ed6c3 205 /** Send a character directly to the 3pi serial interface
tigrisdk 9:66a4cd6ed6c3 206 * @param c The character to send to the 3pi
tigrisdk 9:66a4cd6ed6c3 207 */
tigrisdk 9:66a4cd6ed6c3 208 int putc(int c);
tigrisdk 9:66a4cd6ed6c3 209
tigrisdk 9:66a4cd6ed6c3 210 /** Receive a character directly to the 3pi serial interface
tigrisdk 9:66a4cd6ed6c3 211 * @returns c The character received from the 3pi
tigrisdk 9:66a4cd6ed6c3 212 */
tigrisdk 9:66a4cd6ed6c3 213 int getc();
tigrisdk 9:66a4cd6ed6c3 214
tigrisdk 9:66a4cd6ed6c3 215 /** Send a string buffer to the 3pi serial interface
tigrisdk 9:66a4cd6ed6c3 216 * @param text A pointer to a char array
tigrisdk 9:66a4cd6ed6c3 217 * @param int The character to send to the 3pi
tigrisdk 9:66a4cd6ed6c3 218 */
tigrisdk 9:66a4cd6ed6c3 219 int print(char* text, int length);
tigrisdk 9:66a4cd6ed6c3 220
tigrisdk 9:66a4cd6ed6c3 221 #ifdef MBED_RPC
tigrisdk 9:66a4cd6ed6c3 222 virtual const struct rpc_method *get_rpc_methods();
tigrisdk 9:66a4cd6ed6c3 223 #endif
tigrisdk 9:66a4cd6ed6c3 224
tigrisdk 9:66a4cd6ed6c3 225 private :
tigrisdk 9:66a4cd6ed6c3 226
tigrisdk 9:66a4cd6ed6c3 227 DigitalOut _nrst;
tigrisdk 9:66a4cd6ed6c3 228 Serial _ser;
tigrisdk 9:66a4cd6ed6c3 229
tigrisdk 9:66a4cd6ed6c3 230 void motor (int motor, float speed);
tigrisdk 9:66a4cd6ed6c3 231 virtual int _putc(int c);
tigrisdk 9:66a4cd6ed6c3 232 virtual int _getc();
tigrisdk 9:66a4cd6ed6c3 233
tigrisdk 9:66a4cd6ed6c3 234 };
tigrisdk 9:66a4cd6ed6c3 235
tigrisdk 9:66a4cd6ed6c3 236 #endif