/*
EMBARCATECH
Autor: HIGO MELO
GitHub: higo-ricardo
Discord: @higoricardo
Criação: 31/01/2025
*/
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
/*
NÃO FUNCIONA NO WOWKI DEVE SER GRAVADO DIRETAMENTE NA PLACA
TRAVA O AMBIENTE DE SIMULAÇÃO PORQUE ELA SÓ SIMULA O core0*/
/*
Atribui nome "LED" a GPIO "CYW43_WL_GPIO_LED_PIN" que controla o LED ONBOARD
do módulo Wi-Fi
*/
#define LED CYW43_WL_GPIO_LED_PIN
/*
Callback do temporizador: alterna o estado do LED
*/
bool timer_callback(repeating_timer_t *rt) {
static bool led_state = false;
led_state = !led_state; // Inverte o estado
cyw43_arch_gpio_put(LED, led_state); // Atualiza o LED
return true; // Retorna true para manter a repetição
}
// Função que será executada pelo core1
void core1_main() {
// Configura o temporizador repetitivo para disparar a cada 1000 ms (1 segundo)
repeating_timer_t timer;
if (!add_repeating_timer_ms(1000, timer_callback, NULL, &timer)) {
printf("Falha ao configurar o temporizador no core1\n");
return;
}
// Loop infinito no core1, que também pode chamar cyw43_arch_poll()
// se necessário, para processar tarefas do driver Wi‑Fi.
while (true) {
cyw43_arch_poll(); // Processa eventos do driver Wi‑Fi, se necessário
sleep_ms(25); // Delay pequeno para reduzir a carga de CPU
}
}
int main() {
// Inicializa a comunicação serial
stdio_init_all();
/*
Sem a inicialização do driver "cyw43_arch_init()" do módulo Wi-fi,
a mudança de estado do LED ONBOARD do mesmo pode ser feita pelo core0
da placa Pi Pico RP2040
*/
//cyw43_arch_init(); //ESTE DRIVER DEVE FICAR DESABILITADO
// Tratamento de erro
if (cyw43_arch_init()) {
printf("Erro Fatal: desabilite o driver do módulo Wi‑Fi\n");
return -1;
}
// Define o estado inicial do LED ONBOARD como desligado
cyw43_arch_gpio_put(LED, false);
// Passa o controle do LED e tarefas associadas ao core1 por meio da função core1_main
multicore_launch_core1(core1_main);
while (true) {
/*O core0 é paralisado peridiocamente pelo método "sleep_ms" para reduzir o consumo
de energia.
Está livre para realizar outtras tarefas*/
sleep_ms(1000); // Reduz o uso do MCU
}
//interrompe o uso do driver Wi‑Fi
cyw43_arch_deinit();
return 0;
}