tp1

Dependencies:   mbed

Committer:
Maximousse
Date:
Sun Oct 11 12:58:03 2020 +0000
Revision:
1:236ac79b07d7
Parent:
0:727643d2c6ef
commit;

Who changed what in which revision?

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