ruban-neopixel.ino

Arduino Portenta H7 · Archivo : ruban-neopixel.ino · Lenguaje : Arduino · Uso : Animer un ruban NeoPixel avec la bibliothèque Adafruit

Los WS2812 exigen microsegundos precisos: el core Mbed los genera limpiamente en la Portenta. Una cabeza cian girando sobre 16 LED sirve de primer banco mientras el M7 hace otra cosa.

Hardware

Un Arduino Portenta H7 (módulo ST STM32H747 doble núcleo Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 MB SDRAM, conector high-density), alimentado por USB-C o 5 V. 1 tira de 16 LED NeoPixel + alimentación externa de 5 V.

Cableado

Data a D4 mediante 330 Ω, VCC a 5 V externo, GND común con la Portenta (lógica de 3,3 V aceptada por los WS2812).

Funcionamiento

setPixelColor rellena el búfer, show() envía la trama por temporizador/DMA. El módulo hace girar la cabeza a ~16 Hz.

Ejecución

Arduino IDE con el core « Arduino Mbed OS Portenta Boards »: elige « Portenta H7 » (núcleo M7), el puerto USB-C y Subir. El selector M7/M4 del modo DFU permite cargar también el núcleo M4.

Variantes

Sincronizar la animación con una medida (presión BMP280) o gobernarla desde el núcleo M4 por RPC.

ruban-neopixel.ino

// Ruban NeoPixel 16 LED sur D4 (Adafruit_NeoPixel sur core Mbed).
#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel ruban(16, 4, NEO_GRB + NEO_KHZ800);

unsigned long t0 = 0;
int tete = 0;

void setup() {
  ruban.begin();
  ruban.setBrightness(60);
  Serial.begin(9600);
}

void loop() {
  if (millis() - t0 < 60) return;
  t0 = millis();

  ruban.clear();
  ruban.setPixelColor(tete, ruban.Color(0, 255, 120));
  ruban.setPixelColor((tete + 1) % 16, ruban.Color(0, 90, 40));
  ruban.show();
  tete = (tete + 1) % 16;
}

// Les timing WS2812 sont generes par timers/DMA Mbed :
// fiables meme quand le M7 est charge ailleurs.

← Volver a la ficha