led_couleur.c
Animación de cinta con los tres LED de usuario: led0, led1 y led2 se encienden uno a uno. En el MDK es el ciclo rojo/verde/azul del LED RGB; en el DK son tres de los cuatro LED en P0.13 a P0.16.
Hardware
Una placa nRF52833-DK (Nordic, SoC nRF52833 Cortex-M4F, BLE 5) alimentada por USB: 4 LED en P0.13-P0.16 (activos a nivel bajo) y 4 botones en P0.11, P0.12, P0.24, P0.25 (activos a bajo, pull-up interno a activar). Solo la placa. En el MDK, verifica que el BSP exponga los tres colores como led0/led1/led2 (caso del BSP MakerDiary).
Cableado
Sin cableado, LED embarcados. Para un LED externo: ánodo por 330 Ω al pin del conector, cátodo a GND y overlay de devicetree.
Funcionamiento
Un bucle for recorre el array de specs GPIO: set 1, pausa de 150 ms, set 0. Los flags active-low del BSP los aplica gpio_pin_set_dt automáticamente.
Ejecución
Proyecto Zephyr: west build -b nrf52833dk/nrf52833 y luego west flash (J-Link embarcado); consola serie 115200 en el conector USB UART.
Variantes
Solapar los LED para un fundido, añadir led3 en el DK para un desplazamiento de cuatro, o pilotar color RGB con tres canales PWM.
led_couleur.c
/* Cycle sur led0/led1/led2 : RVB du MDK, trois des quatre LED du DK.
* Sur le DK, LEDs P0.13/P0.14/P0.15 (aliases led0/led1/led2). */
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
static const struct gpio_dt_spec leds[3] = {
GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios),
GPIO_DT_SPEC_GET(DT_ALIAS(led1), gpios),
GPIO_DT_SPEC_GET(DT_ALIAS(led2), gpios),
};
int main(void)
{
for (int i = 0; i < 3; i++) {
if (!gpio_is_ready_dt(&leds[i])) {
printk("LED %d absente\n", i);
return 1;
}
gpio_pin_configure_dt(&leds[i], GPIO_OUTPUT_INACTIVE);
}
while (1) {
for (int i = 0; i < 3; i++) {
gpio_pin_set_dt(&leds[i], 1); /* une à la fois */
k_msleep(150);
gpio_pin_set_dt(&leds[i], 0);
}
}
return 0;
}