Ciao,
lo sketch è questo:
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIXEL_PIN 8 // Data Pin of Led strip
#define PIXEL_COUNT 300 // Number of LEDs in the strip
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_BRG + NEO_KHZ800);
static unsigned long t1, dt;
int ret = 0;
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
static unsigned long tempo0,temp0; uint16_t i0=0; uint8_t stampaled0;
static unsigned long tempo,temp; uint16_t i=0; uint8_t stampaled;
static unsigned long tempored,tempred; uint8_t stampared; uint16_t r=0;
static unsigned long tempogreen,tempgreen; uint8_t stampagreen; uint16_t g=0;
static unsigned long tempoblue,tempblue; uint8_t stampablue; uint16_t b=0;
uint32_t WheelPos; uint16_t j; float velocita=1;
int Striscia=8;
uint32_t rosso=strip.Color(255,0,0);uint32_t verde=strip.Color(0,255,0);uint32_t blu=strip.Color(0,0,255);
uint32_t giallo=strip.Color(255,255,0);uint32_t magenta=strip.Color(255,0,255);uint32_t ciano=strip.Color(0,255,255);
uint32_t bianco=strip.Color(255,255,255);uint32_t spento=strip.Color(0,0,0);
uint8_t inizio1=0;
int pixel1=strip.numPixels();
int elaborazionesegnale=0;
const int Signal=A5;
const int ledrosso=2;
const int ledverde=3;
const int ledblu=4;
void setup() {
strip.begin();
Serial.begin(9600);
}
void loop() {
elaborazionesegnale=digitalRead(Signal);
dt = millis();
if (elaborazionesegnale==LOW){Striscia++;delay(400);
if (Striscia>=9){Striscia=0;}
}
//strip.fill(color, first, count); colore, primo led, quantità led
if (Striscia==0){strip.fill(spento, inizio1, pixel1);
}
if (Striscia==1){strip.fill(rosso, inizio1, pixel1);
}
if (Striscia==2){strip.fill(verde, inizio1, pixel1);
}
if (Striscia==3){strip.fill(blu, inizio1, pixel1);
}
if (Striscia==4){strip.fill(giallo, inizio1, pixel1);
}
if (Striscia==5){strip.fill(ciano, inizio1, pixel1);
}
if (Striscia==6){strip.fill(magenta, inizio1, pixel1);
}
if (Striscia==7){strip.fill(bianco, inizio1, pixel1);
}
//effetto rainbow
if (Striscia==8){velocita=20;} else {velocita=1;}
tempo=dt-temp;
if ((tempo>=1)&&Striscia==8){temp=dt;stampaled=1;} else {stampaled=0;};
//variabile numero led
if (Striscia==8){ if (i>=strip.numPixels()){i=0;} else {i++;}
}
tempored=dt-tempred;if ((tempored>=velocita)&&Striscia==8){tempred=dt;stampared=1;} else {stampared=0;};
if (stampared==1){int full;if (r>=256){r=0;} else {r++;}
}
tempogreen=dt-tempgreen;if ((tempogreen>=velocita)&&Striscia==8){tempgreen=dt;stampagreen=1;} else {stampagreen=0;};
if (stampagreen==1){int full;if (g>=256*10){g=0;} else {g++;}
}
WheelPos=r+g;
//se non erro, le seguenti 4 righe dovrebbero essere inutilizzate, erano sicuramente delle prove
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);}
if(WheelPos < 170) {WheelPos -= 85; strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); }
if ( WheelPos -= 170){strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }
//stampaggio led
if (Striscia==8){strip.setPixelColor(i,Wheel(((i * 256 / strip.numPixels()) -g) & 255));
}
Serial.println(i);
strip.show();
}
ti avverto, lo sketch è abbastanza un miscuglio di prove, però ho cercato di aggiungere qualche commento, in modo da far capire le righe in cui ho questo problema...
In base alle mie conoscenze sulla libreria "Adafruit_NeoPixel.h", non mi risulta che ci siano altri metodi per stampare il pixel... In qualunque caso sottolineo, la mia ignoranza in materia.
Se hai qualche consiglio, è ben accettato!
Grazie!