Problema con il RandomSeed

Ciao a tutti,
sto impazzendo da un mese, su uno sketch che dovrebbe far accendere 2 led alla volta contemporaneamente per 2 secondi, in modo randomico su un totale di 6 Led, attraverso un relè, per un totale di 90 secondi. Sono riuscito a farne accendere uno, ma sto impazzendo per il secondo, non sono molto esperto, ed è da pochi mesi che sto studiando il linguaggio di programmazione, ma non trovo nulla, e ho finito le idee, qualcuno sa dirmi se almeno è fattibile, copio per farvi capire lo sketch che sto usando:

[nobbc]
//random 6 led
int Cartello01  = 12;
int Cartello02  = 11;
int Cartello03  = 10;
int Cartello04  = 9;
int Cartello05  = 8;
int Cartello06  = 7;

int tempototale = 90;

  int numbers[] = { 12, 11, 10, 9, 8, 7};
  int length = sizeof(numbers) / sizeof(int);

void setup() {
  // declare pins to be an output:
  pinMode(Cartello01, OUTPUT);
  pinMode(Cartello02, OUTPUT);
  pinMode(Cartello03, OUTPUT);
  pinMode(Cartello04, OUTPUT);
  pinMode(Cartello05, OUTPUT);
  pinMode(Cartello06, OUTPUT);
  
  randomSeed(analogRead(0));

//Accensione tutti Led
  digitalWrite(12, LOW);   //accende
  digitalWrite(11, LOW);   //accende
  digitalWrite(10, LOW);   //accende
  digitalWrite(9, LOW);   //accende
  digitalWrite(8, LOW);   //accende
  digitalWrite(7, LOW);   //accende

delay(10000);

//Spegnimento tutti led
  digitalWrite(Cartello01, HIGH);    //spegne
  digitalWrite(Cartello02, HIGH);     //spegne
  digitalWrite(Cartello03, HIGH);    //spegne
  digitalWrite(Cartello04, HIGH);      //spegne
  digitalWrite(Cartello05, HIGH);    //spegne
  digitalWrite(Cartello06, HIGH);      //spegne

}

void loop()
 {

do
{

//Seleziona un cartello tra i 6
  int randomtarget1 = numbers[rand() % length];

// Spegne il LED e lo tiene spento
  digitalWrite(randomtarget1, LOW);   //Accende il led random
//Mette il sistema in pausa per un tempo random, dando l'illusione dello spegnimento temporizzato
  delay(2000);
//Riaccende il LED e riesegue il ciclo
  digitalWrite(randomtarget1, HIGH);   //Spegne il led random

tempototale = (tempototale-1);

} while (tempototale != 0);

  digitalWrite(Cartello01, HIGH);    //spegne
  digitalWrite(Cartello02, HIGH);    //spegne
  digitalWrite(Cartello03, HIGH);    //spegne
  digitalWrite(Cartello04, HIGH);    //spegne
  digitalWrite(Cartello05, HIGH);    //spegne
  digitalWrite(Cartello06, HIGH);    //spegne

//Spegni Arduino  
exit(0);
}
[/nobbc]

grazie mille anticipatamente !
Davide

per favore leggi le regole e correggi il tuo post per aggiungere tag di codice


Potresti mescolare la tua serie di pin led e accendere e spegnere i primi due, ad esempio

(codice non testato, digitato qui.)
il codice era qui...

Ciao intanto scusami, leggerò sicuramente come inserire il tag per il codice...

Appena riesco provo il codice che mi hai suggerito, l'unica cosa che a questo punto integrare è la tempistica, tutto questo deve girare per 90 minuti

Grazie ancora !

mi sembra un buon esercizio per te :slight_smile:
consiglio: puoi usare millis()

@Davide07 : Buongiorno, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ...

... poi, ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato, dopo di che ...

... in conformità al suddetto recgolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice (... fosse anche UNA sola riga) all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [nobbc] _il _tuo_ codice_ [/nobbc] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nel rispetto del citato regolamento nessuno ti potrà più rispondere (eventuali risposte verrebbero cancellate), quindi ti consiglio di fare il tutto al più presto.


@J-M-L : Cortesemente, in conformità al REGOLAMENTO della sezione Italiana del forum (… punto 13, primo capoverso), prima di rispondere ad un utente, verifica sempre che egli abbia effettuato la sua presentazione nell'apposito thread (qui da noi essa è obbligatoria). Grazie mille per la collaborazione :wink:

oops - poiché il forum non ha menzionato questo era il primo post di OP, pensavo che la presentazione fosse già stata fatta ... il mio errore ...

1 Like

Intanto ti ringrazio per l'aiuto dato, mi dispiace molto non aver fatto caso al regolamento, attualmente prima di reinserire qualcosa me lo leggerò tutto.
Attualmente ho effettuato la presentazione, mi dispiace averti portato ad un errore, nel rispondermi, non era mia intenzione
Un saluto Davide

Grazie. Come spiegato bene al punto 16.7 essa è utile per chi ti deve aiutare. Ora, cortesemente, sistema anche il codice come indicato :wink:

Guglielmo

Ciao Guglielmo, grazie mille, ho editato il messaggio e inserito il tag come richiesto :+1::+1::+1:
a presto
Davide

Emmm ... veramente NO ... devi sistemare il codice del tuo primo post come ho ben spiegato QUI, grazie.

Guglielmo

:grimacing::grimacing::grimacing: cosi dovrebbe essere corretto? anche perchè non ho "More --> Modify" ho la matita dell'editor :crossed_fingers::crossed_fingers::crossed_fingers:

Arrrrgggg ... mea culpa, era il vecchio forum che l'aveva, ora c'è la matitina :pencil2: ... :grin:

Ok, tutto a posto così come hai fatto, grazie ! :wink:

Guglielmo

byte ledPins[] = {12, 11, 10, 9, 8, 7};
const byte pinCount = sizeof ledPins / sizeof ledPins[0];

const byte ACCENDELED   = LOW;    // LED ON
const byte SPEGNERELED  = HIGH;   // LED OFF

// Fisher–Yates shuffle
void mescolarePins() {
  for (byte i = pinCount - 1; i > 0; --i) {
    byte r = random(0, i + 1);
    byte tmpSwap = ledPins[i];
    ledPins[i] = ledPins[r];
    ledPins[r] = tmpSwap;
  }
}

void setup() {
  randomSeed(analogRead(0)); 
  for (byte i = 0; i < pinCount; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], SPEGNERELED);
  }
}

void loop() {
  mescolarePins();
  digitalWrite(ledPins[0], ACCENDELED);
  digitalWrite(ledPins[1], ACCENDELED);
  delay(2000);
  digitalWrite(ledPins[0], SPEGNERELED);
  digitalWrite(ledPins[1], SPEGNERELED);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.