led_couleur.c
Animation de type ruban sur les trois LED utilisateur : led0, led1, led2 s’allument une par une. Sur le MDK c’est le cycle rouge/vert/bleu de la LED RGB ; sur le DK ce sont trois des quatre LEDs P0.13 à P0.16.
Matériel requis
Une carte nRF52833-DK (Nordic, SoC nRF52833 Cortex-M4F, BLE 5) alimentée par USB : 4 LEDs sur P0.13-P0.16 (actives au niveau bas) et 4 boutons sur P0.11, P0.12, P0.24, P0.25 (actifs bas, pull-up interne à activer). La carte seule. Sur le MDK, vérifier que le BSP expose bien les trois couleurs sous led0/led1/led2 (cas du BSP MakerDiary).
Câblage
Aucun câblage, LEDs embarquées. Pour une LED externe : anode via 330 Ω vers la broche du connecteur, cathode sur GND, et overlay devicetree.
Fonctionnement
Une boucle for parcourt le tableau de specs GPIO : set 1, pause 150 ms, set 0. Les flags active-low du BSP sont appliqués automatiquement par gpio_pin_set_dt.
Exécution
Projet Zephyr : west build -b nrf52833dk/nrf52833 puis west flash (J-Link embarqué) ; console série 115200 sur le connecteur USB UART.
Variantes
Chevaucher les LED pour un fondu, ajouter led3 sur le DK pour un défilement à quatre, ou piloter la couleur en RVB avec trois canaux 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;
}