Salve a tutti,
è il mio primo post e vi chiedo di perdonarmi per eventuali errori grossolani...
Il mio scopo è di poter far iniziare degli effetti di luce led Neopixel tramite la pressione di un tasto su di una tastiera a matrice e fin qui nessun problema.
Lo scoglio si presenta dovendo far iniziare un effetto durante l'esecuzione di un altro. Cerco di spiegarmi: l'effetto 1 dura 10 sec, se al sesto secondo premo l'effetto 5, l'effetto 1 continua fino al decimo secondo e, solo allora, posso far partire un'altro effetto tramite la pressione di un tasto.
Credo di dover creare una variabile alimentata dal valore del tasto premuto sulla tastiera a matrice che fa partire un effetto, di dover far continuamente verificare quel valore e, se diverso dal valore memorizzato precedentemente, far partire il nuovo effetto.
Grazie a chiunque può instradarmi correttamente!
[code]
#include <Servo.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#include <Keypad.h>
const byte ROWS = 4; //quattro righe
const byte COLS = 4; //quattro colonne
byte colPins[4] = {5,4,3,2}; // Pin a cui sono connesse le colonne
byte rowPins[4] = {9,8,7,6}; // Pin a cui sono connesse le righe
char Keys[4][4]= //creo la matrice dei tasti della tastiera.
{
{'1','2','3','A'} ,
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad keypad = Keypad(makeKeymap(Keys), rowPins, colPins,4,4);
Servo myservo;
int val; // variable to read the value from the analog pin
int pos = 0;
#define PIN 13
#define NUMPIXELS 10
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixels.show();
myservo.attach(10);
}
void loop() {
int key = keypad.getKey();
if (key == '1'){// EFFETTO 1##################################################################
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,0,0)); //spenge tutto
pixels.show();
delay(0);}
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(150,150,150)); // salita bianca
pixels.show();
delay(1000);}
}
if (key == '2'){// EFFETTO 2##################################################################
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,0,0)); //spenge tutto
pixels.show();
delay(0);}
for(int i=9;i<NUMPIXELS;i--){
pixels.setPixelColor(i, pixels.Color(150,0,0)); // discesa rossa
pixels.show();
delay(1000);}
}
if (key == '3'){//EFFETTO 3##################################################################
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,0,0)); //parte tutto SPENTO
pixels.show();
delay(0);}
delay(0);
for(int i=0;i<NUMPIXELS;i++){
//int a = 5*i+20;
//int b = 15*i+20;
//int c = 20*i+20;
pixels.setPixelColor(i, pixels.Color(150,150,150)); // salita bianca ALTA 150150150
pixels.setPixelColor(NUMPIXELS-1-i, pixels.Color(150,150,150)); // salita bianca BASSA
pixels.show();
//delay(500);
if (i == 5){
delay(0);
}
if (i != 5){
delay(1000) ;
}
pixels.setPixelColor(i, pixels.Color(0,0,0)); //spenge tutto
pixels.setPixelColor(NUMPIXELS-1-i, pixels.Color(0,0,0)); //spenge tutto
pixels.show();
delay(0);
}
}
if (key == '4'){//EFFETTO 4##################################################################
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i+1, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i+2, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i+3, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i+4, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i+5, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i+6, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i+7, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i+8, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i+9, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i-1, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i-2, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i-3, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i-4, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i-5, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i-6, pixels.Color(150,0,0)); // salita rossa
pixels.setPixelColor(i-7, pixels.Color(0,150,0)); // salita verde
pixels.setPixelColor(i-8, pixels.Color(0,0,150)); // salita blu
pixels.setPixelColor(i-9, pixels.Color(150,0,0)); // salita rossa
pixels.show();
delay(1000);}
}
if (key == '5'){// EFFETTO 5##################################################################
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,0,150)); //parte tutto blu
pixels.show();
delay(0);}
delay(0);
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(150,150,150)); // salita bianca
pixels.show();
delay(200);}
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(150,0,0)); // salita rossa
pixels.show();
delay(200);}
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,150,0)); // salita verde
pixels.show();
delay(200);}
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(0,0,150)); // salita blu
pixels.show();
delay(200);}
}
if (key == 'A'){
val = map(val, 0, 1023, 0, 180);
myservo.write(180);
delay(1000);
}
if (key == 'C'){
val = map(val, 0, 1023, 0, 180);
myservo.write(0);
delay(1000);
}
}
[/code]