#include #include #include #include "adc.h" #include "init.h" #include "terminal.hpp" #include "uart.hpp" #include "utils.hpp" std::array sampleLightSensors() { std::array adcValues; HAL_ADC_Start(&hadc); util::for_constexpr( [&adcValues](const auto& idx) { constexpr auto i = idx.value; HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY); adcValues[i] = HAL_ADC_GetValue(&hadc); }, std::make_index_sequence{}); HAL_ADC_Stop(&hadc); return adcValues; } int main() { uart::Vcp<> serial; init(); serial.init(); HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET); 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_RESET); 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); uint8_t data = 0; while(true) { if(serial.rxByte(data)) { serial.txByte(data); } const auto ldrValues = sampleLightSensors(); HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_RESET); 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) { serial.txString(printBuffer.data()); serial.flushTx(); } } HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET); HAL_Delay(1000); } return 0; }