#include "stm32c0xx_hal.h"
#define LED_1_Pin GPIO_PIN_4
#define LED_1_GPIO_Port GPIOA
#define LED_2_Pin GPIO_PIN_5
#define LED_2_GPIO_Port GPIOA
#define LED_3_Pin GPIO_PIN_6
#define LED_3_GPIO_Port GPIOA
#define LED_4_Pin GPIO_PIN_7
#define LED_4_GPIO_Port GPIOA
#define LED_5_Pin GPIO_PIN_0
#define LED_5_GPIO_Port GPIOB
#define LEARN_Pin GPIO_PIN_1
#define LEARN_GPIO_Port GPIOB
GPIO_TypeDef* ledPorts[] = {LED_1_GPIO_Port, LED_2_GPIO_Port, LED_3_GPIO_Port, LED_4_GPIO_Port, LED_5_GPIO_Port};
uint16_t ledPins[] = {LED_1_Pin, LED_2_Pin, LED_3_Pin, LED_4_Pin, LED_5_Pin};
int totalLEDs = 5;
int baseDelayTime = 100;
int delayTime = 100;
int fastDelayTime = 20;
bool btnLearnPressed = false, btnLearnWaitRelease = false;
volatile bool isr = false;
/* ---------------- Helper Functions ---------------- */
void delay_ms(volatile uint32_t ms) {
for (volatile uint32_t j = 0; j < ms * 800; j++);
}
void cb_learnBtn(void)
{
if( isr ) return;
isr = true;
for (int i = 0; i < totalLEDs; i++) {
HAL_GPIO_WritePin(ledPorts[i], ledPins[i], GPIO_PIN_SET);
delay_ms(250);
HAL_GPIO_WritePin(ledPorts[i], ledPins[i], GPIO_PIN_RESET);
delay_ms(250);
}
delay_ms(250);
isr = false;
}
/* ---------------- Arduino Style ---------------- */
void setup() {
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
// LED pins
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
for (int i = 0; i < totalLEDs; i++) {
GPIO_InitStruct.Pin = ledPins[i];
HAL_GPIO_Init(ledPorts[i], &GPIO_InitStruct);
}
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Pin = LEARN_Pin;
HAL_GPIO_Init(LEARN_GPIO_Port, &GPIO_InitStruct);
pinMode(33, INPUT_PULLUP); // Configura o pino como entrada com pull-up
attachInterrupt(digitalPinToInterrupt(33), cb_learnBtn, FALLING);
}
void loop() {
/*
if( HAL_GPIO_ReadPin(LEARN_GPIO_Port, LEARN_Pin) == GPIO_PIN_RESET )
{
cb_learnBtn();
}
*/
}