Étape 5: Code
J’ai utilisé une version légèrement modifiée du code que j’ai utilisé dans ma table infini avec projet outils occasionnels. Je l’ai mis ici à des fins de téléchargement et plug-and-play, mais il est facile de trouver l’inspiration (et toutes les bibliothèques requises) au adafruit, ou ici sur le site Instructables. Mon code est assez basique et différents affichages de couleurs uniques, rainbow, pirouettes, etc..
L’étape suivante (quand j’ai le temps) sera à ajouter un petit piezo ou un microphone et rendre l’écran réagit à la musique comme une animation physique égaliseur (où notes changerait la couleur et le volume, l’intensité de la lumière par exemple).
Mises à jour sur cela dans le futur.
CODE :
#include
#define PINdroite 1 #define STRIPSIZE 12
Paramètre 1 = nombre de pixels dans la bande de / / paramètre 2 = Numéro d’identification (la plupart sont valide) / / paramètre 3 = type de pixel drapeaux, additionner au besoin: / / NEO_KHZ800 800 KHz bitstream (la plupart NeoPixel produits w/WS2812 LEDs) / / NEO_KHZ400 400 KHz (classique « v1 » (pas v2) pixels de la flore, les pilotes WS2811) / / NEO_GRB Pixels sont câblés pour GRB bitstream (la plupart des produits NeoPixel) / / NEO_RGB Pixels sont câblés pour RGB bitstream (v1 pixels de flore pas de v2) bande de Adafruit_NeoPixel = Adafruit_NeoPixel (STRIPSIZE, PINdroite, NEO_GRB + NEO_KHZ800) ;
void setup() {strip.begin() ; strip.setBrightness(60); / / baisser la luminosité et enregistrer les globes oculaires! strip.show(); / / initialise tous les pixels sur « arrêt »}
void loop() {/ / quelques procédures d’exemple montrant comment afficher les pixels : colorWipe (bande. Color(0,0,0), 25) ; ColorWipe noir (bande. Color(64, 0, 0), 100) ; ColorWipe rouge (bande. Color(0, 64, 0), 100) ; ColorWipe vert (bande. Color(0, 0, 64), 100) ; ColorWave(75) bleu ; colorWipe (bande. Color(0,0,0), 100) ; Rainbow(15) noir ; colorWipe (bande. Color(0,0,0), 100) ; RainbowCycle(15) noir ; colorWipe (bande. Color(0,0,0), 100) ; ColorWave(30) noir ; }
Remplir les points un après l’autre avec une colorWipe Sub de couleur (uint32_t c, uint8_t attente) {pour (uint16_t j’ai = 0; i
Sub arc-en-ciel (attente uint8_t) {uint16_t i, j ;
pour (j = 0; j < 256; j ++) {pour (i = 0; i
Légèrement différent, ce qui rend l’arc en ciel également réparti tout au long de Sub rainbowCycle (attente uint8_t) {uint16_t i, j ;
pour (j = 0; j < 256 * 5; j ++) {/ / 5 cycles de toutes les couleurs sur la roue pour (i = 0; j’ai < strip.numPixels(); i ++) {strip.setPixelColor (i, roue (((i * 256/strip.numPixels()) + j) & 255));} strip.show() ; delay(wait);}}
Entrer une valeur de 0 à 255 pour obtenir une valeur de couleur. Les couleurs sont un transition r - g - b - retour à r. roue d’uint32_t (WheelPos octets) {if(WheelPos < 85) {bande de retour. Couleur (WheelPos * 3, 255 - WheelPos * 3, 0) ; } else if(WheelPos < 170) {WheelPos-= 85 ; bande de retour. Couleur (255 - WheelPos * 3, 0, WheelPos * 3) ; } else {WheelPos-= 170 ; bande de retour. Couleur (0, WheelPos * 3, 255 - WheelPos * 3) ; } }
/ ** * ^ ^ ^ * ~ ~ ~ ColorWave ~ ~ ~ * V V V * / void colorWave (attente uint8_t) {int i, j, stripsize, cycle ; float rsin, NIBS, apéché, ang, papier offset ;
public static int tique = 0 ; stripsize = strip.numPixels() ; cycle = stripsize * 25 ; fois le tour du cercle...
tandis que (++ % cycle de cocher) {offset = map2PI(tick) ;
pour (i = 0; j’ai < stripsize; i ++) {ang = map2PI(i) - offset ; rsin = sin(ang) ; NIBS = sin (2.0 * ang / 3.0 + map2PI(int(stripsize/6))) ; apéché = sin (4.0 * ang / 5.0 + map2PI(int(stripsize/3))) ; strip.setPixelColor (i, bande. Color(trigScale(rsin), trigScale(gsin), trigScale(bsin))) ; }
Strip.Show() ; Delay(Wait) ; }
}
/ ** * Échelle une valeur renvoyée par une fonction trigonométriques en une valeur byte. * [-1, + 1] -> [0, 254] * note que nous ignorons la valeur possible de 255, efficacité, * et parce que personne ne pourra faire la différence entre le * niveaux de luminosité de 254 et 255. * / trigScale(float val) octet {val += 1.0; / / déplacer la cuisinière à [0.0, 2.0] val * = 127,0; / / déplacer la cuisinière à [0.0, 254.0]
retour int(val) & 255 ; }
/ ** * Carte un entier alors que [0, striplength] -> [0, 2PI] * / float map2PI(int i) {return PI*2.0*float(i) / float(strip.numPixels());}
/ CODE