test
Dependencies: MODDMA MODSERIAL mbed
Fork of IRIS_MBED by
Diff: main.h
- Revision:
- 6:8ffc6d3a7c1d
- Parent:
- 4:1017848d2fe1
--- a/main.h Thu Mar 26 16:26:35 2015 +0000 +++ b/main.h Thu Apr 09 19:54:08 2015 +0000 @@ -1,3 +1,21 @@ +/*********************************************************************** + PROJECT IRIS + Multidisciplinary Group Project + ENG701S2 (Year 4 - MENG) at the University of Portsmouth + + Filename: main.h + + Description: Header file for the main root source file (main.cpp). + + Original Created: 05/04/2015 + Original Author: Jonathan Ashworth + + --------------------------Change Log-------------------------------- + Date | Author | Details + 06/04/05 Jonathan Ashworth + +***********************************************************************/ + /* void serialTx (void); @@ -6,9 +24,216 @@ void serialRx_ISR(void); void usbTimer_ISR(void); + +if(0) { + + //servos + for (i=0; i<PC_SERVO_REQUEST_COUNT; i++) { + PCRxData[(15*i)+0] = 0x00; //CID + PCRxData[(15*i)+1] = i+2; //SID + PCRxData[(15*i)+2] = 0x03; //FC + PCRxData[(15*i)+3] = 0x00; //Byte0... + PCRxData[(15*i)+4] = 0x00; //. + PCRxData[(15*i)+5] = 0x00; //. + PCRxData[(15*i)+6] = 0x00; //... + PCRxData[(15*i)+7] = 0x00; //Byte1... + PCRxData[(15*i)+8] = 0x00; //. + PCRxData[(15*i)+9] = 0x00; //. + PCRxData[(15*i)+10] = 0x00; //... + PCRxData[(15*i)+11] = 0x00; //Byte2... + PCRxData[(15*i)+12] = 0x00; //. + PCRxData[(15*i)+13] = 0x00; //. + PCRxData[(15*i)+14] = 0x00; //... + } + + //motors + for (i=0; i<PC_MOTOR_REQUEST_COUNT; i++) { + PCRxData[(7*15)+(7*i)+0] = 0x00; //CID + PCRxData[(7*15)+(7*i)+1] = i+9; //SID + PCRxData[(7*15)+(7*i)+2] = 0x01; //FC + PCRxData[(7*15)+(7*i)+3] = 0x00; //Byte0... + PCRxData[(7*15)+(7*i)+4] = 0x00; //. + PCRxData[(7*15)+(7*i)+5] = 0x00; //. + PCRxData[(7*15)+(7*i)+6] = 0x00; //... + } + + PCRxData[(7*15)+(7*i)+0] = 0x00; //CID + PCRxData[(7*15)+(7*i)+1] = 0x01; //SID + PCRxData[(7*15)+(7*i)+2] = 0x03; //FC + PCRxData[(7*15)+(7*i)+3] = 0x02; //Byte0... + PCRxData[(7*15)+(7*i)+4] = 0x0a; + PCRxData[(7*15)+(7*i)+5] = 0x0d; + flags.rxNewData = 1; + + } + */ -#include "MODSERIAL/MODSERIAL.h" +#ifndef MAIN_H +#define MAIN_H + +#include "mbed.h" +#include "MODDMA.h" +#include "MODSERIAL.h" +#include "botStateHandler.h" +//#include "HCSR04/HCSR04.h" + +#define SERVO_ARM_BASE_CHAN 0 +#define SERVO_ARM_SHOULDER_CHAN 1 +#define SERVO_ARM_ELBOW_CHAN 2 +#define SERVO_ARM_WRIST_CHAN 3 +#define SERVO_ARM_MANIPULATOR_CHAN 4 +#define SERVO_VISION_PITCH_CHAN 5 +#define SERVO_VISION_YAW_CHAN 6 +#define SERVO_POSITION_MIN 600 +#define SERVO_POSITION_MAX 2300 +#define SERVO_POSITION_CENTRE 1500 + +#define SID_PC 0x00 +#define SID_MBED 0x01 +#define SID_ARM_BASE 0x02 +#define SID_ARM_SHOULDER 0x03 +#define SID_ARM_ELBOW 0x04 +#define SID_ARM_WRIST 0x05 +#define SID_ARM_MANIPULATOR 0x06 +#define SID_VISION_PITCH 0x07 +#define SID_VISION_YAW 0x08 +#define SID_DRIVE_NS 0x09 +#define SID_DRIVE_OS 0x0a +#define SID_RESERVED 0x0b +#define SID_9DOF_ACC 0x0c +#define SID_9DOF_GYRO 0x0d +#define SID_9DOF_MAG 0x0e +#define SID_GPS 0x0f +#define SID_TEMP 0x10 +#define SID_HUM 0x11 +#define SID_BATT_VOL 0x12 +#define SID_BATT_CUR 0x13 +#define SID_PIR 0x14 +#define SID_USOUND_1 0x15 +#define SID_USOUND_2 0x16 +#define SID_USOUND_3 0x17 +#define SID_USOUND_4 0x18 +#define SID_USOUND_5 0x19 +#define SID_USOUND_6 0x1a +#define SID_FIRSTSERVO_LOCATION 0x02 +#define SID_LASTSERVO_LOCATION 0x08 +#define SID_FIRSTMOTOR_LOCATION 0x09 +#define SID_LASTMOTOR_LOCATION 0x0a +#define SID_FIRSTUSOUND_LOCATION 0x15 +#define SID_LASTUSOUND_LOCATION 0x1a + +#define PC_BAUDRATE 115200 +#define PC_TX_BUFFER_SIZE 1024 +#define PC_RX_BUFFER_SIZE 1024 +#define PC_TX_PIN USBTX //Serial tx +#define PC_RX_PIN USBRX //Serial rx +#define PC_TIMEOUT_MESSAGE "MBED detected a timeout - eStop!" +#define PC_TIMEOUT_PERIOD 200 +#define PC_BEGIN_PHRASE "IRIS:INIT" +//const char PC_BEGIN_PHRASE[] = {"IRIS:INIT"}; +//#define PC_TERMINATION_PHRASE 0xefffffff //Packet termination sequence +const unsigned int PC_TERMINATION_PHRASE = 0xefffffff; +#define PC_SERVO_REQUEST_LENGTH 15 // Length of a write request +#define PC_MOTOR_REQUEST_LENGTH 7 // Length of a write request +#define PC_USOUND_RESPONSE_LENGTH 7 +#define PC_PIR_RESPONSE_LENGTH 7 +#define PC_BATTCURRENT_RESPONSE_LENGTH 7 +#define PC_BATTVOLTAGE_RESPONSE_LENGTH 7 +#define PC_HUMIDITY_RESPONSE_LENGTH 7 +#define PC_TEMPERATURE_RESPONSE_LENGTH 7 +#define PC_GPS_RESPONSE_LENGTH 15 +#define PC_9DOFACC_RESPONSE_LENGTH 15 +#define PC_9DOFGYR_RESPONSE_LENGTH 15 +#define PC_9DOFMAG_RESPONSE_LENGTH 15 +#define PC_SERVO_REQUEST_COUNT 7 // Number of servo write requests avaliable +#define PC_MOTOR_REQUEST_COUNT 2 // Number of motor write requests avaliable +#define PC_SENTENCE_COUNT 0x0a +#define PC_CID_LOCATION 0 +#define PC_SID_LOCATION 1 +#define PC_FIELDCOUNT_LOCATION 2 +#define PC_FLOAT0_LOCATION 3 +#define PC_FLOAT1_LOCATION 7 +#define PC_FLOAT2_LOCATION 11 +#define PC_REQUESTEDSID_BYTE0_LOCATION 3 +#define PC_CID_LENGTH 1 +#define PC_SID_LENGTH 1 +#define PC_FIELDCOUNT_LENGTH 1 +#define PC_LONGESTRESPONSESENTENCE PC_SERVO_REQUEST_LENGTH +#define PC_REQUESTEDSID_MAXCOUNT 512 + +#define SSC32_BAUDRATE 115200 +#define SSC32_TX_BUFFER_SIZE 512 +#define SSC32_RX_BUFFER_SIZE 512 +#define SSC32_TX_PIN p13 //Serial tx +#define SSC32_RX_PIN p14 //Serial rx +#define SSC32_STOP "\e" //Command to stop previous command +#define SSC32_STOPPOSITION_ARM_BASE 1500 +#define SSC32_STOPPOSITION_ARM_SHOULDER 600 +#define SSC32_STOPPOSITION_ARM_ELBOW 2350 +#define SSC32_STOPPOSITION_ARM_WRIST 2300 +#define SSC32_STOPPOSITION_ARM_MANIPULATOR 1500 +#define SSC32_STOPPOSITION_VISION_PITCH 1500 +#define SSC32_STOPPOSITION_VISION_YAW 1500 +#define SSC32_STOPPOSITION_TIME 4000 // TODO: replace with speed + +#define GPS_BAUDRATE 115200 +#define GPS_TX_BUFFER_SIZE 512 +#define GPS_RX_BUFFER_SIZE 512 +#define GPS_TX_PIN p28 //Serial tx +#define GPS_RX_PIN p27 //Serial rx + +/* XBEES NOT INCLUDED IN SOLUTION (Recommend a pro version with I2C support) +#define XBEE_TX_BUFFER_SIZE 512 +#define XBEE_RX_BUFFER_SIZE 512 +#define XBEE_TX_PIN 0 //PIN UNALLOCATED +#define XBEE_RX_PIN 0 //PIN UNALLOCATED +*/ + +#define ULTRASOUND_TRIGGER_PIN p11//Digital out +#define ULTRASOUND_ECHO_PIN p12 //Digital (PWM) in (from mux common) +#define BATTERY_VOLTAGE_PIN p16 //Analogue in +#define BATTERY_CURRENT_PIN p15 //Analogue in +#define MUX_D0_PIN p5 //Digital out +#define MUX_D1_PIN p6 //Digital out +#define MUX_D2_PIN p7 //Digital out +#define MUX_D3_PIN p8 //Digital out +#define I2C_SDA p9 //I2C data line +#define I2C_SCL p10 //I2C clock line +#define PIR_PIN p20 //Digital in +#define DRIVE_NS_PIN p21 //PWM out +#define DRIVE_OS_PIN p22 //PWM out +#define DRIVE_DEMAND_MIN 1 +#define DRIVE_DEMAND_MAX -1 +#define DRIVE_DEMAND_NEUTRAL 0 //Demand value for neutral + +#define BOTDATA_FIELDNUMBER_SERVO_CHANNEL 0 +#define BOTDATA_FIELDNUMBER_SERVO_POSITION 1 +#define BOTDATA_FIELDNUMBER_SERVO_SPEED 2 +#define BOTDATA_FIELDNUMBER_SERVO_TIME 3 +#define BOTDATA_FIELDNUMBER_9DOF_ACCEL_X 1 +#define BOTDATA_FIELDNUMBER_9DOF_ACCEL_Y 2 +#define BOTDATA_FIELDNUMBER_9DOF_ACCEL_Z 3 +#define BOTDATA_FIELDNUMBER_9DOF_MAG_X 1 +#define BOTDATA_FIELDNUMBER_9DOF_MAG_Y 2 +#define BOTDATA_FIELDNUMBER_9DOF_MAG_Z 3 +#define BOTDATA_FIELDNUMBER_9DOF_GYRO_X 1 +#define BOTDATA_FIELDNUMBER_9DOF_GYRO_Y 2 +#define BOTDATA_FIELDNUMBER_9DOF_GYRO_Z 3 +#define BOTDATA_FIELDNUMBER_GPS_LAT 1 +#define BOTDATA_FIELDNUMBER_GPS_LONG 2 +#define BOTDATA_FIELDNUMBER_GPS_SPEED 3 +#define BOTDATA_FIELDNUMBER_TEMPERATURE 1 +#define BOTDATA_FIELDNUMBER_HUMIDITY 1 +#define BOTDATA_FIELDNUMBER_VOLTAGE 1 +#define BOTDATA_FIELDNUMBER_CURRENT 1 +#define BOTDATA_FIELDNUMBER_PIR 1 +#define BOTDATA_FIELDNUMBER_DRIVE_DEMAND 0 +#define BOTDATA_FIELDNUMBER_USOUND_DISTANCE 0 + +#define BYTELENGTH_OF_A_FLOAT 4 +#define BYTELENGTH_OF_AN_INT 4 +#define BITLENGTH_OF_A_BYTE 8 enum servoStatus {ToBeMoved = 0, Moving = 1, InPosition = 2}; enum dataErrors {Timeout = 0, RequestDataBad = 1}; @@ -16,83 +241,26 @@ struct Flags { bool rxNewData; + bool txNewData; bool txSentData; bool PCTimeout; -}; - -struct Servo -{ - char channel; - int position; - int speed; - int time; - servoStatus status; -}; - -struct DriveMotor -{ - float demandPulseWidth; -}; - -struct AccelerometerSensor -{ - -}; - -struct GyroSensor -{ - -}; - -struct MagnetometerSensor -{ - -}; - -struct GPSSensor -{ - float latitudeN; - float longitudeW; - float speedOverGroundKMPH; + bool PCBegin; }; -struct TemperatureSensor -{ - float tempCelsius; -}; - -struct HumiditySensor -{ - float humidityPercentage; -}; - -struct BatteryVoltageSensor -{ - float voltageVolts; -}; - -struct BatteryCurrentSensor -{ - float currentAmps; -}; - -struct PIRSensor -{ - bool alarmStatus; -}; - -struct UltrasoundSensor -{ - char muxChannel; - float distanceMillimeters; -}; - - -void getServoData(Servo *servo); void initialise(void); +//void getServoData(Servo *servo); +//void readUltrasound(UltrasoundSensor *sensor); +void constructTxData(char *SIDs, char numberOfSensors); +void parseRequestData(void); +unsigned int translateMotorDemandToPWM(float demand); +void PCTimeout(void); +void shutdown(void); +void timerISR(void); void dmaPCSerialRx(MODSERIAL_IRQ_INFO *q); +bool string_compare(char *a, char *b, unsigned int length); +void sendPCSerialData(void); void dmaSSC32SerialRx(MODSERIAL_IRQ_INFO *q); void dmaGPSSerialRx(MODSERIAL_IRQ_INFO *q); -void PCTimeout(void); -void timerISR(void); -void sendSerialData(void); +long readUltrasound(void); + +#endif /* MAIN_H */