C++ Library for the PsiSwarm Robot - Version 0.8

Dependents:   PsiSwarm_V8_Blank_CPP Autonomia_RndmWlk

Fork of PsiSwarmV7_CPP by Psi Swarm Robot

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers psiswarm.h Source File

psiswarm.h

00001 /* University of York Robotics Laboratory PsiSwarm Library: PsiSwarm C++ Core Header File
00002  *
00003  * Copyright 2016 University of York
00004  *
00005  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
00007  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS
00008  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00009  * See the License for the specific language governing permissions and limitations under the License.
00010  *
00011  * File: psiswarm.h
00012  *
00013  * (C) Dept. Electronics & Computer Science, University of York
00014  * James Hilder, Alan Millard, Alexander Horsfield, Homero Elizondo, Jon Timmis
00015  *
00016  * PsiSwarm Library Version: 0.8
00017  *
00018  * October 2016
00019  *
00020  *
00021  */
00022 
00023 #ifndef PSISWARM_H
00024 #define PSISWARM_H
00025 
00026 #define SOFTWARE_VERSION_CODE 0.80
00027 
00028 #define PIC_ADDRESS 0x30
00029 #define LCD_ADDRESS 0x7C
00030 #define LED_IC_ADDRESS 0x42
00031 #define GPIO_IC_ADDRESS 0x40
00032 #define AUX_IC_ADDRESS 0x4E
00033 #define ADC1_ADDRESS 0x46
00034 #define ADC2_ADDRESS 0x48
00035 #define EEPROM_ADDRESS 0XA0
00036 #define TEMPERATURE_ADDRESS 0X30
00037 #define BASE_COLOUR_ADDRESS 0X52
00038 #define TOP_COLOUR_ADDRESS 0X72
00039 #define ULTRASONIC_ADDRESS 0XE0
00040 #define COMMAND_MESSAGE_BYTE 0X1D
00041 #define ACKNOWLEDGE_MESSAGE_BYTE 0X1E
00042 #define RESPONSE_MESSAGE_BYTE 0X1F
00043 #define PSI_BYTE 0X1D
00044 
00045 //Set temperature sensor warnings: 60C critical, 50C high, 0C low
00046 #define TEMPERATURE_CRITICAL_HI 0X03
00047 #define TEMPEARTURE_CRITICAL_LO 0XC0
00048 #define TEMPERATURE_HIGH_HI 0X03
00049 #define TEMPEARTURE_HIGH_LO 0X20
00050 #define TEMPERATURE_LOW_HI 0X00
00051 #define TEMPEARTURE_LOW_LO 0X00
00052 
00053 #define DEFAULT_IR_PULSE_DELAY 400
00054 #define DEFAULT_BASE_IR_PULSE_DELAY 50
00055 
00056 #include <stdio.h>
00057 #include <stdarg.h>
00058 #include <string>
00059 #include <vector>
00060 
00061 #include "settings.h"
00062 #include "serial.h"
00063 #include "mbed.h"
00064 #include "display.h"
00065 #include "led.h"
00066 #include "i2c_setup.h"
00067 #include "motors.h"
00068 #include "sensors.h"
00069 #include "eprom.h"
00070 #include "colour.h"
00071 #include "sound.h"
00072 #include "demo.h"
00073 #include "animations.h"
00074 #include "basic.h"
00075 
00076 //NB The user needs to have a main.cpp with a main() function and a handle_switch_event(char) function
00077 #include "main.h"
00078 
00079 /** Psiswarm Class
00080  * The main class to define a robot
00081  *
00082  * Example code for main.cpp:
00083  * @code
00084  * #include "psiswarm.h"
00085  * Psiswarm psi;
00086  * char * program_name = "Example";
00087  * char * author_name  = "Name";
00088  * char * version_name = "0.8";
00089  * void handle_switch_event(char switch_state){}
00090  * void handle_user_serial_message(char * message, char length, char interface) {}
00091  * int main(){
00092  *    psi.init();
00093  *    while(1) { //Do something!
00094  *    }
00095  * }
00096  * @endcode
00097  */
00098 class Psiswarm
00099 {
00100 public:
00101     /**
00102      * Main initialisation routine for the PsiSwarm robot
00103      *
00104      * Set up the GPIO expansion ICs, launch demo mode if button is held
00105      */
00106     void init(void);
00107     
00108     /**
00109      * Get the uptime for the robot
00110      *
00111      * @return The amount of time in seconds that the MBED has been active since last reset
00112      */
00113     float get_uptime(void);
00114     
00115     /**
00116      * Pause the user code for a defined amount of time
00117      *
00118      * @param The amount of time in seconds to pause user code
00119      */
00120     void pause_user_code(float period);
00121     
00122     /**
00123      * Reset the wheel encoder counters
00124      */
00125     void reset_encoders(void);
00126     
00127     /**
00128      * Send a string (in printf format) to the preferred debug stream, specified in settings.h [of overridden programmatically]
00129      *
00130      * @param The string to send to output stream
00131      */
00132     void debug(const char* format, ...) ;
00133 private:
00134     void IF_end_pause_user_code(void);
00135     void IF_handle_events(void);
00136     void IF_update_encoders(void);
00137     void IF_update_user_id(void);
00138     void IF_update_switch(void);
00139     void IF_update_minutes(void);
00140     void IF_get_hardware_description(void);
00141 };
00142 
00143 extern Psiswarm psi;
00144 extern Serial pc;
00145 extern Serial bt;
00146 extern Display display;
00147 extern Motors motors;
00148 extern Eprom eprom;
00149 extern Led led;
00150 extern Sensors sensors;
00151 extern SerialControl serial;
00152 extern Sound sound;
00153 extern Setup i2c_setup;
00154 extern Demo demo;
00155 extern Animations animations;
00156 extern Basic basic;
00157 extern char * program_name;
00158 extern char * author_name;
00159 extern char * version_name;
00160 
00161 extern I2C primary_i2c;
00162 extern InterruptIn gpio_interrupt;
00163 
00164 extern AnalogIn vin_current;
00165 extern AnalogIn vin_battery;
00166 extern AnalogIn vin_dc;
00167 
00168 extern DigitalOut mbed_led1;
00169 extern DigitalOut mbed_led2;
00170 extern DigitalOut mbed_led3;
00171 extern DigitalOut mbed_led4;
00172 extern PwmOut center_led_red;
00173 extern PwmOut center_led_green;
00174 extern PwmOut motor_left_f;
00175 extern PwmOut motor_left_r;
00176 extern PwmOut motor_right_f;
00177 extern PwmOut motor_right_r;
00178 
00179 extern char time_based_motor_action;
00180 
00181 extern int base_colour_sensor_raw_values [];
00182 extern int top_colour_sensor_raw_values [];
00183 
00184 extern char waiting_for_ultrasonic;
00185 extern int ultrasonic_distance;
00186 extern char ultrasonic_distance_updated;
00187 extern Timeout ultrasonic_timeout;
00188 extern Ticker ultrasonic_ticker;
00189 
00190 extern char background_ir_values [];
00191 extern unsigned short illuminated_ir_values [];
00192 extern float reflected_ir_distances [];
00193 extern char ir_values_stored;
00194 
00195 extern char firmware_bytes[];
00196 
00197 extern char testing_voltage_regulators_flag;
00198 extern char power_good_motor_left;
00199 extern char power_good_motor_right;
00200 extern char power_good_infrared;
00201 extern char status_dc_in;
00202 extern char status_charging;
00203 
00204 extern unsigned short background_base_ir_values [];
00205 extern unsigned short illuminated_base_ir_values [];
00206 extern char base_ir_values_stored;
00207 extern float line_position;
00208 extern char line_found;
00209 
00210 extern float motor_left_speed;
00211 extern float motor_right_speed;
00212 extern char motor_left_brake;
00213 extern char motor_right_brake;
00214 
00215 extern float center_led_brightness;
00216 extern float backlight_brightness;
00217 
00218 extern char use_motor_calibration;
00219 extern char motor_calibration_set;
00220 extern float left_motor_calibration_value;
00221 extern float right_motor_calibration_value;
00222 
00223 extern float firmware_version;
00224 extern float pcb_version;
00225 extern float serial_number;
00226 
00227 extern char has_compass;
00228 extern char has_side_ir;
00229 extern char has_base_ir;
00230 extern char has_base_colour_sensor;
00231 extern char has_top_colour_sensor;
00232 extern char has_wheel_encoders;
00233 extern char has_audio_pic;
00234 extern char has_ultrasonic_sensor;
00235 extern char has_temperature_sensor;
00236 extern char has_recharging_circuit;
00237 extern char has_433_radio;
00238 
00239 extern int ir_pulse_delay;
00240 extern int base_ir_pulse_delay;
00241 
00242 extern char robot_id;
00243 extern char previous_robot_id;
00244 
00245 extern char wheel_encoder_byte;
00246 extern char previous_wheel_encoder_byte;
00247 extern signed int left_encoder;
00248 extern signed int right_encoder;
00249 
00250 extern char switch_byte;
00251 extern char previous_switch_byte;
00252 
00253 extern char user_code_running;
00254 extern char user_code_restore_mode;
00255 extern char demo_on;
00256 extern char event;
00257 extern char change_id_event;
00258 extern char encoder_event;
00259 extern char switch_event;
00260 extern char system_warnings;
00261 
00262 extern char debug_mode;
00263 extern char debug_output;
00264 
00265 extern vector<string> basic_filenames;
00266 extern char psi_basic_file_count;
00267 extern char use_flash_basic;
00268 extern char file_transfer_mode;
00269 
00270 extern char beacon_data_needing;
00271 #endif