temp
This commit is contained in:
parent
ad58ecee85
commit
d224a2f82d
@ -74,13 +74,36 @@ bool arduino_frame_available();
|
|||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
void arduino_read();
|
void arduino_read();
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* BRIEF: Update the output sensor values and sends them to the Arduino *
|
* BRIEF: Update the output sensor values and sends them to the Arduino *
|
||||||
* INFORMATION: *
|
* INFORMATION: *
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
void arduino_send_sensor_values();
|
void arduino_send_sensor_values();
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Check so that the heartbeat messages are comming with a *
|
||||||
|
* steady stream *
|
||||||
|
* INFORMATION: Check the last time a heart beat message was received *
|
||||||
|
* and checks against a pre defined time before declaring *
|
||||||
|
* the communication as dead *
|
||||||
|
***********************************************************************/
|
||||||
|
bool arduino_com_alive();
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Set a color on a specific led on the neo ledstrip attached *
|
||||||
|
* to the arduino *
|
||||||
|
* INFORMATION: Send a command with the led index and RGB color to the *
|
||||||
|
* Arduino *
|
||||||
|
***********************************************************************/
|
||||||
|
void arduino_set_led_color(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Tell the arduino that the FC system is OK and everything is *
|
||||||
|
* working *
|
||||||
|
* INFORMATION: Set the datavalue to 0xBA1DFACE for the led data *
|
||||||
|
***********************************************************************/
|
||||||
|
void arduino_im_ok();
|
||||||
|
|
||||||
#endif /* DRIVERS_ARDUINO_COM_H_ */
|
#endif /* DRIVERS_ARDUINO_COM_H_ */
|
||||||
|
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ void pidRun(uint8_t ID)
|
|||||||
break;
|
break;
|
||||||
case PID_ID_ACCELEROMETER:
|
case PID_ID_ACCELEROMETER:
|
||||||
|
|
||||||
if ((PidProfile[PID_ID_ACCELEROMETER].pidEnabled && flags_IsSet_ID(systemFlags_flightmode_acceleromter_id)))
|
if (!(PidProfile[PID_ID_ACCELEROMETER].pidEnabled && flags_IsSet_ID(systemFlags_flightmode_acceleromter_id)))
|
||||||
{
|
{
|
||||||
PidProfile[PID_ID_ACCELEROMETER].PID_Out[ROLL] = rc_input.Roll;
|
PidProfile[PID_ID_ACCELEROMETER].PID_Out[ROLL] = rc_input.Roll;
|
||||||
PidProfile[PID_ID_ACCELEROMETER].PID_Out[PITCH] = rc_input.Pitch;
|
PidProfile[PID_ID_ACCELEROMETER].PID_Out[PITCH] = rc_input.Pitch;
|
||||||
@ -497,7 +497,7 @@ void pidRun(uint8_t ID)
|
|||||||
break;
|
break;
|
||||||
case PID_ID_COMPASS:
|
case PID_ID_COMPASS:
|
||||||
|
|
||||||
if (PidProfile[PID_ID_COMPASS].pidEnabled)
|
if (!PidProfile[PID_ID_COMPASS].pidEnabled)
|
||||||
{
|
{
|
||||||
PidProfile[PID_ID_COMPASS].PID_Out[0] = rc_input.Yaw;
|
PidProfile[PID_ID_COMPASS].PID_Out[0] = rc_input.Yaw;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,23 @@
|
|||||||
#define GPS_PACKET_SIZE 10
|
#define GPS_PACKET_SIZE 10
|
||||||
#define PING_PACKET_SIZE 4
|
#define PING_PACKET_SIZE 4
|
||||||
#define ARDUINO_SENSOR_SIZE 6
|
#define ARDUINO_SENSOR_SIZE 6
|
||||||
|
#define TIME_BEFORE_DEATH_MS 500
|
||||||
|
|
||||||
|
#define BYTE1_32BITS_VALUE(x) ((x & 0xFF000000) >> 24)
|
||||||
|
#define BYTE2_32BITS_VALUE(x) ((x & 0x00FF0000) >> 16)
|
||||||
|
#define BYTE3_32BITS_VALUE(x) ((x & 0x0000FF00) >> 8)
|
||||||
|
#define BYTE4_32BITS_VALUE(x) ((x & 0x000000FF) >> 0)
|
||||||
|
|
||||||
|
#define SET_BYTE1_32BITS_VALUE(x) ((x & 0xFF) << 24)
|
||||||
|
#define SET_BYTE2_32BITS_VALUE(x) ((x & 0xFF) << 16)
|
||||||
|
#define SET_BYTE3_32BITS_VALUE(x) ((x & 0xFF) << 8)
|
||||||
|
#define SET_BYTE4_32BITS_VALUE(x) ((x & 0xFF) << 0)
|
||||||
|
|
||||||
|
const uint32_t heartbeat_msg = 0xDEADBEEF;
|
||||||
|
const uint32_t heartbeat_rsp = 0xBA1DFACE;
|
||||||
|
uint32_t time_since_heartbeat = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct arduino_sensor_t {
|
typedef struct arduino_sensor_t {
|
||||||
uint8_t ID __attribute__((packed));
|
uint8_t ID __attribute__((packed));
|
||||||
@ -30,20 +47,28 @@ enum smartport_packets_e {
|
|||||||
FSSP_DATA_FRAME = 0x10, // Sensor replies with this as start byte
|
FSSP_DATA_FRAME = 0x10, // Sensor replies with this as start byte
|
||||||
|
|
||||||
// ID of sensors. Must be something polled by FrSky RX
|
// ID of sensors. Must be something polled by FrSky RX
|
||||||
FSS_SENSOR_CURRENT = 0xA1,
|
FSS_SENSOR_3 = 0xA1,
|
||||||
FSS_SENSOR_VOLTAGE = 0x22,
|
FSS_SENSOR_2 = 0x22,
|
||||||
FSS_SENSOR_BAROMETER = 0x1B,
|
FSS_SENSOR_BAROMETER = 0x1B,
|
||||||
FSS_TUNE_PITCH = 0x0D,
|
FSS_TUNE_PITCH = 0x0D,
|
||||||
FSS_TUNE_ROLL = 0x34,
|
FSS_TUNE_ROLL = 0x34,
|
||||||
FSS_SENSOR_6 = 0x67,
|
FSS_SENSOR_6 = 0x67,
|
||||||
|
|
||||||
|
//This is for handeling the LED strip and has nothing to do with the smartport
|
||||||
|
//It is only handled here since the information comes from the FC and is sent
|
||||||
|
//over the same bus as the rest of the messages
|
||||||
|
LED_STRIP_DATA = 0xED
|
||||||
};
|
};
|
||||||
|
|
||||||
enum smartportID {
|
enum smartportID {
|
||||||
CURRENT_SENSOR_ID = 0,
|
BAROMETER_SENSOR_ID = 0,
|
||||||
VOLTAGE_SENSOR_ID,
|
|
||||||
BAROMETER_SENSOR_ID,
|
|
||||||
TUNE_PITCH_ID,
|
TUNE_PITCH_ID,
|
||||||
TUNE_ROLL_ID,
|
TUNE_ROLL_ID,
|
||||||
|
|
||||||
|
//LED_STRIP_ID should only be on the flight controller side
|
||||||
|
LED_STRIP_ID,
|
||||||
|
|
||||||
|
//the number of sensors to send data from .
|
||||||
SENSOR_COUNT,
|
SENSOR_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -102,12 +127,6 @@ void arduinoCom_init(USART_TypeDef* usart_inst)
|
|||||||
usart_init_dma(usart_inst, &usartdmaHandler, ARDUINO_BAUD, STOP_BITS_1, PARITY_NONE, ARDUINO_DMA_SIZE, 0);
|
usart_init_dma(usart_inst, &usartdmaHandler, ARDUINO_BAUD, STOP_BITS_1, PARITY_NONE, ARDUINO_DMA_SIZE, 0);
|
||||||
|
|
||||||
/*Initialize the sensors to be sent over smartport*/
|
/*Initialize the sensors to be sent over smartport*/
|
||||||
sensors[CURRENT_SENSOR_ID].ID = FSS_SENSOR_CURRENT;
|
|
||||||
sensors[CURRENT_SENSOR_ID].value = 0;
|
|
||||||
|
|
||||||
sensors[VOLTAGE_SENSOR_ID].ID = FSS_SENSOR_VOLTAGE;
|
|
||||||
sensors[VOLTAGE_SENSOR_ID].value = 0;
|
|
||||||
|
|
||||||
sensors[BAROMETER_SENSOR_ID].ID = FSS_SENSOR_BAROMETER;
|
sensors[BAROMETER_SENSOR_ID].ID = FSS_SENSOR_BAROMETER;
|
||||||
sensors[BAROMETER_SENSOR_ID].value = 0;
|
sensors[BAROMETER_SENSOR_ID].value = 0;
|
||||||
|
|
||||||
@ -116,6 +135,9 @@ void arduinoCom_init(USART_TypeDef* usart_inst)
|
|||||||
|
|
||||||
sensors[TUNE_ROLL_ID].ID = FSS_TUNE_ROLL;
|
sensors[TUNE_ROLL_ID].ID = FSS_TUNE_ROLL;
|
||||||
sensors[TUNE_ROLL_ID].value = 0;
|
sensors[TUNE_ROLL_ID].value = 0;
|
||||||
|
|
||||||
|
sensors[LED_STRIP_ID].ID = LED_STRIP_DATA;
|
||||||
|
sensors[LED_STRIP_ID].value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -161,14 +183,6 @@ arduino_data_t find_packet_from_header(uint8_t header)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define BYTE1_32BITS_VALUE(x) ((x & 0xFF000000) >> 24)
|
|
||||||
#define BYTE2_32BITS_VALUE(x) ((x & 0x00FF0000) >> 16)
|
|
||||||
#define BYTE3_32BITS_VALUE(x) ((x & 0x0000FF00) >> 8)
|
|
||||||
#define BYTE4_32BITS_VALUE(x) ((x & 0x000000FF) >> 0)
|
|
||||||
|
|
||||||
const uint32_t heartbeat_msg = 0xDEADBEEF;
|
|
||||||
const uint32_t heartbeat_rsp = 0xBA1DFACE;
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* BRIEF: A function that parses the message byte per byte and then
|
* BRIEF: A function that parses the message byte per byte and then
|
||||||
* if it was wrong it will do recursive call and parse the rest
|
* if it was wrong it will do recursive call and parse the rest
|
||||||
@ -206,6 +220,7 @@ void arduino_parse_message(uint8_t data)
|
|||||||
if(data == BYTE4_32BITS_VALUE(heartbeat_msg))
|
if(data == BYTE4_32BITS_VALUE(heartbeat_msg))
|
||||||
{
|
{
|
||||||
usart_transmit(&usartdmaHandler.usart_pro, (uint8_t *) &heartbeat_rsp, 4, 10000);
|
usart_transmit(&usartdmaHandler.usart_pro, (uint8_t *) &heartbeat_rsp, 4, 10000);
|
||||||
|
time_since_heartbeat = HAL_GetTick();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -314,12 +329,6 @@ void update_sensor_values()
|
|||||||
{
|
{
|
||||||
|
|
||||||
/* TODO: Add the correct data to the value parameters here*/
|
/* TODO: Add the correct data to the value parameters here*/
|
||||||
sensors[CURRENT_SENSOR_ID].value = Yaw * (180 / 3.1415) + 180;
|
|
||||||
sensors[CURRENT_SENSOR_ID].crc = calculate_crc(&sensors[CURRENT_SENSOR_ID], ARDUINO_SENSOR_SIZE - 1);
|
|
||||||
|
|
||||||
sensors[VOLTAGE_SENSOR_ID].value = YawU * (180 / 3.1415) + 180;
|
|
||||||
sensors[VOLTAGE_SENSOR_ID].crc = calculate_crc(&sensors[VOLTAGE_SENSOR_ID], ARDUINO_SENSOR_SIZE - 1);
|
|
||||||
|
|
||||||
sensors[BAROMETER_SENSOR_ID].value = 0;
|
sensors[BAROMETER_SENSOR_ID].value = 0;
|
||||||
sensors[BAROMETER_SENSOR_ID].crc = calculate_crc(&sensors[BAROMETER_SENSOR_ID], ARDUINO_SENSOR_SIZE - 1);
|
sensors[BAROMETER_SENSOR_ID].crc = calculate_crc(&sensors[BAROMETER_SENSOR_ID], ARDUINO_SENSOR_SIZE - 1);
|
||||||
|
|
||||||
@ -344,21 +353,44 @@ void arduino_send_sensor_values()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Check so that the heartbeat messages are comming with a *
|
||||||
|
* steady stream *
|
||||||
|
* INFORMATION: Check the last time a heart beat message was received *
|
||||||
|
* and checks against a pre defined time before declaring *
|
||||||
|
* the communication as dead *
|
||||||
|
***********************************************************************/
|
||||||
|
bool arduino_com_alive()
|
||||||
|
{
|
||||||
|
return (HAL_GetTick() < (time_since_heartbeat + TIME_BEFORE_DEATH_MS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Set a color on a specific led on the neo ledstrip attached *
|
||||||
|
* to the arduino *
|
||||||
|
* INFORMATION: Send a command with the led index and RGB color to the *
|
||||||
|
* Arduino *
|
||||||
|
***********************************************************************/
|
||||||
|
void arduino_set_led_color(uint8_t index, uint8_t r, uint8_t g, uint8_t b)
|
||||||
|
{
|
||||||
|
sensors[LED_STRIP_ID].value = SET_BYTE1_32BITS_VALUE(index) |
|
||||||
|
SET_BYTE2_32BITS_VALUE(r) |
|
||||||
|
SET_BYTE3_32BITS_VALUE(g) |
|
||||||
|
SET_BYTE4_32BITS_VALUE(b);
|
||||||
|
|
||||||
|
sensors[LED_STRIP_ID].crc = calculate_crc(&sensors[LED_STRIP_ID], ARDUINO_SENSOR_SIZE - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* BRIEF: Tell the arduino that the FC system is OK and everything is *
|
||||||
|
* working *
|
||||||
|
* INFORMATION: Set the datavalue to 0xBA1DFACE for the led data *
|
||||||
|
***********************************************************************/
|
||||||
|
void arduino_im_ok()
|
||||||
|
{
|
||||||
|
sensors[LED_STRIP_ID].value = heartbeat_rsp;
|
||||||
|
sensors[LED_STRIP_ID].crc = calculate_crc(&sensors[LED_STRIP_ID], ARDUINO_SENSOR_SIZE - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user