Browse Source

add sail and roll logic

Arnaud Vergnet 3 years ago
parent
commit
76da8b4342
4 changed files with 48 additions and 6 deletions
  1. 18
    1
      Src/Roll.c
  2. 2
    0
      Src/Roll.h
  3. 27
    4
      Src/Sail.c
  4. 1
    1
      Src/Sail.h

+ 18
- 1
Src/Roll.c View File

@@ -1,5 +1,7 @@
1 1
 #include "Roll.h"
2
+#include "Sail.h"
2 3
 #include "Accelerometer.h"
4
+#include "stdlib.h"
3 5
 
4 6
 ADC_TypeDef * ROLL_ADC = ADC1;
5 7
 const int ROLL_X_CHANNEL = LL_ADC_CHANNEL_11;
@@ -8,6 +10,10 @@ GPIO_TypeDef * ROLL_GPIO = GPIOC;
8 10
 const int ROLL_X_PIN = LL_GPIO_PIN_0;
9 11
 const int ROLL_Y_PIN = LL_GPIO_PIN_1;
10 12
 
13
+const int TRIGGER_ANGLE = 40;
14
+
15
+int Roll_isEmergencyState = 0;
16
+
11 17
 void Roll_conf(void)
12 18
 {
13 19
 	Accelerometer_conf(ROLL_ADC, ROLL_GPIO, ROLL_X_PIN, ROLL_Y_PIN);
@@ -18,8 +24,19 @@ void Roll_start(void)
18 24
 	Accelerometer_start(ROLL_ADC);
19 25
 }
20 26
 
27
+int Roll_getEmergencyState(void)
28
+{
29
+	return Roll_isEmergencyState;
30
+}
31
+
21 32
 void Roll_background(void)
22 33
 {
23 34
 	const int xAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_X_CHANNEL);
24
-	const int yAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_Y_CHANNEL);
35
+	//const int yAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_Y_CHANNEL);
36
+	
37
+	const int currentState = abs(xAngle) >= 40;
38
+	if (Roll_isEmergencyState && !currentState)
39
+		Sail_setEmergency(1);
40
+	else if (!Roll_isEmergencyState && currentState)
41
+		Sail_setEmergency(0);
25 42
 }

+ 2
- 0
Src/Roll.h View File

@@ -5,6 +5,8 @@ void Roll_conf(void);
5 5
 
6 6
 void Roll_start(void);
7 7
 
8
+int Roll_getEmergencyState(void);
9
+
8 10
 void Roll_background(void);
9 11
 
10 12
 #endif

+ 27
- 4
Src/Sail.c View File

@@ -11,25 +11,48 @@ TIM_TypeDef * ENCODER_TIMER = TIM3;
11 11
 GPIO_TypeDef * ENCODER_GPIO = GPIOA;
12 12
 const int ENCODER_PIN = LL_GPIO_PIN_5;
13 13
 
14
+const int RESET_ANGLE = 90;
15
+
16
+int Sail_isEmergencyState = 0;
17
+
14 18
 void Sail_conf()
15 19
 {
16 20
 	ServoMotor_conf(MOTOR_TIMER, MOTOR_CHANNEL, MOTOR_GPIO, MOTOR_PIN);
17 21
 	IncrementalEncoder_conf(ENCODER_TIMER, ENCODER_GPIO, ENCODER_PIN);
18 22
 }
19 23
 
24
+int getSailAngle(int windAngle)
25
+{
26
+	if (windAngle > 180)
27
+		return 90 * (windAngle - 45) / 135;
28
+	else
29
+		return 360 - 90 * ((360 - windAngle) - 45) / 135;
30
+}
31
+
20 32
 void Sail_background()
21 33
 {
34
+	if (Sail_isEmergencyState)
35
+		return;
22 36
 	
37
+	const int windAngle = IncrementalEncoder_getAngle(ENCODER_TIMER);
38
+
39
+	if (windAngle < 45 || windAngle > 315) 
40
+			ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, 0);
41
+	else
42
+			ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, getSailAngle(windAngle));
23 43
 }
24 44
 
25
-void Sail_reset()
45
+void Sail_setEmergency(int state)
26 46
 {
27
-	
47
+	Sail_isEmergencyState = state;
48
+	if (Sail_isEmergencyState)
49
+		ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, RESET_ANGLE);
28 50
 }
29 51
 
30 52
 
31 53
 void Sail_start()
32 54
 {
33
-	Timer_start(MOTOR_TIMER);
34
-	Timer_start(ENCODER_TIMER);
55
+	Sail_isEmergencyState = 0;
56
+	ServoMotor_start(MOTOR_TIMER);
57
+	IncrementalEncoder_start(ENCODER_TIMER);
35 58
 }

+ 1
- 1
Src/Sail.h View File

@@ -23,7 +23,7 @@ void Sail_background(void);
23 23
 	* @param  None
24 24
   * @retval None
25 25
   */
26
-void Sail_reset(void);
26
+void Sail_setEmergency(int state);
27 27
 
28 28
 /**
29 29
 	* @brief  Réinitialise la voile à sa position initiale

Loading…
Cancel
Save