Attivazione uscite per un tempo proporzionale alla posizione di potenziometri

Salve,
premetto che è la prima volta che scrivo in questo forum, e la prima volta che provo a scrivere un programma per Arduino .....ovviamente non funziona; o meglio: non funzionacome vorrei.

Ringrazio in anticipo chi avrà la pazienza di darmi delle dritte per questo mio primo progetto.

Quello che vorrei fare con arduino è questo:

In presenza di segnale alto su un ingresso ( pin 13) ( al rilevamento del fronte di salita oppure al rilevamento della presenza di tale segnale anche per un breve periodo di tempo, per esempio 0.3 sec.), dovrebbe partire un ciclo che mette a livello alto 4 uscite ( pin 2, 3, 4, 5 ) una dopo l' altra in sequenza per un periodo di tempo regolabile tra 0 secondi e circa 2 secondi.
Il tempo di permanenza allo stato alto delle uscite viene regolato da 4 potenziometri collegati ad altrettanti ingressi analogici ( A0, A1, A2, A3); ovviamente ogni potenziometro deve regolare la rispettiva uscita ( A0 -> pin 2 , A1 -> pin 3 ecc. ).

La scheda è Arduino uno rev 3.

Sostanzialmente il tutto funziona, nel senso che il compilatore non restituisce errori, e le uscite vengono attivate per un tempo impostato dal relativo potenziometro.
Quello che mi aspettavo da questo programma è che ( visto l' utilizzo del ciclo DO ...WHILE ) al rilevamento del segnale alto ( 5 V) sull' ingresso pin 13 ( che ho chiamato " enable") di durata circa 0.1 - 0.5 sec. venissero attivate per una volta sola le uscite secondo la sequenza sopra descritta fino al rilevamento del sucessivo segnale "enable" che avrebbe nuovamente innescato il ciclo.
Invece quando ho collegato il tutto, le 4 uscite vengono attivate una dopo l' altra in un loop infinito indipendentemente dal segnale di innesco sul pin 13.

Non capisco il perché.

Questo è lo sketch:

( i commenti del codice servono più che altro a me).

// dichiarazione variabili globali

int AnalogPins[] = {A0, A1, A2, A3};
// numeri dei pin ingressi analogici ai qiali sono collegati i potenziometri che determinano la durata delle uscite a livello alto
  
  int outPins[] =   {2, 3, 4, 5};  // numeri dei pin di uscita
  
const int enablePin = 13;  // segnale di inizio ciclo

const int outCount = 4;    // numero delle uscite che si vogliono utilizzare


  void setup() 
  {
   
       for (int i = 0; i < outCount; i++) 
    {
      pinMode(outPins[i], OUTPUT);  // settaggio / assegnazione della serie di  pin nell' array outPins come uscite
     
    }
     pinMode(enablePin, INPUT);
     
  };

void loop() 
{
  


      // uso il ciclo do-while affinchè al rilevamento del segnale sul pin 13 anche per un breve periodo di tempo, venga attivata 
      //almeno una volta la sequenza delle uscite a livello alto
      
      int enable = digitalRead(enablePin);
      
      do
      {
       
         int enable = digitalRead(enablePin);  
        
     
        
        
           digitalWrite ( outPins[2,3,4,5], LOW );
           
           for (int i = 0; i < outCount; i++) 
           {
           
            int t= analogRead ( AnalogPins[i]); // t è il tempo proporzionale alla posizione del potenziometro letto sugli ingressi analogici
        
                digitalWrite ( outPins[i],  HIGH );  //  ----sintassi: digitalWrite(ledPin, HIGH);      x = mySensVals[4]; ---
                delay(t*2);                            
                digitalWrite(outPins[i],  LOW);

                                           // digitalWrite ( outPins[2,3,4,5], LOW );
            
          }
          
      }    
      
           
      while (enable == HIGH);
 

}

digitalWrite ( outPins[2,3,4,5], LOW ); non é una sintassi corretta. Devi fare un For per settare singolarmente le uscite.

int t= analogRead ( AnalogPins[i]); // t è il tempo proporzionale alla posizione del potenziometro letto sugli ingressi analogici
       
                digitalWrite ( outPins[i],  HIGH );  //  ----sintassi: digitalWrite(ledPin, HIGH);      x = mySensVals[4]; ---
                delay(t*2);                           
                digitalWrite(outPins[i],  LOW);

Cosí accendi le 4 uscite uno dopo l'altra.

devi non usare delay() e al suo posto fare la conta del ritardo con millis().

Ciao Uwe

Grzie uwefed.

Per quanto riguardal' istruzione digitalWrite ( outPins[2,3,4,5], LOW ); ho capito l' errore, e penso che potrei anche toglierla senza influire sul funzionamento del programma.

Invece, per quanto riguarda l' altra parte del programma, le uscite che vengono attivate una dopo l' altra è quello che volevo ottenere;
il problema è che volevo che al comparire del segnale alto sul pin 13 la sequenza di attivazione delle uscite dovesse avvenire una volta sola (la durata del segnale alto sul pin 13 è più breve della durata della sequenza di attivazione delle4 4 uscite ), ed è per questo che ho usato il ciclo DO WHILE.
Al successivo comparire del livello alto sul pin 13 la sequenza di attivazione delle uscite una dopo l' altra si sarebbe dovuta riattivare di nuovo per una sola volta.
Quello che invece accade è che il ciclo ricomincia sempre immediatamente senza aspettare il segnale di comando di inizio che appunto è sul pin 13.

Ciao,
Alx67

In vece