Utilise le ruban comme indicateur de vitesse du robot :
- Arrêté : toutes les LEDs éteintes
- Lent : 1 LED verte
- Moyen : 2 LEDs jaunes
- Rapide : 4 LEDs rouges
Solution :
#include <stdio.h>
#include <stdint.h>
/* Stub for playground simulation */
#define NUM_LEDS 4
struct led_rgb { uint8_t r; uint8_t g; uint8_t b; };
static struct led_rgb pixels[NUM_LEDS];
static void *strip = NULL;
static void led_strip_update_rgb(void *dev, struct led_rgb *px, int n)
{
(void)dev;
printf("LED strip update (%d LEDs):\n", n);
for (int i = 0; i < n; i++) {
printf(" LED %d: r=%u g=%u b=%u\n", i, px[i].r, px[i].g, px[i].b);
}
}
void eteindre_tout(void)
{
for (int i = 0; i < NUM_LEDS; i++) {
pixels[i].r = 0;
pixels[i].g = 0;
pixels[i].b = 0;
}
}
void indicateur_vitesse(int vitesse)
{
eteindre_tout();
if (vitesse == 0) {
/* Arrete: tout eteint */
} else if (vitesse < 50) {
/* Lent: 1 LED verte */
pixels[0].g = 255;
} else if (vitesse < 150) {
/* Moyen: 2 LEDs jaunes */
for (int i = 0; i < 2; i++) {
pixels[i].r = 255;
pixels[i].g = 128;
}
} else {
/* Rapide: 4 LEDs rouges */
for (int i = 0; i < NUM_LEDS; i++) {
pixels[i].r = 255;
}
}
led_strip_update_rgb(strip, pixels, NUM_LEDS);
}
int main(void)
{
printf("--- Arrete (v=0) ---\n");
indicateur_vitesse(0);
printf("--- Lent (v=30) ---\n");
indicateur_vitesse(30);
printf("--- Moyen (v=100) ---\n");
indicateur_vitesse(100);
printf("--- Rapide (v=200) ---\n");
indicateur_vitesse(200);
return 0;
}
Solution copiée dans l'éditeur.