#include #include #include #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 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; }