Merge branch 'YA'
This commit is contained in:
commit
c5d3c98bf7
12 changed files with 240 additions and 55 deletions
|
@ -345,7 +345,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGDARM</Key>
|
<Key>DLGDARM</Key>
|
||||||
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=2156,213,2522,450,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=2124,217,2535,660,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=2076,105,2660,897,0)(133=2592,151,3176,943,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=1554,213,1920,450,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=1509,217,1920,660,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=1336,105,1920,897,0)(133=1148,116,1732,908,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=915,87,1508,879,0)(151=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -382,9 +382,9 @@
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>65</LineNumber>
|
<LineNumber>84</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134223216</Address>
|
<Address>134226236</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
|
@ -393,23 +393,7 @@
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
<Filename>../Src/main.c</Filename>
|
<Filename>../Src/main.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\NUCLEO_F103RB\../Src/main.c\65</Expression>
|
<Expression>\\NUCLEO_F103RB\../Src/main.c\84</Expression>
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>1</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>69</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>134223230</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
|
||||||
<Filename>../Src/main.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression>\\NUCLEO_F103RB\../Src/main.c\69</Expression>
|
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
|
@ -418,6 +402,21 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>counter,0x10</ItemText>
|
<ItemText>counter,0x10</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>1</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>adcVolt1</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>2</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>adcVolt2</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>3</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>angle,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
|
@ -465,7 +464,7 @@
|
||||||
<Wi>
|
<Wi>
|
||||||
<IntNumber>0</IntNumber>
|
<IntNumber>0</IntNumber>
|
||||||
<FirstString>((PORTB & 0x00000100) >> 8 & 0x100) >> 8</FirstString>
|
<FirstString>((PORTB & 0x00000100) >> 8 & 0x100) >> 8</FirstString>
|
||||||
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254422026203078303030303031303029203E3E2038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F1400000000000000000000000000000000000000AE110008</SecondString>
|
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254422026203078303030303031303029203E3E2038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F1300000000000000000000000000000000000000AE110008</SecondString>
|
||||||
</Wi>
|
</Wi>
|
||||||
</LogicAnalyzers>
|
</LogicAnalyzers>
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
|
@ -772,6 +771,30 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>4</GroupNumber>
|
||||||
|
<FileNumber>23</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\LLDrivers\src\stm32f1xx_ll_usart.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>stm32f1xx_ll_usart.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>4</GroupNumber>
|
||||||
|
<FileNumber>24</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\LLDrivers\src\stm32f1xx_ll_adc.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>stm32f1xx_ll_adc.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -782,7 +805,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>23</FileNumber>
|
<FileNumber>25</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -802,7 +825,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>24</FileNumber>
|
<FileNumber>26</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -822,7 +845,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>25</FileNumber>
|
<FileNumber>27</FileNumber>
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
|
|
@ -508,6 +508,16 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\LLDrivers\src\stm32f1xx_ll_gpio.c</FilePath>
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_gpio.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_usart.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_usart.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_adc.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_adc.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -1047,6 +1057,16 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\LLDrivers\src\stm32f1xx_ll_gpio.c</FilePath>
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_gpio.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_usart.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_usart.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_adc.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_adc.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "ADC.h"
|
#include "ADC.h"
|
||||||
#include "stm32f1xx_ll_bus.h" // Pour horloge
|
#include "stm32f1xx_ll_bus.h" // Pour horloge
|
||||||
|
|
||||||
void ADC_conf(ADC_TypeDef *adc, uint32_t voie)
|
void ADC_conf(ADC_TypeDef *adc)
|
||||||
{
|
{
|
||||||
if (adc == ADC1) {
|
if (adc == ADC1) {
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||||
|
@ -13,10 +13,9 @@ void ADC_conf(ADC_TypeDef *adc, uint32_t voie)
|
||||||
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
|
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
|
||||||
|
|
||||||
// Fixe le nombre de conversion à 1
|
// Fixe le nombre de conversion à 1
|
||||||
adc->SQR1&= ADC_SQR1_L;
|
adc->SQR1 &= ADC_SQR1_L;
|
||||||
|
|
||||||
|
|
||||||
// Indique la voie a convertir
|
|
||||||
adc->SQR3|= voie;
|
|
||||||
|
|
||||||
// Calibration
|
// Calibration
|
||||||
adc->CR2 |= ADC_CR2_CAL_Msk;
|
adc->CR2 |= ADC_CR2_CAL_Msk;
|
||||||
|
@ -30,8 +29,10 @@ void ADC_start(ADC_TypeDef *adc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16_t ADC_readRaw(ADC_TypeDef *adc)
|
uint16_t ADC_readRaw(ADC_TypeDef *adc, int channel)
|
||||||
{
|
{
|
||||||
|
// Indique la voie a convertir
|
||||||
|
adc->SQR3 = channel;
|
||||||
// Lancement de la conversion
|
// Lancement de la conversion
|
||||||
adc->CR2 |= ADC_CR2_ADON;
|
adc->CR2 |= ADC_CR2_ADON;
|
||||||
while(!(ADC1->SR & ADC_SR_EOC)) {}
|
while(!(ADC1->SR & ADC_SR_EOC)) {}
|
||||||
|
@ -40,13 +41,13 @@ uint16_t ADC_readRaw(ADC_TypeDef *adc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double ADC_convertToVolt(uint16_t value)
|
float ADC_convertToVolt(uint16_t value)
|
||||||
{
|
{
|
||||||
return ((double) value) / 4095.0 * 3.3;
|
return ((double) value) / 4095.0 * 3.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double ADC_readVolt(ADC_TypeDef *adc)
|
float ADC_readVolt(ADC_TypeDef *adc, int channel)
|
||||||
{
|
{
|
||||||
return ADC_convertToVolt(ADC_readRaw(adc));
|
return ADC_convertToVolt(ADC_readRaw(adc, channel));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
|
|
||||||
#include "stm32f1xx_ll_adc.h"
|
#include "stm32f1xx_ll_adc.h"
|
||||||
|
|
||||||
void ADC_conf(ADC_TypeDef *adc, uint32_t voie);
|
void ADC_conf(ADC_TypeDef *adc);
|
||||||
void ADC_start(ADC_TypeDef *adc);
|
void ADC_start(ADC_TypeDef *adc);
|
||||||
|
|
||||||
uint16_t ADC_readRaw(ADC_TypeDef *adc);
|
uint16_t ADC_readRaw(ADC_TypeDef *adc, int channel);
|
||||||
double ADC_readVolt(ADC_TypeDef *adc);
|
float ADC_readVolt(ADC_TypeDef *adc, int channel);
|
||||||
|
|
||||||
double ADC_convertToVolt(uint16_t value);
|
float ADC_convertToVolt(uint16_t value);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1 +1,46 @@
|
||||||
#include "Accelerometer.h"
|
#include "Accelerometer.h"
|
||||||
|
#include "ADC.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
|
||||||
|
// g-sel1 et g-sel1 à 0 => range de 2.5g
|
||||||
|
// Donc sensibilité de +- 480 mv/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;
|
||||||
|
|
||||||
|
void Accelerometer_conf(ADC_TypeDef *adc, GPIO_TypeDef * gpio, int pinx, int piny)
|
||||||
|
{
|
||||||
|
ADC_conf(adc);
|
||||||
|
GPIO_conf(gpio, pinx, LL_GPIO_MODE_ANALOG, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
|
||||||
|
GPIO_conf(gpio, piny, LL_GPIO_MODE_ANALOG, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Accelerometer_start(ADC_TypeDef *adc)
|
||||||
|
{
|
||||||
|
ADC_start(adc);
|
||||||
|
}
|
||||||
|
|
||||||
|
float voltsToG(float volts)
|
||||||
|
{
|
||||||
|
float readG = (volts - ZERO_G) / SENSITIVITY;
|
||||||
|
if (readG > 1.0)
|
||||||
|
readG = 1.0;
|
||||||
|
else if (readG < -1.0)
|
||||||
|
readG = -1.0;
|
||||||
|
return readG;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Accelerometer_getAngle(ADC_TypeDef *adc, int channel)
|
||||||
|
{
|
||||||
|
const float readG = voltsToG(ADC_readVolt(adc, channel));
|
||||||
|
|
||||||
|
float angleRad = asin(readG);
|
||||||
|
int angleDeg = angleRad * (180/M_PI);
|
||||||
|
|
||||||
|
return angleDeg;
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,13 @@
|
||||||
#ifndef ACCELEROMETER_H
|
#ifndef ACCELEROMETER_H
|
||||||
#define ACCELEROMETER_H
|
#define ACCELEROMETER_H
|
||||||
|
|
||||||
|
#include "GPIO.h"
|
||||||
|
#include "stm32f1xx_ll_adc.h"
|
||||||
|
|
||||||
|
void Accelerometer_conf(ADC_TypeDef *adc, GPIO_TypeDef * gpio, int pinx, int piny);
|
||||||
|
|
||||||
|
void Accelerometer_start(ADC_TypeDef *adc);
|
||||||
|
|
||||||
|
int Accelerometer_getAngle(ADC_TypeDef *adc, int channel);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
void ServoMotor_conf(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin)
|
void ServoMotor_conf(TIM_TypeDef * timer, int channel, GPIO_TypeDef * gpio, int pin)
|
||||||
{
|
{
|
||||||
Timer_pwmo_conf(timer, channel, SERVO_MOTO_FREQ, 0.5);
|
Timer_pwmo_conf(timer, channel, SERVO_MOTO_FREQ, 0);
|
||||||
GPIO_conf(gpio, pin, LL_GPIO_MODE_ALTERNATE, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
|
GPIO_conf(gpio, pin, LL_GPIO_MODE_ALTERNATE, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
41
Src/Roll.c
41
Src/Roll.c
|
@ -1 +1,42 @@
|
||||||
#include "Roll.h"
|
#include "Roll.h"
|
||||||
|
#include "Sail.h"
|
||||||
|
#include "Accelerometer.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
|
ADC_TypeDef * ROLL_ADC = ADC1;
|
||||||
|
const int ROLL_X_CHANNEL = LL_ADC_CHANNEL_11;
|
||||||
|
const int ROLL_Y_CHANNEL = LL_ADC_CHANNEL_10;
|
||||||
|
GPIO_TypeDef * ROLL_GPIO = GPIOC;
|
||||||
|
const int ROLL_X_PIN = LL_GPIO_PIN_0;
|
||||||
|
const int ROLL_Y_PIN = LL_GPIO_PIN_1;
|
||||||
|
|
||||||
|
const int TRIGGER_ANGLE = 40;
|
||||||
|
|
||||||
|
int Roll_isEmergencyState = 0;
|
||||||
|
|
||||||
|
void Roll_conf(void)
|
||||||
|
{
|
||||||
|
Accelerometer_conf(ROLL_ADC, ROLL_GPIO, ROLL_X_PIN, ROLL_Y_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Roll_start(void)
|
||||||
|
{
|
||||||
|
Accelerometer_start(ROLL_ADC);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Roll_getEmergencyState(void)
|
||||||
|
{
|
||||||
|
return Roll_isEmergencyState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Roll_background(void)
|
||||||
|
{
|
||||||
|
const int xAngle = Accelerometer_getAngle(ROLL_ADC, ROLL_X_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);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
#ifndef ROLL_H
|
#ifndef ROLL_H
|
||||||
#define ROLL_H
|
#define ROLL_H
|
||||||
|
|
||||||
|
void Roll_conf(void);
|
||||||
|
|
||||||
|
void Roll_start(void);
|
||||||
|
|
||||||
|
int Roll_getEmergencyState(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
|
||||||
|
|
37
Src/main.c
37
Src/main.c
|
@ -21,36 +21,55 @@
|
||||||
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
|
||||||
|
|
||||||
#include "Sail.h"
|
#include "Sail.h"
|
||||||
|
#include "Roll.h"
|
||||||
|
|
||||||
#include "Scheduler.h"
|
#include "Scheduler.h"
|
||||||
#include "ADC.h"
|
#include "ADC.h"
|
||||||
#include "GPIO.h"
|
#include "GPIO.h"
|
||||||
|
#include "Accelerometer.h"
|
||||||
|
|
||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
|
||||||
int counter = 1;
|
int counter = 1;
|
||||||
int adcRaw = 0;
|
int adcRaw1 = 0;
|
||||||
double adcVolt = 0.0;
|
int adcRaw2 = 0;
|
||||||
|
double adcVolt1 = 0.0;
|
||||||
|
double adcVolt2 = 0.0;
|
||||||
|
|
||||||
|
int angle = 0;
|
||||||
|
|
||||||
void backgroundTask()
|
void backgroundTask()
|
||||||
{
|
{
|
||||||
counter++;
|
counter++;
|
||||||
Sail_background();
|
Sail_background();
|
||||||
adcRaw = ADC_readRaw(ADC1);
|
Roll_background();
|
||||||
adcVolt = ADC_convertToVolt(adcRaw);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
angle = Accelerometer_getAngle(ADC1, LL_ADC_CHANNEL_11);
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
adcRaw1 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_11);
|
||||||
|
adcRaw2 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_10);
|
||||||
|
adcVolt1 = ADC_convertToVolt(adcRaw1);
|
||||||
|
adcVolt2 = ADC_convertToVolt(adcRaw2);
|
||||||
|
}
|
||||||
|
|
||||||
void configurePeripherals()
|
void configurePeripherals()
|
||||||
{
|
{
|
||||||
Sail_conf();
|
Sail_conf();
|
||||||
ADC_conf(ADC1, 12);
|
Roll_conf();
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
ADC_conf(ADC1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void startPeripherals()
|
void startPeripherals()
|
||||||
{
|
{
|
||||||
Sail_start();
|
Sail_start();
|
||||||
|
Roll_start();
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
ADC_start(ADC1);
|
ADC_start(ADC1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,11 +84,6 @@ int main(void)
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
/* Add your application code here */
|
/* Add your application code here */
|
||||||
// Configuration chronomètre
|
|
||||||
// Chrono_Conf(TIM3);
|
|
||||||
// Lancement chronomètre
|
|
||||||
// Chrono_Start();
|
|
||||||
// time = Chrono_Read();
|
|
||||||
configurePeripherals();
|
configurePeripherals();
|
||||||
startPeripherals();
|
startPeripherals();
|
||||||
|
|
||||||
|
@ -78,6 +92,7 @@ int main(void)
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
// Send to display here
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue