add sail and roll logic
This commit is contained in:
parent
e3dbb6a4ed
commit
76da8b4342
4 changed files with 49 additions and 7 deletions
19
Src/Roll.c
19
Src/Roll.c
|
@ -1,5 +1,7 @@
|
||||||
#include "Roll.h"
|
#include "Roll.h"
|
||||||
|
#include "Sail.h"
|
||||||
#include "Accelerometer.h"
|
#include "Accelerometer.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
ADC_TypeDef * ROLL_ADC = ADC1;
|
ADC_TypeDef * ROLL_ADC = ADC1;
|
||||||
const int ROLL_X_CHANNEL = LL_ADC_CHANNEL_11;
|
const int ROLL_X_CHANNEL = LL_ADC_CHANNEL_11;
|
||||||
|
@ -8,6 +10,10 @@ GPIO_TypeDef * ROLL_GPIO = GPIOC;
|
||||||
const int ROLL_X_PIN = LL_GPIO_PIN_0;
|
const int ROLL_X_PIN = LL_GPIO_PIN_0;
|
||||||
const int ROLL_Y_PIN = LL_GPIO_PIN_1;
|
const int ROLL_Y_PIN = LL_GPIO_PIN_1;
|
||||||
|
|
||||||
|
const int TRIGGER_ANGLE = 40;
|
||||||
|
|
||||||
|
int Roll_isEmergencyState = 0;
|
||||||
|
|
||||||
void Roll_conf(void)
|
void Roll_conf(void)
|
||||||
{
|
{
|
||||||
Accelerometer_conf(ROLL_ADC, ROLL_GPIO, ROLL_X_PIN, ROLL_Y_PIN);
|
Accelerometer_conf(ROLL_ADC, ROLL_GPIO, ROLL_X_PIN, ROLL_Y_PIN);
|
||||||
|
@ -18,8 +24,19 @@ void Roll_start(void)
|
||||||
Accelerometer_start(ROLL_ADC);
|
Accelerometer_start(ROLL_ADC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Roll_getEmergencyState(void)
|
||||||
|
{
|
||||||
|
return Roll_isEmergencyState;
|
||||||
|
}
|
||||||
|
|
||||||
void Roll_background(void)
|
void Roll_background(void)
|
||||||
{
|
{
|
||||||
const int xAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_X_CHANNEL);
|
const int xAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_X_CHANNEL);
|
||||||
const int yAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_Y_CHANNEL);
|
//const int yAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_Y_CHANNEL);
|
||||||
|
|
||||||
|
const int currentState = abs(xAngle) >= 40;
|
||||||
|
if (Roll_isEmergencyState && !currentState)
|
||||||
|
Sail_setEmergency(1);
|
||||||
|
else if (!Roll_isEmergencyState && currentState)
|
||||||
|
Sail_setEmergency(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ void Roll_conf(void);
|
||||||
|
|
||||||
void Roll_start(void);
|
void Roll_start(void);
|
||||||
|
|
||||||
|
int Roll_getEmergencyState(void);
|
||||||
|
|
||||||
void Roll_background(void);
|
void Roll_background(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
33
Src/Sail.c
33
Src/Sail.c
|
@ -11,25 +11,48 @@ TIM_TypeDef * ENCODER_TIMER = TIM3;
|
||||||
GPIO_TypeDef * ENCODER_GPIO = GPIOA;
|
GPIO_TypeDef * ENCODER_GPIO = GPIOA;
|
||||||
const int ENCODER_PIN = LL_GPIO_PIN_5;
|
const int ENCODER_PIN = LL_GPIO_PIN_5;
|
||||||
|
|
||||||
|
const int RESET_ANGLE = 90;
|
||||||
|
|
||||||
|
int Sail_isEmergencyState = 0;
|
||||||
|
|
||||||
void Sail_conf()
|
void Sail_conf()
|
||||||
{
|
{
|
||||||
ServoMotor_conf(MOTOR_TIMER, MOTOR_CHANNEL, MOTOR_GPIO, MOTOR_PIN);
|
ServoMotor_conf(MOTOR_TIMER, MOTOR_CHANNEL, MOTOR_GPIO, MOTOR_PIN);
|
||||||
IncrementalEncoder_conf(ENCODER_TIMER, ENCODER_GPIO, ENCODER_PIN);
|
IncrementalEncoder_conf(ENCODER_TIMER, ENCODER_GPIO, ENCODER_PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sail_background()
|
int getSailAngle(int windAngle)
|
||||||
{
|
{
|
||||||
|
if (windAngle > 180)
|
||||||
|
return 90 * (windAngle - 45) / 135;
|
||||||
|
else
|
||||||
|
return 360 - 90 * ((360 - windAngle) - 45) / 135;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sail_reset()
|
void Sail_background()
|
||||||
{
|
{
|
||||||
|
if (Sail_isEmergencyState)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const int windAngle = IncrementalEncoder_getAngle(ENCODER_TIMER);
|
||||||
|
|
||||||
|
if (windAngle < 45 || windAngle > 315)
|
||||||
|
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, 0);
|
||||||
|
else
|
||||||
|
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, getSailAngle(windAngle));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sail_setEmergency(int state)
|
||||||
|
{
|
||||||
|
Sail_isEmergencyState = state;
|
||||||
|
if (Sail_isEmergencyState)
|
||||||
|
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, RESET_ANGLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Sail_start()
|
void Sail_start()
|
||||||
{
|
{
|
||||||
Timer_start(MOTOR_TIMER);
|
Sail_isEmergencyState = 0;
|
||||||
Timer_start(ENCODER_TIMER);
|
ServoMotor_start(MOTOR_TIMER);
|
||||||
|
IncrementalEncoder_start(ENCODER_TIMER);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ void Sail_background(void);
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void Sail_reset(void);
|
void Sail_setEmergency(int state);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Réinitialise la voile à sa position initiale
|
* @brief Réinitialise la voile à sa position initiale
|
||||||
|
|
Loading…
Reference in a new issue