57 lines
1.5 KiB
C
57 lines
1.5 KiB
C
#include "Display.h"
|
|
#include "Voltage.h"
|
|
#include "RFEmitter.h"
|
|
#include "Sail.h"
|
|
#include "stdio.h"
|
|
#include "string.h"
|
|
|
|
// Composants utilisés par l'emetteur
|
|
USART_TypeDef * EMITTER_USART = USART1;
|
|
GPIO_TypeDef * EMITTER_GPIO = GPIOA;
|
|
const int EMITTER_PIN = LL_GPIO_PIN_11;
|
|
|
|
// Composants utilisés par la batterie
|
|
ADC_TypeDef * VOLTAGE_ADC = ADC2;
|
|
const int VOLTAGE_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, EMITTER_GPIO, EMITTER_PIN);
|
|
}
|
|
|
|
void Display_start()
|
|
{
|
|
Voltage_start(VOLTAGE_ADC);
|
|
RFEmitter_start(EMITTER_USART);
|
|
}
|
|
|
|
|
|
void Display_background(int secCounter)
|
|
{
|
|
static int previousEmergencyState = 0;
|
|
static int prevSendSec = 0;
|
|
|
|
const int emergency = Sail_getEmergencyState();
|
|
|
|
if (secCounter - prevSendSec == 3 || (emergency && !previousEmergencyState)) {
|
|
prevSendSec = secCounter;
|
|
|
|
const float voltage = Voltage_getVoltage(VOLTAGE_ADC, VOLTAGE_CHANNEL);
|
|
const int sailAngle = Sail_getSailAngle();
|
|
const int relativeAngle = sailAngle >= 180 ? 360 - sailAngle : sailAngle;
|
|
const int sailPercent = (90 - relativeAngle) * 100 / 90;
|
|
|
|
char displayStr[100];
|
|
|
|
sprintf(displayStr, "Bordage actuel = %d%%\nTension de la batterie = %fV\n", sailPercent, voltage);
|
|
if (emergency)
|
|
sprintf(displayStr, "Limite de roulis atteinte !\n%s", displayStr);
|
|
|
|
RFEmitter_send(EMITTER_USART, displayStr, strlen(displayStr), EMITTER_GPIO, EMITTER_PIN);
|
|
}
|
|
|
|
previousEmergencyState = emergency;
|
|
}
|