#include <stdio.h>
#include "pico/stdlib.h"
#define sm_Amenos 14
#define sm_Amais 13
#define sm_Bmais 12
#define sm_Bmenos 11
#define btn1 16 // botão de incremento
#define btn2 17 // botão de decremento
uint8_t sm_pin [4] = {sm_Amenos, sm_Amais, sm_Bmenos, sm_Bmais};
bool sm_monofasico[4][4] = {{1, 0, 0, 0}, {0, 0, 1, 0}, {0, 1, 0, 0}, {0, 0, 0, 1}};
int main() {
stdio_init_all();
for (uint8_t i = 0; i < 4; i++) {
gpio_init(sm_pin[i]);
gpio_set_dir(sm_pin[i], GPIO_OUT);
gpio_put(sm_pin[i], 0);
}
// Inicializa botões como entrada com pull-up
gpio_init(btn1);
gpio_set_dir(btn1, GPIO_IN);
gpio_pull_up(btn1);
gpio_init(btn2);
gpio_set_dir(btn2, GPIO_IN);
gpio_pull_up(btn2);
int passo_atual = 0;
bool last_btn1 = 1;
bool last_btn2 = 1;
while (true) {
bool estado_btn1 = gpio_get(btn1);
bool estado_btn2 = gpio_get(btn2);
// --- DETECTA CLIQUE NO BTN1 ---
if (last_btn1 == 1 && estado_btn1 == 0) {
passo_atual++;
if (passo_atual > 3) passo_atual = 0;
for (int i = 0; i < 4; i++)
gpio_put(sm_pin[i], sm_monofasico[passo_atual][i]);
sleep_ms(10);
sleep_ms(200);
}
// --- DETECTA CLIQUE NO BTN2 ---
if (last_btn2 == 1 && estado_btn2 == 0) {
passo_atual--;
if (passo_atual < 0) passo_atual = 3;
for (int i = 0; i < 4; i++)
gpio_put(sm_pin[i], sm_monofasico[passo_atual][i]);
sleep_ms(10);
sleep_ms(200);
}
// Atualiza histórico de estado
last_btn1 = estado_btn1;
last_btn2 = estado_btn2;
sleep_ms(20); // pequeno delay de leitura
}
}