TP1

Dependencies:   mbed

Committer:
AntoineDeb
Date:
Wed Dec 09 11:31:07 2020 +0000
Revision:
10:4276eb0b8d4c
Parent:
0:89e0c9ac4a1a
end;

Who changed what in which revision?

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