led_couleur.c

nRF52833-DK (id boards.json : nrf52833-dk) · Fichier : led_couleur.c · Langage : C · Usage : Faire tourner les trois LED (RVB ou 3 LED)

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;
}

← Retour à la fiche