Arduino per un gioco -- need help

ciao,
sono a mio primo progetto con Arduino.
sono quindi neofita con zero conoscenze di background.
quindi, per favore, aiutatemi come aiutereste vostro figlio di 3 anni…. :slight_smile:
sto costruendo un gioco per mia figlia.
il programma che ho scritto funziona, ma sicuramente non è il top, e soprattutto avrebbe bisogno di migliorie che non riesco proprio a dare.

ALLORA, ho un motore, due pezzi di striscia led (e quando avrò risolto i problemi con questo sketch, inserirò un amplificatore audio per riprodurre un piccolo brano).

la prima striscia led (strip_b), fa il suo dovere : si accende è resta sempre accesa

il motore fa il suo dovere : parte, fa avanti/indietro a più velocità per qualche secondo

la seconda striscia led fa il suo dovere (strip_a) : nell'ultima parte del codice fa il suo dovere, si accende e spegne random.

però, ecco i problemi per cui mi servono migliorie : quando il motore inizia il suo ciclo, vorrei che la strip_a, facesse un giochetto di luci random per lo stesso identico tempo che il motore in cui il motore fa il suo avanti/indietro, cioè fino ad appena prima il motore resti stabilmente acceso (nello sketch ho messo la nota "GIOCO DI LUCI FINOA QUI". Pero ora ho scritto il codice motore mischiato con quello della strip_a, ma ovviamente è un tamponare. tutto questo, deve succedere una sola volta per circa 4 secondi (ho usato una bool e funziona), per poi "disattivarsi" a favore del motore sempre accesso e della strip_a che va il loop perenne random (e questa parte funziona).

ho provato ad usare la funzione MILLIS, con risultati disastrosi.
potete aiutarmi?

E...non è finita, ovviamente ( :slight_smile: ) : vorrei anche mettere un interruttore esterno ON/OFF (dove nel codice ho messo la nota INTERRUTTORE, che governi tutta la parte del codice da li sino alla fine di tutto lo sketch.

mi scuso sin d'ora per i disastri che ho fatto/scritto...ma sono veramente alla mia prima volta, ed ho zero skills….

#define PIN2 3

Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(LEDS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(LEDS, PIN2, NEO_GRB + NEO_KHZ800);

// Motore
int enA = 9;
int in1 = 8;
int in2 = 7;

bool onetime = true;



void setup() { 
//inizializzo  LED Strip  
strip_a.begin();
  strip_a.show();  // Initialize all pixels to 'off'
  strip_b.begin();
  strip_b.show();

// GESTIONE MOTORE
 // Set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);  
  // Turn off motors - Initial state
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  
}

void loop() {

 {
  //gestione prima Led Strip (Internal & External Lights)
  strip_b.setPixelColor(0, 255, 255, 255);
  strip_b.setPixelColor(1, 255, 255, 255);
  strip_b.setPixelColor(2, 255, 255, 255);
  strip_b.show();
  }
  
 // INTERRUTTORE : QUI VORREI METTERE UN INTERRUTTORE ESPERNO, CHE QUANDO LO AZIONO, INNIZI TUTTO QUANTO IL PROGRAMMA DI SEGUITO, FINO ALLA FINE 

{
//gestione motore
if(onetime){ 
  analogWrite(enA, 50); // Set motors speed (from 0 and 255 for PWM exit)
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          //LA PARTE DI GESTIONE DELLA SECONDA STRISCIA LED, VORREI SCRIVERLA SEPARAMENTE, MA VORREI FUNZIONASSE CONTEMPORANEAMENTE ALLA PARTE DEL MOTORE
          //gestione seconda led strip
          strip_a.clear();
          strip_a.setPixelColor(2, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(2, 0, 0, 0);
          strip_a.show();
  delay(1000);          
  //switch off motor
  digitalWrite(in1, LOW);   
  digitalWrite(in2, LOW);
  // Now change motor directions
  analogWrite(enA, 50);
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
          strip_a.clear();
          strip_a.setPixelColor(10, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(10, 0, 0, 0);
          strip_a.show();  
  delay(500);
  //switch off motor
   digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  delay(200);
  //change direction to correct direction
  analogWrite(enA, 100);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(4, 255, 27, 1);
          strip_a.setPixelColor(6, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(4, 0, 0, 0);
          strip_a.setPixelColor(6, 0, 0, 0);
          strip_a.show();          
  delay(500);
  analogWrite(enA, 50);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(1, 255, 27, 1);
          strip_a.setPixelColor(11, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(1, 0, 0, 0);
          strip_a.setPixelColor(11, 0, 0, 0);
          strip_a.show(); 
  delay(1000);
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  delay(500);
  analogWrite(enA, 150);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(2, 255, 27, 1);
          strip_a.setPixelColor(9, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(2, 0, 0, 0);
          strip_a.setPixelColor(9, 0, 0, 0);
          strip_a.show(); 
  delay(500);
  analogWrite(enA, 50);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(5, 255, 27, 1);
          strip_a.setPixelColor(7, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(5, 0, 0, 0);
          strip_a.setPixelColor(7, 0, 0, 0);
          strip_a.show();   
  delay(2000);
  analogWrite(enA, 180);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(8, 255, 27, 1);
          strip_a.setPixelColor(0, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(8, 0, 0, 0);
          strip_a.setPixelColor(0, 0, 0, 0);
          strip_a.show(); 
  delay(3500);
   analogWrite(enA, 100);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(5, 255, 27, 1);
          strip_a.setPixelColor(6, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(5, 0, 0, 0);
          strip_a.setPixelColor(6, 0, 0, 0);
          strip_a.show(); 
  delay(3500);
          strip_a.clear();
          strip_a.setPixelColor(3, 255, 27, 1);
          strip_a.setPixelColor(10, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(3, 0, 0, 0);
          strip_a.setPixelColor(10, 0, 0, 0);
          strip_a.show(); 
  analogWrite(enA, 180);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
          strip_a.clear();
          strip_a.setPixelColor(4, 255, 27, 1);
          strip_a.setPixelColor(9, 255, 27, 1);
          strip_a.show();
          delay(50);
          strip_a.setPixelColor(4, 0, 0, 0);
          strip_a.setPixelColor(9, 0, 0, 0);
          strip_a.show(); 
 //"GIOCO DI LUCI FINO A QUI"         
analogWrite(enA, 255);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
}

  onetime=false;
}


{
  // GESTIONE Random LED ON/OFF LH &RH Exhaust sys quikly mode 
strip_a.clear();    
strip_a.setPixelColor(random(0, 8), 255, 27, 1);
strip_a.setPixelColor(random(3, 12), 255, 0, 0);
strip_a.show(); //Show The Color
delay(random(0-200));
strip_a.clear();
}

}

Come hai intuito se vuoi far eseguire più compiti "assieme" ad Arduino il delay non te lo consente, questo perché Arduino non può eseguire più cose contemporanamente come un PC ma una sola cosa alla volta, molto velocemente, quindi se fai più cose molto velocemente l'umano che osserva avrà la sensazione che le cose avvengano contemporaneamente anch se non è così. Per fare questo l'unica possibilità è rimuovere i delay e cambiare completamente il modo di gestire il programma. Visto che dici di aver scarse conoscenze ti suggerisco di approcciare ad imparare l'uso di millis() tramite piccoli programmi propedeutici e di cercare di modificare il tuo atuale programma (complesso) solo quando avrai studiato e capito a fondo come usare millis(), per capire le basi con cui si usa millis() consiglio prima la lettura di QUESTO post esplicativo, dopo di che lo studio di come si usa la funzione millis(), prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... alla fine il tutto dovrebbe essere più chiaro :slight_smile:

P.S. = Come tutti gli hobby che vengono coltivati nel poco tempo libero anche Arduino ha necessità di un discreto tempo per imparare la sua programmazione e da li non si scappa purtroppo :slight_smile:

grazie delle indicazioni su cosa/dove leggere, ho iniziato, ma ...tanta roba ....!!

una dinamica che era che in un sketch tipo il mio, devo sostituire ogni singolo "delay" con "millis" cioè, se il mio codice ha 100 delay per eseguire il suo ciclo, ogni singolo delay, deve essere sostituito con un millis.

io speravo/pensavo/credevo di poter usare la funzione millis una volta all'inizio del codice, ma che all'interno di quello stralcio di codice, potessero vivere dei delay.

quindi, mi aspetta un lavorone :confused:

per la seconda domanda : vorrei anche mettere un interruttore esterno ON/OFF (dove nel codice ho messo la nota INTERRUTTORE, che governi tutta la parte del codice da li sino alla fine di tutto lo sketch, cìè qualcosa da poter leggere e/o esiste una soluzione?

grazie di nuovo..

SI, quella è una banale digitalRead sul pin dove colleghi il bottone (con il debounce hardware) se ha il livllo che ti aspetti quando è premuto fai eseguire tutto il codice, altrimenti non fai nulla

esiste una soluzione?

Come dice fabpolli leggendo questo :slightly_frowning_face: per sapere come gestire via software questo digitalRead.

ragazzi,
come promesso ci sto provando.
seguendo il consiglio, ho cominciato usando il millis su qualcosa di più semplice....
ma, comunque, faccio una fatica....
poveraccio me, ed il non aver studiato quando era il momento! :confused:

detto questo, ho scritto il codice di cui sotto, per far lampeggiare una led di una striscia per 100ms, e funziona!
come ulteriore difficoltà, vorrei fargli fare 2 lampeggi (on 100ms, off 100ms, on altri 100ms), e poi lasciarlo spento per un tempo maggiore (esempio 1000ms), ma proprio non riesco...
mi dite se sono sulla giusta strada...?

danke

#include <Adafruit_NeoPixel.h>

#define LED_PIN    6
#define LED_COUNT 12

unsigned long flashInterval = 100;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
unsigned long counter=0;

bool acceso=false;

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
Serial.begin(9600);
pinMode(6, OUTPUT);
strip.begin();
strip.show();
previousMillis = millis();
}

void loop(){  
  
while (counter <=3){
	currentMillis = millis();  
	if(  currentMillis - previousMillis >= flashInterval) {
		previousMillis = millis();
			if(!acceso){
				acceso=true;
				strip.setPixelColor(0, 0, 255, 0);   
				strip.show(); 
						}
    
 	else  {
        acceso=false;
   		strip.setPixelColor(0, 0, 0, 0);   
  		strip.show();    
  		}
counter++;  
	}
  }

}

Fai variare flashInterval a seconda del valore di counter
counter=0 flashInterval=100
counter=1 flashInterval=100
counter=2 flashInterval=100
counter=3 flashInterval=1000
l'ultimo non ha senso se poi non ricominci il tutto!

ci sarebbe un altro modo ma non voglio, per ora, farti leggere altre cose!! :slight_smile:

P.S. se fai un CTRL+T dal IDE vedrai che il tuo codice sarà piu' leggibile

Savoriano, tks per la dritta…
proverò cosi!

per ora, ho fatto delle prove per la storia dell'interruttore esterno per "accendere una funzione.
anche qui, scarsi risultati…

nelle prove fatte, o non accade nulla, oppure la funzione non si accende più…. :-\

uff...

Facci vedere il codice e cosi' possiamo dirti cosa non va.
Ci vorrebbe anche uno schemino su come hai collegato l'interruttore.

allego lo sketch…

per l'interruttore, ho "banalmente" messo uno switch tra il PIN 10 (quello del digitalRead) e +5V...
non ho creato il Debounce, perché immagino, penso, spero...non serva con l'inteuttore...

#include  <Adafruit_NeoPixel.h>

//LEDS
#define PIN 6
#define LEDS 12
#define PIN_b 3
#define PIN_c 4
#define PIN_d 5
#define PIN_e 11
#define PIN_f 12

//#define PB 10

Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(LEDS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(LEDS, PIN_b, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_c = Adafruit_NeoPixel(LEDS, PIN_c, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_d = Adafruit_NeoPixel(LEDS, PIN_d, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_e = Adafruit_NeoPixel(LEDS, PIN_e, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_f = Adafruit_NeoPixel(LEDS, PIN_f, NEO_GRB + NEO_KHZ800);

// Motore
int enA = 9;
int in1 = 8;
int in2 = 7;

bool onetime = true;
int PB = 10;
int val = 0;

void setup() {
  //inizializzo  LED Strip
  strip_a.begin();
  strip_a.show();  // Initialize all pixels to 'off'
  strip_b.begin();
  strip_b.show();
  strip_c.begin();
  strip_c.show();
  strip_d.begin();
  strip_d.show();
  strip_e.begin();
  strip_e.show();
  strip_f.begin();
  strip_f.show();


  // GESTIONE MOTORE
  // Set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  // Turn off motors - Initial state
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);

  pinMode(PB, INPUT);

}

void loop() {
  {
    //gestione prima Led Strip (Internal & External Lights)
    strip_b.setPixelColor(0, 255, 255, 255);
    strip_b.setPixelColor(1, 255, 255, 255);
    strip_b.show();
    strip_c.setPixelColor(0, 255, 0, 0 );
    strip_c.show();
    strip_d.setPixelColor(0, 255, 255, 255);
    strip_d.setPixelColor(1, 255, 255, 255);
    strip_d.show();
    strip_e.setPixelColor(0, 255, 255, 255);
    strip_e.setPixelColor(1, 255, 255, 255);
    strip_e.show();
    strip_f.setPixelColor(0, 0, 255, 0);
    strip_f.show();
  }
  //}
  // INTERRUTTORE : QUI VORREI METTERE UN INTERRUTTORE ESPERNO, CHE QUANDO LO AZIONO, INNIZI TUTTO QUANTO IL PROGRAMMA DI SEGUITO, FINO ALLA FINE

  val = digitalRead(PB);

  if (val = HIGH) {
    {


      //gestione motore
      if (onetime) {
        analogWrite(enA, 50); // Set motors speed (from 0 and 255 for PWM exit)
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        //LA PARTE DI GESTIONE DELLA SECONDA STRISCIA LED, VORREI SCRIVERLA SEPARAMENTE, MA VORREI FUNZIONASSE CONTEMPORANEAMENTE ALLA PARTE DEL MOTORE
        //gestione seconda led strip
        strip_a.clear();
        strip_a.setPixelColor(2, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(2, 0, 0, 0);
        strip_a.show();
        delay(1000);
        //switch off motor
        digitalWrite(in1, LOW);
        digitalWrite(in2, LOW);
        // Now change motor directions
        analogWrite(enA, 50);
        digitalWrite(in1, LOW);
        digitalWrite(in2, HIGH);
        strip_a.clear();
        strip_a.setPixelColor(10, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(10, 0, 0, 0);
        strip_a.show();
        delay(500);
        //switch off motor
        digitalWrite(in1, LOW);
        digitalWrite(in2, LOW);
        delay(200);
        //change direction to correct direction
        analogWrite(enA, 100);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(4, 255, 27, 1);
        strip_a.setPixelColor(6, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(4, 0, 0, 0);
        strip_a.setPixelColor(6, 0, 0, 0);
        strip_a.show();
        delay(500);
        analogWrite(enA, 50);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(1, 255, 27, 1);
        strip_a.setPixelColor(11, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(1, 0, 0, 0);
        strip_a.setPixelColor(11, 0, 0, 0);
        strip_a.show();
        delay(1000);
        digitalWrite(in1, LOW);
        digitalWrite(in2, LOW);
        delay(500);
        analogWrite(enA, 150);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(2, 255, 27, 1);
        strip_a.setPixelColor(9, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(2, 0, 0, 0);
        strip_a.setPixelColor(9, 0, 0, 0);
        strip_a.show();
        delay(500);
        analogWrite(enA, 50);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(5, 255, 27, 1);
        strip_a.setPixelColor(7, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(5, 0, 0, 0);
        strip_a.setPixelColor(7, 0, 0, 0);
        strip_a.show();
        delay(2000);
        analogWrite(enA, 180);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(8, 255, 27, 1);
        strip_a.setPixelColor(0, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(8, 0, 0, 0);
        strip_a.setPixelColor(0, 0, 0, 0);
        strip_a.show();
        delay(3500);
        analogWrite(enA, 100);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(5, 255, 27, 1);
        strip_a.setPixelColor(6, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(5, 0, 0, 0);
        strip_a.setPixelColor(6, 0, 0, 0);
        strip_a.show();
        delay(3500);
        strip_a.clear();
        strip_a.setPixelColor(3, 255, 27, 1);
        strip_a.setPixelColor(10, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(3, 0, 0, 0);
        strip_a.setPixelColor(10, 0, 0, 0);
        strip_a.show();
        analogWrite(enA, 180);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        strip_a.clear();
        strip_a.setPixelColor(4, 255, 27, 1);
        strip_a.setPixelColor(9, 255, 27, 1);
        strip_a.show();
        delay(50);
        strip_a.setPixelColor(4, 0, 0, 0);
        strip_a.setPixelColor(9, 0, 0, 0);
        strip_a.show();
        //"GIOCO DI LUCI FINO A QUI"
        analogWrite(enA, 255);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);


        onetime = false;
      }


      {
        // GESTIONE Random LED ON/OFF LH &RH Exhaust sys quikly mode
        strip_a.clear();
        strip_a.setPixelColor(random(0, 8), 255, 27, 1);
        strip_a.setPixelColor(random(3, 12), 255, 0, 0);
        strip_a.show(); //Show The Color
        delay(random(0 - 200));
        strip_a.clear();
      }
    }
  }
}

per l'interruttore, ho "banalmente" messo uno switch tra il PIN 10 (quello del digitalRead) e +5V...

in questo caso devo mettere una resistenza pull down.
se non hai la resistenza colleghi il tuo interruttore al gnd e usi il pull-up interno

pinMode(PB, INPUT_PULLUP);

e invece di

if (val = HIGH)

metterai

if (val = LOW)

.

non ho creato il Debounce, perché immagino, penso, spero...non serva con l'inteuttore...

Visto come funziona il tuo codice, non serve.

     {
        // GESTIONE Random LED ON/OFF LH &RH Exhaust sys quikly mode
        strip_a.clear();
        strip_a.setPixelColor(random(0, 8), 255, 27, 1);
        strip_a.setPixelColor(random(3, 12), 255, 0, 0);
        strip_a.show(); //Show The Color
        delay(random(0 - 200));
        strip_a.clear();
      }

Queste parentesi a cosa servono? hai forse dimenticato un else o qualcos'altro?

oppure la funzione non si accende più….

Normale con la variabile onetime che passa a false

attenzione agli if con "=" invece che "=="

ho provato con le modifiche suggerite…
ma non cambia nulla.
l'interruttore è come se non ci fosse…

:cry:

in questo forum è possibile piangere?!? (ah ha ahhh) ;D :smiley: :wink:

#include  <Adafruit_NeoPixel.h>

//LEDS
#define PIN 6
#define LEDS 12
#define PIN_b 3
#define PIN_c 4
#define PIN_d 5
#define PIN_e 11
#define PIN_f 12

//#define PB 10

Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(LEDS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(LEDS, PIN_b, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_c = Adafruit_NeoPixel(LEDS, PIN_c, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_d = Adafruit_NeoPixel(LEDS, PIN_d, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_e = Adafruit_NeoPixel(LEDS, PIN_e, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_f = Adafruit_NeoPixel(LEDS, PIN_f, NEO_GRB + NEO_KHZ800);

// Motore
int enA = 9;
int in1 = 8;
int in2 = 7;

bool onetime = true;
int PB = 10;
int val = 0;

void setup() {
  //inizializzo  LED Strip
  strip_a.begin();
  strip_a.show();  // Initialize all pixels to 'off'
  strip_b.begin();
  strip_b.show();
  strip_c.begin();
  strip_c.show();
  strip_d.begin();
  strip_d.show();
  strip_e.begin();
  strip_e.show();
  strip_f.begin();
  strip_f.show();


  // GESTIONE MOTORE
  // Set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  // Turn off motors - Initial state
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);

  pinMode(PB, INPUT_PULLUP);

}

void loop() {
  {
    //gestione prima Led Strip (Internal & External Lights)
    strip_b.setPixelColor(0, 255, 255, 255);
    strip_b.setPixelColor(1, 255, 255, 255);
    strip_b.show();
    strip_c.setPixelColor(0, 255, 0, 0 );
    strip_c.show();
    strip_d.setPixelColor(0, 255, 255, 255);
    strip_d.setPixelColor(1, 255, 255, 255);
    strip_d.show();
    strip_e.setPixelColor(0, 255, 255, 255);
    strip_e.setPixelColor(1, 255, 255, 255);
    strip_e.show();
    strip_f.setPixelColor(0, 0, 255, 0);
    strip_f.show();
  }
  //}
  // INTERRUTTORE : QUI VORREI METTERE UN INTERRUTTORE ESPERNO, CHE QUANDO LO AZIONO, INNIZI TUTTO QUANTO IL PROGRAMMA DI SEGUITO, FINO ALLA FINE


  val = digitalRead(PB);

  if (val == LOW) ; {


    //gestione motore
    if (onetime) {
      analogWrite(enA, 50); // Set motors speed (from 0 and 255 for PWM exit)
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      //LA PARTE DI GESTIONE DELLA SECONDA STRISCIA LED, VORREI SCRIVERLA SEPARAMENTE, MA VORREI FUNZIONASSE CONTEMPORANEAMENTE ALLA PARTE DEL MOTORE
      //gestione seconda led strip
      strip_a.clear();
      strip_a.setPixelColor(2, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(2, 0, 0, 0);
      strip_a.show();
      delay(1000);
      //switch off motor
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      // Now change motor directions
      analogWrite(enA, 50);
      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      strip_a.clear();
      strip_a.setPixelColor(10, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(10, 0, 0, 0);
      strip_a.show();
      delay(500);
      //switch off motor
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      delay(200);
      //change direction to correct direction
      analogWrite(enA, 100);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(4, 255, 27, 1);
      strip_a.setPixelColor(6, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(4, 0, 0, 0);
      strip_a.setPixelColor(6, 0, 0, 0);
      strip_a.show();
      delay(500);
      analogWrite(enA, 50);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(1, 255, 27, 1);
      strip_a.setPixelColor(11, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(1, 0, 0, 0);
      strip_a.setPixelColor(11, 0, 0, 0);
      strip_a.show();
      delay(1000);
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      delay(500);
      analogWrite(enA, 150);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(2, 255, 27, 1);
      strip_a.setPixelColor(9, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(2, 0, 0, 0);
      strip_a.setPixelColor(9, 0, 0, 0);
      strip_a.show();
      delay(500);
      analogWrite(enA, 50);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(5, 255, 27, 1);
      strip_a.setPixelColor(7, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(5, 0, 0, 0);
      strip_a.setPixelColor(7, 0, 0, 0);
      strip_a.show();
      delay(2000);
      analogWrite(enA, 180);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(8, 255, 27, 1);
      strip_a.setPixelColor(0, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(8, 0, 0, 0);
      strip_a.setPixelColor(0, 0, 0, 0);
      strip_a.show();
      delay(3500);
      analogWrite(enA, 100);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(5, 255, 27, 1);
      strip_a.setPixelColor(6, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(5, 0, 0, 0);
      strip_a.setPixelColor(6, 0, 0, 0);
      strip_a.show();
      delay(3500);
      strip_a.clear();
      strip_a.setPixelColor(3, 255, 27, 1);
      strip_a.setPixelColor(10, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(3, 0, 0, 0);
      strip_a.setPixelColor(10, 0, 0, 0);
      strip_a.show();
      analogWrite(enA, 180);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      strip_a.clear();
      strip_a.setPixelColor(4, 255, 27, 1);
      strip_a.setPixelColor(9, 255, 27, 1);
      strip_a.show();
      delay(50);
      strip_a.setPixelColor(4, 0, 0, 0);
      strip_a.setPixelColor(9, 0, 0, 0);
      strip_a.show();
      //"GIOCO DI LUCI FINO A QUI"
      analogWrite(enA, 255);
      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);


      onetime = false;
    }
  }

  // GESTIONE Random LED ON/OFF LH &RH Exhaust sys quikly mode
  strip_a.clear();
  strip_a.setPixelColor(random(0, 8), 255, 27, 1);
  strip_a.setPixelColor(random(3, 12), 255, 0, 0);
  strip_a.show(); //Show The Color
  delay(random(0 - 200));
  strip_a.clear();


}

mrossato:
in questo forum è possibile piangere?!? (ah ha ahhh) ;D :smiley: :wink:

...

if (val == LOW) ; {
   ....
}

E qui invece attenzione ai punti e virgola che terminano un if :wink:

Forme corrette, le istruzioni sono sotto condizione:

if (condizione) istruzione;
if (condizione) { istruzione; }
if (condizione) { istruzione1; istruzione2; istruzione3; }

Forme errate, le istruzioni sono fuori condizione e vengono eseguite sempre:

if (condizione); istruzione;
if (condizione); { istruzione; }
if (condizione); { istruzione1; istruzione2; istruzione3; }

Nota: anche se if ammette una sola istruzione senza graffe, meglio metterle sempre per chiarezza.

attenzione agli if con "=" invece che "=="

NON L'AVEVO VISTO!!!! :blush: :astonished:

relativamente all'interruttore, forse ho combinato qualcosa di buono.
adesso riesco ad accenderlo e spegnerlo (più o meno) quando voglio.
ovvero, all'interno della prima funzione (la "onetime", per capirsi) anche se aziono l'interruttore, non accade nulla, fino alla fine della funzione stessa;
al contrario, se lo aziono prima che inizi la funzione, o al termine della stessa, FUNZIONA!
ovviamente, alla riattivazione dell'interruttore, il programma riprende da il suo operato trascurando la funzione "onetime".