AdaptiveBrightness/AdaptiveBrightnessFirmware/Src/main.cpp
2020-07-03 18:34:39 +02:00

72 lines
1.9 KiB
C++

#include <array>
#include <cstdint>
#include <cstdio>
#include "init.h"
#include "light_sensors.hpp"
#include "terminal.hpp"
#include "uart.hpp"
using serial_t = uart::Vcp<>;
static volatile bool g_error = false;
extern "C" void Error_Handler(void)
{
g_error = true;
}
static inline void initializeHardware()
{
serial_t serial;
do {
g_error = false;
init();
serial.init();
if(g_error)
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
} while(g_error);
}
int main()
{
initializeHardware();
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
serial_t serial;
LightSensors lightSensors;
while(true) {
const auto ldrValues = lightSensors.getValues();
std::array<char, 32> printBuffer;
for(uint8_t i = 0; i < ldrValues.size(); ++i) {
const auto ldrID = i + 1;
const auto percentage = ldrValues[i] * 100 / 0xFFF;
const auto bufLen = std::sprintf(printBuffer.data(), "LDR%d: %04hu - %03d%%\r\n%s", ldrID, ldrValues[i], percentage, (i == 2) ? "\r\n" : "");
if(bufLen > 0) {
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_RESET);
serial.txString(printBuffer.data());
serial.flushTx();
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
}
}
HAL_Delay(1000);
}
return 0;
}