Unfinished v0.7, added bearing detection

Fork of Pi_Swarm_Library_v06_alpha by piswarm

Committer:
jah128
Date:
Sun Feb 02 18:05:58 2014 +0000
Revision:
1:b067a08ff54e
Parent:
0:9ffe8ebd1c40
Child:
3:4c0f2f3de33e
updated comms library;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jah128 0:9ffe8ebd1c40 1 /* University of York Robot Lab Pi Swarm Robot Library
jah128 0:9ffe8ebd1c40 2 *
jah128 0:9ffe8ebd1c40 3 * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York
jah128 0:9ffe8ebd1c40 4 *
jah128 0:9ffe8ebd1c40 5 * Version 0.4 January 2014
jah128 0:9ffe8ebd1c40 6 *
jah128 0:9ffe8ebd1c40 7 * Designed for use with the Pi Swarm Board (enhanced MBED sensor board) v1.2
jah128 0:9ffe8ebd1c40 8 *
jah128 0:9ffe8ebd1c40 9 * Based on the original m3pi library, Copyright (c) 2007-2010 cstyles (see copyright notice at end of file)
jah128 0:9ffe8ebd1c40 10 */
jah128 0:9ffe8ebd1c40 11
jah128 0:9ffe8ebd1c40 12 #ifndef PISWARM_H
jah128 0:9ffe8ebd1c40 13 #define PISWARM_H
jah128 0:9ffe8ebd1c40 14
jah128 0:9ffe8ebd1c40 15 #include "mbed.h"
jah128 0:9ffe8ebd1c40 16 #include "platform.h"
jah128 0:9ffe8ebd1c40 17 #include "alpha433.h"
jah128 0:9ffe8ebd1c40 18 #include "main.h"
jah128 0:9ffe8ebd1c40 19
jah128 0:9ffe8ebd1c40 20 #ifdef MBED_RPC
jah128 0:9ffe8ebd1c40 21 #include "rpc.h"
jah128 0:9ffe8ebd1c40 22 #endif
jah128 0:9ffe8ebd1c40 23
jah128 0:9ffe8ebd1c40 24 #define SEND_SIGNATURE 0x81
jah128 0:9ffe8ebd1c40 25 #define SEND_RAW_SENSOR_VALUES 0x86
jah128 0:9ffe8ebd1c40 26 #define SEND_TRIMPOT 0xB0
jah128 0:9ffe8ebd1c40 27 #define SEND_BATTERY_MILLIVOLTS 0xB1
jah128 0:9ffe8ebd1c40 28 #define DO_PLAY 0xB3
jah128 0:9ffe8ebd1c40 29 #define PI_CALIBRATE 0xB4
jah128 0:9ffe8ebd1c40 30 #define DO_CLEAR 0xB7
jah128 0:9ffe8ebd1c40 31 #define DO_PRINT 0xB8
jah128 0:9ffe8ebd1c40 32 #define DO_LCD_GOTO_XY 0xB9
jah128 0:9ffe8ebd1c40 33 #define LINE_SENSORS_RESET_CALIBRATION 0xB5
jah128 0:9ffe8ebd1c40 34 #define SEND_LINE_POSITION 0xB6
jah128 0:9ffe8ebd1c40 35 #define AUTO_CALIBRATE 0xBA
jah128 0:9ffe8ebd1c40 36 #define SET_PID 0xBB
jah128 0:9ffe8ebd1c40 37 #define STOP_PID 0xBC
jah128 0:9ffe8ebd1c40 38 #define M1_FORWARD 0xC1
jah128 0:9ffe8ebd1c40 39 #define M1_BACKWARD 0xC2
jah128 0:9ffe8ebd1c40 40 #define M2_FORWARD 0xC5
jah128 0:9ffe8ebd1c40 41 #define M2_BACKWARD 0xC6
jah128 0:9ffe8ebd1c40 42 #define EXPANSION_IC_ADDRESS 0x40
jah128 0:9ffe8ebd1c40 43 #define MAGNETOMETER_ADDRESS 0x1C
jah128 0:9ffe8ebd1c40 44 #define ADC_ADDRESS 0x46
jah128 0:9ffe8ebd1c40 45 #define EEPROM_ADDRESS 0XA0
jah128 0:9ffe8ebd1c40 46
jah128 0:9ffe8ebd1c40 47 class PiSwarm : public Stream {
jah128 0:9ffe8ebd1c40 48
jah128 0:9ffe8ebd1c40 49 // Public functions
jah128 0:9ffe8ebd1c40 50 public:
jah128 0:9ffe8ebd1c40 51
jah128 1:b067a08ff54e 52 // Create the Pi Swarm object connected to the default pins [see end of file]
jah128 0:9ffe8ebd1c40 53 PiSwarm();
jah128 0:9ffe8ebd1c40 54
jah128 0:9ffe8ebd1c40 55 // Returns the RGB Colour of the Outer LED as an int (r<<16 g<<8 b)
jah128 0:9ffe8ebd1c40 56 int get_oled_colour(void);
jah128 0:9ffe8ebd1c40 57
jah128 1:b067a08ff54e 58 // Returns the enable state of an single outer led
jah128 1:b067a08ff54e 59 char get_oled_state(char oled);
jah128 1:b067a08ff54e 60
jah128 1:b067a08ff54e 61 // Returns the enable state of the center LED
jah128 1:b067a08ff54e 62 char get_cled_state(void);
jah128 1:b067a08ff54e 63
jah128 0:9ffe8ebd1c40 64 // Returns the RGB Colour of the Center LED as an int (r<<16 g<<8 b)
jah128 0:9ffe8ebd1c40 65 int get_cled_colour(void);
jah128 0:9ffe8ebd1c40 66
jah128 0:9ffe8ebd1c40 67 // Toggle the state of a single outer LED without affected the others
jah128 0:9ffe8ebd1c40 68 void set_oled(char oled, char value);
jah128 0:9ffe8ebd1c40 69
jah128 0:9ffe8ebd1c40 70 void test_oled(void);
jah128 0:9ffe8ebd1c40 71 void turn_off_all_oleds(void);
jah128 0:9ffe8ebd1c40 72
jah128 0:9ffe8ebd1c40 73 // Toggle the states of all 10 outer LEDs
jah128 0:9ffe8ebd1c40 74 void set_oleds(char oled_0, char oled_1, char oled_2, char oled_3, char oled_4, char oled_5, char oled_6, char oled_7, char oled_8, char oled_9);
jah128 0:9ffe8ebd1c40 75
jah128 0:9ffe8ebd1c40 76 void activate_oleds(void);
jah128 0:9ffe8ebd1c40 77
jah128 0:9ffe8ebd1c40 78 // The default setup routine: called when s3pi is created
jah128 0:9ffe8ebd1c40 79 void setup ( void );
jah128 0:9ffe8ebd1c40 80
jah128 0:9ffe8ebd1c40 81 // Send a message of given length over the RF interface
jah128 0:9ffe8ebd1c40 82 void send_rf_message(char* message, char length);
jah128 0:9ffe8ebd1c40 83
jah128 0:9ffe8ebd1c40 84 // Sets up the IO expansion IC using I2C commands; returns a zero if successful
jah128 0:9ffe8ebd1c40 85 int setup_expansion_ic ( void );
jah128 0:9ffe8ebd1c40 86
jah128 0:9ffe8ebd1c40 87 // Turns on or off the LDO outputs based on the current enable variables (enable_ir_ldo and enable_led_ldo)
jah128 0:9ffe8ebd1c40 88 void enable_ldo_outputs ( void );
jah128 0:9ffe8ebd1c40 89
jah128 0:9ffe8ebd1c40 90 // Called after a delay from the IO expansion interrupt; delay helps debounce switches
jah128 0:9ffe8ebd1c40 91 void interrupt_timeout_event ( void );
jah128 0:9ffe8ebd1c40 92
jah128 0:9ffe8ebd1c40 93 // The interrupt handler for the IO expansion IC; calls the timeout event to debounce switches
jah128 0:9ffe8ebd1c40 94 void expansion_interrupt_handler ( void );
jah128 0:9ffe8ebd1c40 95
jah128 0:9ffe8ebd1c40 96 // Turns off interrupt LED after a delay to indicate switch has been pressed
jah128 0:9ffe8ebd1c40 97 void led_timeout_event ( void );
jah128 0:9ffe8ebd1c40 98
jah128 0:9ffe8ebd1c40 99 // Set colour of outer LEDs
jah128 0:9ffe8ebd1c40 100 void set_oled_colour ( char red, char green, char blue );
jah128 0:9ffe8ebd1c40 101
jah128 0:9ffe8ebd1c40 102 // Set colour of central LED
jah128 0:9ffe8ebd1c40 103 void set_cled_colour ( char red, char green, char blue );
jah128 0:9ffe8ebd1c40 104
jah128 0:9ffe8ebd1c40 105 // Set brightness of outer LEDs (works by increasing total period for PWM)
jah128 0:9ffe8ebd1c40 106 void set_oled_brightness ( char brightness );
jah128 0:9ffe8ebd1c40 107
jah128 0:9ffe8ebd1c40 108 // Set brightness of central LED (works by increasing total period for PWM)
jah128 0:9ffe8ebd1c40 109 void set_cled_brightness ( char brightness );
jah128 0:9ffe8ebd1c40 110
jah128 0:9ffe8ebd1c40 111 // Read temperature from the temperature IC; return is temperature in degrees Celsius
jah128 0:9ffe8ebd1c40 112 float read_temperature ( void );
jah128 0:9ffe8ebd1c40 113
jah128 0:9ffe8ebd1c40 114 // Routine to calibrate gyro; by default run in setup, robot should be stationary to avoid errors
jah128 0:9ffe8ebd1c40 115 // Returns 1 if successful, 0 if failed
jah128 0:9ffe8ebd1c40 116 char calibrate_gyro ( void );
jah128 0:9ffe8ebd1c40 117
jah128 0:9ffe8ebd1c40 118 // Routine to calibrate accelerometer, by default run after successful gyro calibration, robot should be flat and stationary to avoid errors
jah128 0:9ffe8ebd1c40 119 // Returns 1 if successful, 0 if failed
jah128 0:9ffe8ebd1c40 120 char calibrate_accelerometer ( void );
jah128 0:9ffe8ebd1c40 121
jah128 0:9ffe8ebd1c40 122 // Routine to calibrate magnetometer
jah128 0:9ffe8ebd1c40 123 // Returns 1 if successful, 0 if failed
jah128 0:9ffe8ebd1c40 124 char calibrate_magnetometer ( void );
jah128 0:9ffe8ebd1c40 125
jah128 0:9ffe8ebd1c40 126 char setup_adc( void );
jah128 0:9ffe8ebd1c40 127
jah128 0:9ffe8ebd1c40 128 // Routine to initialise radio
jah128 0:9ffe8ebd1c40 129 void setup_radio( void );
jah128 0:9ffe8ebd1c40 130
jah128 0:9ffe8ebd1c40 131 // Routines returns an approximate distance of any reflected obstacle in front of the given IR sensor (in millimeters)
jah128 0:9ffe8ebd1c40 132 // Returns a value of 100 if nothing is detected
jah128 0:9ffe8ebd1c40 133 // True distance depends on a number of factors (reflectiveness of surface being one of the key ones)
jah128 0:9ffe8ebd1c40 134 // Minimum value is around 5
jah128 0:9ffe8ebd1c40 135 float read_reflected_ir_distance ( char index );
jah128 0:9ffe8ebd1c40 136
jah128 0:9ffe8ebd1c40 137 // Returns the raw ADC value for a given IR sensor
jah128 0:9ffe8ebd1c40 138 unsigned short read_adc_value( char index );
jah128 0:9ffe8ebd1c40 139
jah128 0:9ffe8ebd1c40 140 // Read the I2C magnetometer and store values locally: use before get_magnetometer_x etc...
jah128 0:9ffe8ebd1c40 141 char read_magnetometer ( void );
jah128 0:9ffe8ebd1c40 142
jah128 0:9ffe8ebd1c40 143 // Return the magnetometer x value stored on last call of read_magnetometer()
jah128 0:9ffe8ebd1c40 144 signed short get_magnetometer_x ( void );
jah128 0:9ffe8ebd1c40 145
jah128 0:9ffe8ebd1c40 146 // Return the magnetometer y value stored on last call of read_magnetometer()
jah128 0:9ffe8ebd1c40 147 signed short get_magnetometer_y ( void );
jah128 0:9ffe8ebd1c40 148
jah128 0:9ffe8ebd1c40 149 // Return the magnetometer z value stored on last call of read_magnetometer()
jah128 0:9ffe8ebd1c40 150 signed short get_magnetometer_z ( void );
jah128 0:9ffe8ebd1c40 151
jah128 0:9ffe8ebd1c40 152 // Blinks the calibration LED during calibration (turns off if calibration successful)
jah128 0:9ffe8ebd1c40 153 void calibrate_ticker_routine ( void );
jah128 0:9ffe8ebd1c40 154
jah128 0:9ffe8ebd1c40 155 // Read the gyroscope yaw value. Return value is degrees per second clockwise.
jah128 0:9ffe8ebd1c40 156 float read_gyro ( void );
jah128 0:9ffe8ebd1c40 157
jah128 0:9ffe8ebd1c40 158 // Read the X value from the accelerometer. Return value is mps2.
jah128 0:9ffe8ebd1c40 159 float read_accelerometer_x ( void );
jah128 0:9ffe8ebd1c40 160
jah128 0:9ffe8ebd1c40 161 // Read the Y value from the accelerometer. Return value is mps2.
jah128 0:9ffe8ebd1c40 162 float read_accelerometer_y ( void );
jah128 0:9ffe8ebd1c40 163
jah128 0:9ffe8ebd1c40 164 // Read the Z value from the accelerometer. Return value is mps2. Generally this will have g against it.
jah128 0:9ffe8ebd1c40 165 float read_accelerometer_z ( void );
jah128 0:9ffe8ebd1c40 166
jah128 0:9ffe8ebd1c40 167 // Read the value from the light sensor. This will return a value ranging from 0 to a peak of around 100 in direct, bright light.
jah128 0:9ffe8ebd1c40 168 float read_light_sensor ( void );
jah128 0:9ffe8ebd1c40 169
jah128 0:9ffe8ebd1c40 170 // Read the robot ID set using the DIP switches (these are read during setup and not updated).
jah128 0:9ffe8ebd1c40 171 char get_id ( void );
jah128 0:9ffe8ebd1c40 172
jah128 0:9ffe8ebd1c40 173 // Read the switches value from the last call of the ISR
jah128 0:9ffe8ebd1c40 174 char get_switches ( void );
jah128 0:9ffe8ebd1c40 175
jah128 0:9ffe8ebd1c40 176 // Enable or disable the center LED
jah128 0:9ffe8ebd1c40 177 void enable_cled ( char enable );
jah128 0:9ffe8ebd1c40 178
jah128 0:9ffe8ebd1c40 179 // Write single byte to EEPROM
jah128 0:9ffe8ebd1c40 180 void write_eeprom_byte ( int address, char data );
jah128 0:9ffe8ebd1c40 181
jah128 0:9ffe8ebd1c40 182 // Write (length) bytes to EEPROM
jah128 0:9ffe8ebd1c40 183 void write_eeprom_block ( int address, char length, char * data);
jah128 0:9ffe8ebd1c40 184
jah128 0:9ffe8ebd1c40 185 // Read single byte from EEPROM
jah128 0:9ffe8ebd1c40 186 char read_eeprom_byte ( int address );
jah128 0:9ffe8ebd1c40 187
jah128 0:9ffe8ebd1c40 188 // Read next byte from EEPROM at current address
jah128 0:9ffe8ebd1c40 189 char read_next_eeprom_byte ( void );
jah128 0:9ffe8ebd1c40 190
jah128 0:9ffe8ebd1c40 191 // Read (length) from EEPROM
jah128 0:9ffe8ebd1c40 192 char read_eeprom_block ( int address, char length );
jah128 0:9ffe8ebd1c40 193
jah128 0:9ffe8ebd1c40 194 // The following functions are (generally) those which are part of the original M3Pi library and interact with the 3Pi robot
jah128 0:9ffe8ebd1c40 195
jah128 0:9ffe8ebd1c40 196 /** Read the raw line sensors into a 5-int array
jah128 0:9ffe8ebd1c40 197 * @ param raw_ls_array Pointer to 5-int array for raw values (range 0-2000)
jah128 0:9ffe8ebd1c40 198 */
jah128 0:9ffe8ebd1c40 199 void read_raw_sensors ( int * raw_ls_array );
jah128 0:9ffe8ebd1c40 200
jah128 0:9ffe8ebd1c40 201
jah128 1:b067a08ff54e 202 // Play a tune on the 3-pi buzzer (see end of file for more details)
jah128 0:9ffe8ebd1c40 203 void play_tune (char * tune, int length);
jah128 0:9ffe8ebd1c40 204
jah128 1:b067a08ff54e 205 // Force a hardware reset of the 3-pi
jah128 0:9ffe8ebd1c40 206 void reset (void);
jah128 0:9ffe8ebd1c40 207
jah128 0:9ffe8ebd1c40 208 float get_left_motor (void);
jah128 0:9ffe8ebd1c40 209 float get_right_motor (void);
jah128 0:9ffe8ebd1c40 210
jah128 0:9ffe8ebd1c40 211 /** Directly control the speed and direction of the left motor
jah128 0:9ffe8ebd1c40 212 *
jah128 0:9ffe8ebd1c40 213 * @param speed A normalised number -1.0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 214 */
jah128 0:9ffe8ebd1c40 215 void left_motor (float speed);
jah128 0:9ffe8ebd1c40 216
jah128 0:9ffe8ebd1c40 217 /** Directly control the speed and direction of the right motor
jah128 0:9ffe8ebd1c40 218 *
jah128 0:9ffe8ebd1c40 219 * @param speed A normalised number -1.0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 220 */
jah128 0:9ffe8ebd1c40 221 void right_motor (float speed);
jah128 0:9ffe8ebd1c40 222
jah128 0:9ffe8ebd1c40 223 /** Drive both motors forward as the same speed
jah128 0:9ffe8ebd1c40 224 *
jah128 0:9ffe8ebd1c40 225 * @param speed A normalised number 0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 226 */
jah128 0:9ffe8ebd1c40 227 void forward (float speed);
jah128 0:9ffe8ebd1c40 228
jah128 0:9ffe8ebd1c40 229 /** Drive both motors backward as the same speed
jah128 0:9ffe8ebd1c40 230 *
jah128 0:9ffe8ebd1c40 231 * @param speed A normalised number 0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 232 */
jah128 0:9ffe8ebd1c40 233 void backward (float speed);
jah128 0:9ffe8ebd1c40 234
jah128 0:9ffe8ebd1c40 235 /** Drive left motor backwards and right motor forwards at the same speed to turn on the spot
jah128 0:9ffe8ebd1c40 236 *
jah128 0:9ffe8ebd1c40 237 * @param speed A normalised number 0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 238 */
jah128 0:9ffe8ebd1c40 239 void left (float speed);
jah128 0:9ffe8ebd1c40 240
jah128 0:9ffe8ebd1c40 241 /** Drive left motor forward and right motor backwards at the same speed to turn on the spot
jah128 0:9ffe8ebd1c40 242 * @param speed A normalised number 0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 243 */
jah128 0:9ffe8ebd1c40 244 void right (float speed);
jah128 0:9ffe8ebd1c40 245
jah128 0:9ffe8ebd1c40 246 /** Stop both motors
jah128 0:9ffe8ebd1c40 247 *
jah128 0:9ffe8ebd1c40 248 */
jah128 0:9ffe8ebd1c40 249 void stop (void);
jah128 0:9ffe8ebd1c40 250
jah128 0:9ffe8ebd1c40 251 /** Read the voltage of the potentiometer on the 3pi
jah128 0:9ffe8ebd1c40 252 * @returns voltage as a float
jah128 0:9ffe8ebd1c40 253 *
jah128 0:9ffe8ebd1c40 254 */
jah128 0:9ffe8ebd1c40 255 float pot_voltage(void);
jah128 0:9ffe8ebd1c40 256
jah128 0:9ffe8ebd1c40 257 /** Read the battery voltage on the 3pi
jah128 0:9ffe8ebd1c40 258 * @returns battery voltage as a float
jah128 0:9ffe8ebd1c40 259 */
jah128 0:9ffe8ebd1c40 260 float battery(void);
jah128 0:9ffe8ebd1c40 261
jah128 0:9ffe8ebd1c40 262 /** Read the position of the detected line
jah128 0:9ffe8ebd1c40 263 * @returns position as A normalised number -1.0 - 1.0 represents the full range.
jah128 0:9ffe8ebd1c40 264 * -1.0 means line is on the left, or the line has been lost
jah128 0:9ffe8ebd1c40 265 * 0.0 means the line is in the middle
jah128 0:9ffe8ebd1c40 266 * 1.0 means the line is on the right
jah128 0:9ffe8ebd1c40 267 */
jah128 0:9ffe8ebd1c40 268 float line_position (void);
jah128 0:9ffe8ebd1c40 269
jah128 0:9ffe8ebd1c40 270
jah128 0:9ffe8ebd1c40 271 /** Calibrate the sensors. This turns the robot left then right, looking for a line
jah128 0:9ffe8ebd1c40 272 *
jah128 0:9ffe8ebd1c40 273 */
jah128 0:9ffe8ebd1c40 274 char sensor_auto_calibrate (void);
jah128 0:9ffe8ebd1c40 275
jah128 0:9ffe8ebd1c40 276 /** Set calibration manually to the current settings.
jah128 0:9ffe8ebd1c40 277 *
jah128 0:9ffe8ebd1c40 278 */
jah128 0:9ffe8ebd1c40 279 void calibrate(void);
jah128 0:9ffe8ebd1c40 280
jah128 0:9ffe8ebd1c40 281 /** Clear the current calibration settings
jah128 0:9ffe8ebd1c40 282 *
jah128 0:9ffe8ebd1c40 283 */
jah128 0:9ffe8ebd1c40 284 void reset_calibration (void);
jah128 0:9ffe8ebd1c40 285
jah128 0:9ffe8ebd1c40 286 void PID_start(int max_speed, int a, int b, int c, int d);
jah128 0:9ffe8ebd1c40 287
jah128 0:9ffe8ebd1c40 288 void PID_stop();
jah128 0:9ffe8ebd1c40 289
jah128 0:9ffe8ebd1c40 290 /** Locate the cursor on the 8x2 LCD
jah128 0:9ffe8ebd1c40 291 *
jah128 0:9ffe8ebd1c40 292 * @param x The horizontal position, from 0 to 7
jah128 0:9ffe8ebd1c40 293 * @param y The vertical position, from 0 to 1
jah128 0:9ffe8ebd1c40 294 */
jah128 0:9ffe8ebd1c40 295 void locate(int x, int y);
jah128 0:9ffe8ebd1c40 296
jah128 0:9ffe8ebd1c40 297 /** Clear the LCD
jah128 0:9ffe8ebd1c40 298 *
jah128 0:9ffe8ebd1c40 299 */
jah128 0:9ffe8ebd1c40 300 void cls(void);
jah128 0:9ffe8ebd1c40 301
jah128 0:9ffe8ebd1c40 302 /** Send a character directly to the 3pi serial interface
jah128 0:9ffe8ebd1c40 303 * @param c The character to send to the 3pi
jah128 0:9ffe8ebd1c40 304 */
jah128 0:9ffe8ebd1c40 305 int putc(int c);
jah128 0:9ffe8ebd1c40 306
jah128 0:9ffe8ebd1c40 307 /** Receive a character directly to the 3pi serial interface
jah128 0:9ffe8ebd1c40 308 * @returns c The character received from the 3pi
jah128 0:9ffe8ebd1c40 309 */
jah128 0:9ffe8ebd1c40 310 int getc();
jah128 0:9ffe8ebd1c40 311
jah128 0:9ffe8ebd1c40 312 /** Send a string buffer to the 3pi serial interface
jah128 0:9ffe8ebd1c40 313 * @param text A pointer to a char array
jah128 0:9ffe8ebd1c40 314 * @param int The character to send to the 3pi
jah128 0:9ffe8ebd1c40 315 */
jah128 0:9ffe8ebd1c40 316 int print(char* text, int length);
jah128 0:9ffe8ebd1c40 317
jah128 0:9ffe8ebd1c40 318
jah128 0:9ffe8ebd1c40 319 void start_system_timer(void);
jah128 0:9ffe8ebd1c40 320
jah128 0:9ffe8ebd1c40 321 float get_uptime (void);
jah128 0:9ffe8ebd1c40 322
jah128 0:9ffe8ebd1c40 323 #ifdef MBED_RPC
jah128 0:9ffe8ebd1c40 324 virtual const struct rpc_method *get_rpc_methods();
jah128 0:9ffe8ebd1c40 325 #endif
jah128 0:9ffe8ebd1c40 326
jah128 0:9ffe8ebd1c40 327 private :
jah128 0:9ffe8ebd1c40 328
jah128 0:9ffe8ebd1c40 329 Serial _ser;
jah128 0:9ffe8ebd1c40 330 PwmOut _oled_r, _oled_g, _oled_b, _cled_r, _cled_g, _cled_b;
jah128 0:9ffe8ebd1c40 331 AnalogIn _gyro, _accel_x, _accel_y, _accel_z, _temperature, _light;
jah128 0:9ffe8ebd1c40 332 DigitalOut _irpulse_1, _irpulse_2;
jah128 0:9ffe8ebd1c40 333 I2C _i2c;
jah128 0:9ffe8ebd1c40 334 Alpha433 _rf;
jah128 0:9ffe8ebd1c40 335 Timer _system_timer;
jah128 0:9ffe8ebd1c40 336
jah128 0:9ffe8ebd1c40 337 void motor (int motor, float speed);
jah128 0:9ffe8ebd1c40 338 virtual int _putc(int c);
jah128 0:9ffe8ebd1c40 339 virtual int _getc();
jah128 0:9ffe8ebd1c40 340
jah128 0:9ffe8ebd1c40 341 };
jah128 0:9ffe8ebd1c40 342
jah128 0:9ffe8ebd1c40 343 void display_system_time(void);
jah128 0:9ffe8ebd1c40 344 void init(void);
jah128 0:9ffe8ebd1c40 345 extern Serial pc;
jah128 0:9ffe8ebd1c40 346 extern PiSwarm piswarm;
jah128 0:9ffe8ebd1c40 347
jah128 0:9ffe8ebd1c40 348 #endif
jah128 0:9ffe8ebd1c40 349
jah128 1:b067a08ff54e 350 /********************************************************************************
jah128 1:b067a08ff54e 351 * MBED Pin connection layout *
jah128 1:b067a08ff54e 352 * *
jah128 1:b067a08ff54e 353 * * Pin 05 : Alpha Transceiver SDI *
jah128 1:b067a08ff54e 354 * * Pin 06 : Alpha Transceiver SDO *
jah128 1:b067a08ff54e 355 * * Pin 07 : Alpha Transceiver CLK *
jah128 1:b067a08ff54e 356 * * Pin 08 : Alpha Transceiver FSS *
jah128 1:b067a08ff54e 357 * * Pin 09 : Serial (3pi) transmit *
jah128 1:b067a08ff54e 358 * * Pin 10 : Serial (3pi) receive *
jah128 1:b067a08ff54e 359 * * Pin 11 : Alpha Transceiver NIRQ *
jah128 1:b067a08ff54e 360 * * Pin 12 : IR Pulse Output for IR1,2,7,8 *
jah128 1:b067a08ff54e 361 * * Pin 13 : IR Pulse Output for IR3,4,5,6 *
jah128 1:b067a08ff54e 362 * * Pin 14 : Echo Pin for Sonar *
jah128 1:b067a08ff54e 363 * * Pin 15 : Light Sensor Analogue Input *
jah128 1:b067a08ff54e 364 * * Pin 16 : Gyrometer Analogue Input *
jah128 1:b067a08ff54e 365 * * Pin 17 : Accelerometer Z Analogue Input *
jah128 1:b067a08ff54e 366 * * Pin 18 : Accelerometer Y Analogue Input *
jah128 1:b067a08ff54e 367 * * Pin 19 : Accelerometer X Analogue Input *
jah128 1:b067a08ff54e 368 * * Pin 20 : Temperature Sensor Analogue Input *
jah128 1:b067a08ff54e 369 * * Pin 21 : Center LED Blue PWM Output *
jah128 1:b067a08ff54e 370 * * Pin 22 : Center LED Green PWM Output *
jah128 1:b067a08ff54e 371 * * Pin 23 : Center LED Red PWM Output *
jah128 1:b067a08ff54e 372 * * Pin 24 : Outer LED Blue PWM Output *
jah128 1:b067a08ff54e 373 * * Pin 25 : Outer LED Green PWM Output *
jah128 1:b067a08ff54e 374 * * Pin 26 : Outer LED Red PWM Output *
jah128 1:b067a08ff54e 375 * * Pin 27 : I2C SCL *
jah128 1:b067a08ff54e 376 * * Pin 28 : I2C SDA *
jah128 1:b067a08ff54e 377 * * Pin 29 : GPIO Expander Interrupt *
jah128 1:b067a08ff54e 378 * * Pin 30 : Trigger Pin for Sonar *
jah128 1:b067a08ff54e 379 * * Pin 31 : USB D+ Connector *
jah128 1:b067a08ff54e 380 * * Pin 32 : USB D- Connector *
jah128 1:b067a08ff54e 381 * *
jah128 1:b067a08ff54e 382 *******************************************************************************/
jah128 0:9ffe8ebd1c40 383
jah128 0:9ffe8ebd1c40 384 /********************************************************************************
jah128 1:b067a08ff54e 385 * Using the 3-Pi Buzzer *
jah128 1:b067a08ff54e 386 * *
jah128 1:b067a08ff54e 387 * play_tune (char * tune, int length) *
jah128 1:b067a08ff54e 388 * *
jah128 1:b067a08ff54e 389 * tune - Pointer to a character sequence of the tune *
jah128 1:b067a08ff54e 390 * length - Length of characters in sequence *
jah128 1:b067a08ff54e 391 * *
jah128 1:b067a08ff54e 392 * The character sequence recognises the following characters: *
jah128 1:b067a08ff54e 393 * *
jah128 1:b067a08ff54e 394 * A – G : used to specify the notes that will be played *
jah128 1:b067a08ff54e 395 * *
jah128 1:b067a08ff54e 396 * R : used to specify a rest (no sound for the duration of the note) *
jah128 1:b067a08ff54e 397 * *
jah128 1:b067a08ff54e 398 * < or > : plays the next note one octave lower or higher *
jah128 1:b067a08ff54e 399 * *
jah128 1:b067a08ff54e 400 * + or # : raises the previous notes pitch by one semitone *
jah128 1:b067a08ff54e 401 * *
jah128 1:b067a08ff54e 402 * - : lowers the previous note pitch by one semitone *
jah128 1:b067a08ff54e 403 * *
jah128 1:b067a08ff54e 404 * . : extend length of previous by 50% (each additional dot adds half as *
jah128 1:b067a08ff54e 405 * much as the previous dot, so that A.. is 1.75 times the length of A *
jah128 1:b067a08ff54e 406 * *
jah128 1:b067a08ff54e 407 * O followed by a number : sets the octave (default : O4) *
jah128 1:b067a08ff54e 408 * *
jah128 1:b067a08ff54e 409 * T followed by a number : sets the tempo in beats/min (default : T120) *
jah128 1:b067a08ff54e 410 * *
jah128 1:b067a08ff54e 411 * L followed by a number : sets the default note duration specified by the*
jah128 1:b067a08ff54e 412 * number - 4 for quarter notes, 8 for eighth, 16 *
jah128 1:b067a08ff54e 413 * for sixteenth notes, etc. (default : L4) *
jah128 1:b067a08ff54e 414 * *
jah128 1:b067a08ff54e 415 * V followed by a number : sets the volume (range 0 - 15, default : V15) *
jah128 1:b067a08ff54e 416 * *
jah128 1:b067a08ff54e 417 * MS : sets all subsequent notes to play staccato (each note is played for*
jah128 1:b067a08ff54e 418 * 1/2 of its allotted time followed by an equal period of silence) *
jah128 1:b067a08ff54e 419 * *
jah128 1:b067a08ff54e 420 * ML : sets all subsequent notes to play legato (each note is played for *
jah128 1:b067a08ff54e 421 * full length. This is the default setting. *
jah128 1:b067a08ff54e 422 * *
jah128 1:b067a08ff54e 423 * ! : resets the octave, tempo, duration, volume, and staccato setting to *
jah128 1:b067a08ff54e 424 * their default values. These settings persist from one play_tune() to*
jah128 1:b067a08ff54e 425 * the next, which allows you to more conveniently break up your music *
jah128 1:b067a08ff54e 426 * into reusable sections. *
jah128 1:b067a08ff54e 427 * *
jah128 1:b067a08ff54e 428 * 1 - 2000 : when immediately following a note, a number determines the *
jah128 1:b067a08ff54e 429 * duration of the note. For example, C16 specifies C played as *
jah128 1:b067a08ff54e 430 * a sixteenth note (1/16th the length of a whole note). *
jah128 1:b067a08ff54e 431 * *
jah128 1:b067a08ff54e 432 * *
jah128 1:b067a08ff54e 433 * Some examples: *
jah128 1:b067a08ff54e 434 * *
jah128 1:b067a08ff54e 435 * Blue Danube Waltz (played badly!) *
jah128 1:b067a08ff54e 436 * play_tune("MSCEGGR>F>FR>D>DRCCEGGR>G>GR>E>ER<B<BDAAR>A>AR>F>F",51); *
jah128 1:b067a08ff54e 437 * *
jah128 1:b067a08ff54e 438 *******************************************************************************/
jah128 1:b067a08ff54e 439
jah128 1:b067a08ff54e 440 /********************************************************************************
jah128 0:9ffe8ebd1c40 441 * COPYRIGHT NOTICE *
jah128 0:9ffe8ebd1c40 442 * *
jah128 0:9ffe8ebd1c40 443 * Permission is hereby granted, free of charge, to any person obtaining a copy *
jah128 0:9ffe8ebd1c40 444 * of this software and associated documentation files (the "Software"), to deal*
jah128 0:9ffe8ebd1c40 445 * in the Software without restriction, including without limitation the rights *
jah128 0:9ffe8ebd1c40 446 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell *
jah128 0:9ffe8ebd1c40 447 * copies of the Software, and to permit persons to whom the Software is *
jah128 0:9ffe8ebd1c40 448 * furnished to do so, subject to the following conditions: *
jah128 0:9ffe8ebd1c40 449 * *
jah128 0:9ffe8ebd1c40 450 * The above copyright notice and this permission notice shall be included in *
jah128 0:9ffe8ebd1c40 451 * all copies or substantial portions of the Software. *
jah128 0:9ffe8ebd1c40 452 * *
jah128 0:9ffe8ebd1c40 453 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
jah128 0:9ffe8ebd1c40 454 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
jah128 0:9ffe8ebd1c40 455 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
jah128 0:9ffe8ebd1c40 456 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
jah128 0:9ffe8ebd1c40 457 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,*
jah128 0:9ffe8ebd1c40 458 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN *
jah128 0:9ffe8ebd1c40 459 * THE SOFTWARE. *
jah128 0:9ffe8ebd1c40 460 * *
jah128 0:9ffe8ebd1c40 461 *******************************************************************************/