projet_voilier/Src/Display.c
2020-11-14 18:00:25 +01:00

55 lines
1.5 KiB
C

#include "Display.h"
#include "Voltage.h"
#include "RFEmitter.h"
#include "Sail.h"
#include "stdio.h"
#include "string.h"
USART_TypeDef * EMITTER_USART = USART1;
GPIO_TypeDef * EMITTER_GPIO = GPIOA;
const int EMITTER_PIN = LL_GPIO_PIN_11;
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;
}