make code more consistent

This commit is contained in:
Arnaud Vergnet 2020-11-13 08:49:00 +01:00
parent 61b90609c2
commit 89867cd01e
17 changed files with 156 additions and 105 deletions

View file

@ -1,6 +1,9 @@
#include "ADC.h" #include "ADC.h"
#include "stm32f1xx_ll_bus.h" // Pour horloge #include "stm32f1xx_ll_bus.h" // Pour horloge
const float MAX_VOLTS = 3.3;
const float MAX_CONVERTED_VALUE = 4095.0;
void ADC_conf(ADC_TypeDef *adc) void ADC_conf(ADC_TypeDef *adc)
{ {
if (adc == ADC1) { if (adc == ADC1) {
@ -43,7 +46,7 @@ uint16_t ADC_readRaw(ADC_TypeDef *adc, int channel)
float ADC_convertToVolt(uint16_t value) float ADC_convertToVolt(uint16_t value)
{ {
return ((double) value) / 4095.0 * 3.3; return ((double) value) / MAX_CONVERTED_VALUE * MAX_VOLTS;
} }

View file

@ -1,8 +1,8 @@
#include "GPIO.h" #include "GPIO.h"
#include "stm32f1xx_ll_gpio.h" #include "stm32f1xx_ll_gpio.h"
void GPIO_conf(GPIO_TypeDef * GPIOx, uint32_t PINx, uint32_t mode, uint32_t outputType, uint32_t pullMode){ void GPIO_conf(GPIO_TypeDef * GPIOx, uint32_t PINx, uint32_t mode, uint32_t outputType, uint32_t pullMode)
{
LL_GPIO_InitTypeDef init; LL_GPIO_InitTypeDef init;
//Activation de l'horloge //Activation de l'horloge
@ -21,15 +21,17 @@ void GPIO_conf(GPIO_TypeDef * GPIOx, uint32_t PINx, uint32_t mode, uint32_t outp
LL_GPIO_Init(GPIOx, &init); LL_GPIO_Init(GPIOx, &init);
} }
void GPIO_setPin(GPIO_TypeDef * GPIOx, uint32_t PINx, int output){ void GPIO_setPin(GPIO_TypeDef * GPIOx, uint32_t PINx, int output)
{
if (output) LL_GPIO_SetOutputPin(GPIOx, PINx); if (output) {
else LL_GPIO_ResetOutputPin(GPIOx,PINx); LL_GPIO_SetOutputPin(GPIOx, PINx);
} else {
LL_GPIO_ResetOutputPin(GPIOx,PINx);
}
}; };
int GPIO_readPin(GPIO_TypeDef * GPIOx, uint32_t PINx){ int GPIO_readPin(GPIO_TypeDef * GPIOx, uint32_t PINx)
{
return LL_GPIO_IsOutputPinSet(GPIOx, PINx); return LL_GPIO_IsOutputPinSet(GPIOx, PINx);
} }

View file

@ -3,7 +3,8 @@
#include "stm32f1xx_ll_bus.h" // Pour horloge #include "stm32f1xx_ll_bus.h" // Pour horloge
void Usart_conf(USART_TypeDef *USARTx) { void Usart_conf(USART_TypeDef *USARTx)
{
int txPin; int txPin;
GPIO_TypeDef *usartGpio; GPIO_TypeDef *usartGpio;
@ -36,18 +37,21 @@ void Usart_conf(USART_TypeDef *USARTx) {
void Usart_enable(USART_TypeDef *USARTx) { void Usart_enable(USART_TypeDef *USARTx)
{
LL_USART_Enable(USARTx); LL_USART_Enable(USARTx);
} }
void sendChar(USART_TypeDef *USARTx, char c) { void sendChar(USART_TypeDef *USARTx, char c)
{
LL_USART_TransmitData8(USARTx, c); LL_USART_TransmitData8(USARTx, c);
while (!LL_USART_IsActiveFlag_TXE(USARTx)) {} while (!LL_USART_IsActiveFlag_TXE(USARTx)) {}
} }
void Usart_send(USART_TypeDef *USARTx, char *msg, int length) { void Usart_send(USART_TypeDef *USARTx, char *msg, int length)
{
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
sendChar(USARTx, msg[i]); sendChar(USARTx, msg[i]);
} }

View file

@ -9,8 +9,6 @@
const float ZERO_G = 1.65; // 0 g const float ZERO_G = 1.65; // 0 g
//const float MAX_G = 2.13; // 1 g
//const float MIN_G = 1.17; // -1 g
const float SENSITIVITY = 0.48; const float SENSITIVITY = 0.48;
void Accelerometer_conf(ADC_TypeDef *adc, GPIO_TypeDef * gpio, int pinx, int piny) void Accelerometer_conf(ADC_TypeDef *adc, GPIO_TypeDef * gpio, int pinx, int piny)

View file

@ -1,32 +1,28 @@
#include "DCMotor.h" #include "DCMotor.h"
#include "math.h"
void DCMotor_conf() { void DCMotor_conf(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin)
{
//On règle la vitesse en valeur absolue, ici à 0 //On règle la vitesse en valeur absolue, ici à 0
Timer_pwmo_conf(TIM2, LL_TIM_CHANNEL_CH2, 50, 0); Timer_pwmo_conf(timer, channel, 50, 0);
//On règle le sens du moteur, ici sens direct (?) //On règle le sens du moteur, ici sens direct (?)
GPIO_conf(GPIOA, LL_GPIO_PIN_2, LL_GPIO_MODE_OUTPUT, LL_GPIO_OUTPUT_OPENDRAIN, LL_GPIO_PULL_DOWN); GPIO_conf(gpio, pin, LL_GPIO_MODE_OUTPUT, LL_GPIO_OUTPUT_OPENDRAIN, LL_GPIO_PULL_DOWN);
GPIO_setPin(GPIOA, LL_GPIO_PIN_2, 0); GPIO_setPin(gpio, pin, 0);
} }
void DCMotor_setSpeed(double speed) { void DCMotor_setSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin, float speed)
{
double speedAbs = (speed > 0.) ? speed : -speed; const int dir = (speed > 0.) ? 1 : 0;
int sens = (speed > 0.) ? 1 : 0;
Timer_pwmo_setDutyCycle(TIM2, LL_TIM_CHANNEL_CH2, speedAbs);
GPIO_setPin(GPIOA, LL_GPIO_PIN_2, sens);
Timer_pwmo_setDutyCycle(timer, channel, fabs(speed));
GPIO_setPin(gpio, pin, dir);
} }
double DCMotor_getSpeed(){ float DCMotor_getSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin)
{
double speedAbs = Timer_pwmo_getDutyCycle(TIM2, LL_TIM_CHANNEL_CH2); const float speedAbs = Timer_pwmo_getDutyCycle(timer, channel);
int sens = GPIO_readPin(GPIOA, LL_GPIO_PIN_2); const int dir = GPIO_readPin(gpio, pin);
double speed = (sens) ? speedAbs : -speedAbs;
return speed;
return dir ? speedAbs : -speedAbs;
} }

View file

@ -4,10 +4,10 @@
#include "GPIO.h" #include "GPIO.h"
#include "Timer.h" #include "Timer.h"
void DCMotor_conf(void); void DCMotor_conf(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin);
void DCMotor_setSpeed(double speed); void DCMotor_setSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin, float speed);
double DCMotor_getSpeed(void); float DCMotor_getSpeed(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin);
#endif #endif

View file

@ -1,18 +1,16 @@
#include "RFEmitter.h" #include "RFEmitter.h"
void RFEmitter_conf(USART_TypeDef * usart)
void RFEmitter_conf() { {
Usart_conf(usart);
//On configure l'USART
Usart_conf(USART1);
//On active l'USART
Usart_enable(USART1);
} }
void RFEmitter_send(char * message, int longueur) { void RFEmitter_start(USART_TypeDef * usart)
{
Usart_send(USART1, message, longueur); Usart_enable(usart);
}
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur)
{
Usart_send(usart, message, longueur);
} }

View file

@ -3,9 +3,11 @@
#include "USART.h" #include "USART.h"
void RFEmitter_conf(void); void RFEmitter_conf(USART_TypeDef * usart);
void RFEmitter_send(char * message, int longueur); void RFEmitter_start(USART_TypeDef * usart);
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur);
#endif #endif

View file

@ -1,17 +1,15 @@
#include "RFReceiver.h" #include "RFReceiver.h"
void RFReceiver_conf() { void RFReceiver_conf(TIM_TypeDef * timer, int channel)
{
PWMi_conf(timer, channel);
}
PWMi_conf(TIM4, 1); float RFReceiver_getData(TIM_TypeDef * timer)
{
} const int duty_cycle = PWMi_getDutyCycle(timer);
const int period = PWMi_getPeriod(timer);
double RFReceiver_getData(){ const float duree_impulsion = duty_cycle * period;
int duty_cycle = PWMi_getDutyCycle(TIM4);
int period = PWMi_getPeriod(TIM4);
double duree_impulsion = duty_cycle * period;
return (duree_impulsion -1) * 200 - 100; return (duree_impulsion -1) * 200 - 100;
} }

View file

@ -3,8 +3,8 @@
#include "Timer.h" #include "Timer.h"
void RFReceiver_conf(void); void RFReceiver_conf(TIM_TypeDef * timer, int channel);
double RFReceiver_getData(void); float RFReceiver_getData(TIM_TypeDef * timer);
#endif #endif

View file

@ -1,21 +1,21 @@
#include "Voltage.h" #include "Voltage.h"
void Voltage_conf() { void Voltage_conf(ADC_TypeDef * adc, GPIO_TypeDef * gpio, int pin)
{
//On configure le pin qui recevra le signal, ici PC2 //On configure le pin qui recevra le signal, ici PC2
GPIO_conf(GPIOC, LL_GPIO_PIN_2, LL_GPIO_MODE_ANALOG, 0, 0); GPIO_conf(gpio, pin, LL_GPIO_MODE_ANALOG, 0, 0);
//On configure l'ADC //On configure l'ADC
ADC_conf(ADC2, 12); ADC_conf(adc);
//On démarre l'ADC
ADC_start(ADC2);
} }
double Voltage_getVoltage() { void Voltage_start(ADC_TypeDef * adc)
{
return ADC_readVolt(ADC2); ADC_start(adc);
}
float Voltage_getVoltage(ADC_TypeDef * adc, int channel)
{
return ADC_readVolt(adc, channel);
} }

View file

@ -4,8 +4,10 @@
#include "ADC.h" #include "ADC.h"
#include "GPIO.h" #include "GPIO.h"
void Voltage_conf(void); void Voltage_conf(ADC_TypeDef * adc, GPIO_TypeDef * gpio, int pin);
double Voltage_getVoltage(void); void Voltage_start(ADC_TypeDef * adc);
float Voltage_getVoltage(ADC_TypeDef * adc, int channel);
#endif #endif

View file

@ -1 +1,27 @@
#include "Display.h" #include "Display.h"
#include "Voltage.h"
#include "RFEmitter.h"
USART_TypeDef * EMITTER_USART = USART1;
ADC_TypeDef * VOLTAGE_ADC = ADC2;
const int VOLTAGE_CHANNEL = LL_ADC_CHANNEL_12;
GPIO_TypeDef * VOLTAGE_GPIO = GPIOC;
const int VOLTAGE_PIN = LL_GPIO_PIN_2;
void Display_conf()
{
Voltage_conf(VOLTAGE_ADC, VOLTAGE_GPIO, VOLTAGE_PIN);
RFEmitter_conf(EMITTER_USART);
}
void Display_start()
{
Voltage_start(VOLTAGE_ADC);
RFEmitter_start(EMITTER_USART);
}
void Display_background()
{
float voltage = Voltage_getVoltage(ADC2, LL_ADC_CHANNEL_12);
}

View file

@ -1,4 +1,10 @@
#ifndef DISPLAY_H #ifndef DISPLAY_H
#define DISPLAY_H #define DISPLAY_H
void Display_conf(void);
void Display_start(void);
void Display_background(void);
#endif #endif

View file

@ -1,19 +1,31 @@
#include "Orientation.h" #include "Orientation.h"
#define SEUIL 30 #include "math.h"
void Orientation_conf() { #define THRESHOLD 30
DCMotor_conf(); TIM_TypeDef * RECEIVER_TIMER = TIM4;
RFReceiver_conf(); const int RECEIVER_CHANNEL = LL_TIM_CHANNEL_CH1;
TIM_TypeDef * DCMOTOR_TIMER = TIM2;
const int DCMOTOR_CHANNEL = LL_TIM_CHANNEL_CH2;
GPIO_TypeDef * DCMOTOR_GPIO = GPIOA;
const int DCMOTOR_PIN = LL_GPIO_PIN_2;
void Orientation_conf()
{
DCMotor_conf(DCMOTOR_TIMER, DCMOTOR_CHANNEL, DCMOTOR_GPIO, DCMOTOR_PIN);
RFReceiver_conf(RECEIVER_TIMER, LL_TIM_CHANNEL_CH1);
} }
void Orientation_background(){ void Orientation_background()
{
double speed = RFReceiver_getData(); const float speed = RFReceiver_getData(RECEIVER_TIMER);
//Si la vitesse (en valeur absolue) ne dépasse pas un certain seuil, on ne démarre pas le moteur //Si la vitesse (en valeur absolue) ne dépasse pas un certain seuil, on ne démarre pas le moteur
if (-SEUIL<speed && SEUIL>speed) DCMotor_setSpeed(0); if (THRESHOLD < fabs(speed)) {
else DCMotor_setSpeed(speed); DCMotor_setSpeed(DCMOTOR_TIMER, DCMOTOR_CHANNEL, DCMOTOR_GPIO, DCMOTOR_PIN, 0);
}
else {
DCMotor_setSpeed(DCMOTOR_TIMER, DCMOTOR_CHANNEL, DCMOTOR_GPIO, DCMOTOR_PIN, speed);
}
} }

View file

@ -21,6 +21,13 @@ void Sail_conf()
IncrementalEncoder_conf(ENCODER_TIMER, ENCODER_GPIO, ENCODER_PIN); IncrementalEncoder_conf(ENCODER_TIMER, ENCODER_GPIO, ENCODER_PIN);
} }
void Sail_start()
{
Sail_isEmergencyState = 0;
ServoMotor_start(MOTOR_TIMER);
IncrementalEncoder_start(ENCODER_TIMER);
}
int getSailAngle(int windAngle) int getSailAngle(int windAngle)
{ {
if (windAngle > 180) if (windAngle > 180)
@ -48,11 +55,3 @@ void Sail_setEmergency(int state)
if (Sail_isEmergencyState) if (Sail_isEmergencyState)
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, RESET_ANGLE); ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, RESET_ANGLE);
} }
void Sail_start()
{
Sail_isEmergencyState = 0;
ServoMotor_start(MOTOR_TIMER);
IncrementalEncoder_start(ENCODER_TIMER);
}

View file

@ -22,6 +22,8 @@
#include "Sail.h" #include "Sail.h"
#include "Roll.h" #include "Roll.h"
#include "Display.h"
#include "Orientation.h"
#include "Scheduler.h" #include "Scheduler.h"
#include "ADC.h" #include "ADC.h"
@ -45,10 +47,12 @@ void backgroundTask()
counter++; counter++;
Sail_background(); Sail_background();
Roll_background(); Roll_background();
Orientation_background();
angle = Accelerometer_getAngle(ADC1, LL_ADC_CHANNEL_11);
// DEBUG // DEBUG
angle = Accelerometer_getAngle(ADC1, LL_ADC_CHANNEL_11);
adcRaw1 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_11); adcRaw1 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_11);
adcRaw2 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_10); adcRaw2 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_10);
adcVolt1 = ADC_convertToVolt(adcRaw1); adcVolt1 = ADC_convertToVolt(adcRaw1);
@ -59,6 +63,7 @@ void configurePeripherals()
{ {
Sail_conf(); Sail_conf();
Roll_conf(); Roll_conf();
Orientation_conf();
// DEBUG // DEBUG
ADC_conf(ADC1); ADC_conf(ADC1);
@ -68,6 +73,7 @@ void startPeripherals()
{ {
Sail_start(); Sail_start();
Roll_start(); Roll_start();
Display_start();
// DEBUG // DEBUG
ADC_start(ADC1); ADC_start(ADC1);
@ -90,9 +96,8 @@ int main(void)
Scheduler_conf(backgroundTask); Scheduler_conf(backgroundTask);
Scheduler_start(); Scheduler_start();
while (1) while (1) {
{ Display_background();
// Send to display here
} }
} }