encendido de led aleatorio (SOLUCIONADO)

buenas, estoy usando la funcion random() para encender led aleatoriamente , lo cual hace pero no me los apaga quedan prendidos.

int matriz[]{8,9,10,11,12};
int cont =5;
int tiempo=300;

void setup()
{
	Serial.begin(9600);
	for(int pin=0; pin<=cont; pin++){
		pinMode(pin, OUTPUT);

		randomSeed(analogRead(0));
	    
	}
}

void loop()
{
	int rnd=random(8,13);
	analogWrite(rnd, HIGH);
	delay(tiempo);
	analogWrite(rnd, LOW);
	delay(tiempo);

	Serial.print("RND");
	Serial.println(rnd);
}

Hola, yo creo que tienes que cambiar el analogWrite por digitalWrite ya que vas a usar estados high y low.

ya probe y ahi no me funciona nada

Ahora mismo no tengo unos leds a mano para montar un circuito pero prueba esto a ver que te hace

long randNumber;

void setup(){
  Serial.begin(9600);

  randomSeed(analogRead(0));
}

void loop() {

  randNumber = random(8, 13);
  Serial.println(randNumber);


  digitalWrite(randNumber, HIGH);
  delay(500);
  digitalWrite(randNumber, LOW);
  delay(500);

  delay(50);
}

le pusiste a los leds resistencias pull-down?

ok gracias, basicamente estoy probando el con delay ya lo hice funcionar, ahora estoy con millis(), que me funciona bastante bien.

int pin;
int matriz[]{8,9,10,11,12};
int cont = 5;  
int timer=150;
unsigned long inicia=0;
int estado=0;
 
void setup(){
 for (int pin=0; pin<=cont; pin++){
  pinMode (matriz[pin], OUTPUT);
 }
  
 randomSeed(analogRead(0));  
}

           
void loop () {


unsigned long currentmillis = millis();

if(currentmillis - inicia >=timer){
	inicia = currentmillis;

 
if (estado==0){
    estado = 1;} 
    else estado =0; 

int rnd = random(8, 13);
 
digitalWrite(rnd,estado);
}
}

y otra manera de hacer el void loop que encontre es esta, que es usando !digitalread que es leer el pin y cambiar el estado, que me la enseño surbyte.

void loop () {


unsigned long currentmillis = millis();

if(currentmillis - inicia >=timer){
	inicia = currentmillis;

int rnd = random(8, 13);
 
digitalWrite(rnd,!digitalRead());
}
}

Claro, eso es para hacer cambios de estado aleatorios, pero...

Lo que tu proponias al principio es:

Me voy a un pin aleatorio - Encender - Delay - Apagar - Delay y vuelta a empezar en otro pin aleatorio diferente.

Lo que propones ahora es:

Me voy a un pin aleatorio - lo cambio de estado - me voy a otro pin aleatorio - lo cambio de estado
me voy a otro pin aleatorio - lo cambio de estado - me voy a otro pin aleatorio - lo cambio de estado ...

Si es tambien aleatorio el anterior, con la diferencia que lo enciende y lo apaga, aca lo enciende y lo apaga cuando repite el pin.

cambio mi post anterior para concretar mas.

lo que pasa que de la otra manera uso el delay() que no me convence mucho.

Parece que el delay tiene muy mala fama por aqui jejejejeje.

A ver que tal asi

int pin;
int cont  = 5;  
int matriz[cont][2]   = {8,  0},
                        {9,  0},
                        {10, 0},
                        {11, 0},
                        {12, 0};


int timer = 150;
unsigned long inicia=0;
bool estado = 0;
 
void setup(){
  for (int pin = 0; pin <= cont; pin++){
      pinMode (matriz[pin][0], OUTPUT);
  }
  randomSeed(analogRead(0));  
}

           
void loop () {

    unsigned long currentmillis = millis();

    if (currentmillis - inicia >=timer) {
        inicia = currentmillis;

        int rnd = random(0, cont-1);
        matriz_estado[rnd][1] = !matriz_estado[rnd][1]; // cambio el estado de ese led
        digitalWrite(matriz[rnd][0], matriz_estado[rnd][1]);
    }
}

he puesto en una matriz las dos cosas, por un lado el pin que puede ser cualquiera no necesariamente correlativo y ademas el estado
Entonces cuando cambies el estado de algo será de ESE pin

gracias surbyte, se agrando el codigo, bolean no lo tenia visto, tampoco pinmode(matriz[pin][0], OUTPUT) me refiro al [0]

gracias surbyte, modifique

int pin;
int cont  = 6;  
int matriz[6][2]   = {                                      //puse un 6 porque con la variable cont me daba error, y el seis para que me llegue al pin 12, lo importante que voy aprendiendo dia a dia y eso me alegra.
                    {8,  0}, 
                    {9,  0}, 
                    {10, 0}, 
                    {11, 0}, 
                    {12, 0}
                     };


int timer = 150;
unsigned long inicia=0;
bool estado = 0;
 
void setup(){
  for (int pin = 0; pin <= cont; pin++){
      pinMode (matriz[pin][0], OUTPUT);
  }
  randomSeed(analogRead(0));  
}

           
void loop () {

    unsigned long currentmillis = millis();

    if (currentmillis - inicia >=timer) {
        inicia = currentmillis;

        int rnd = random(0, cont-1);
      matriz[rnd][1] = !matriz[rnd][1]; // cambio el estado de ese led
      digitalWrite(matriz[rnd][0], matriz[rnd][1]);
    }
}

siguiendo, como funciona esto

 int rnd = random(0, cont-1);  ACA LO PONE  HIGH O LOW??
      
matriz[rnd][1] = !matriz[rnd][1];   // cambio el estado de ese led
      digitalWrite(matriz[rnd][0], matriz[rnd][1]); de donde o como hace el random con los pines porque yo usaba int rnd = random(6, 13);
int rnd = random(0, cont-1);  ACA LO PONE  HIGH O LOW??

En tu código cont vale 5 de modo que cont-1 vale 4
random(0, 4) establece un valor aleatorio entre 0 y 4.
Con ese valor elijo que estado cambiaré y con que pin trabajo.

matriz[rnd][1] = !matriz[rnd][1];   // cambio el estado de ese led

Aquí puede lucir confuso pero es una matriz de la que solo pienso en la parte de la matriz que apunta al estado [1]. Recuerda que tiene dos dimensiones la [0] y la [1].
La [0] tiene todos los pines y la [1] los estados de esos pines.
Lo demas ya lo conoces. es como

estado = !estado;

el valor que tenga el elemento de la matriz se invierte y ese valor queda almacenado.

digitalWrite(matriz[rnd][0], matriz[rnd][1]);
y aca juego con las dos variables con el pin que corresponde al valor de rnd y con su estado.

pinMode (matriz[pin][0], OUTPUT), esto lo tomo del setup, el [0], apunta a la zona de la matriz de los numeros de los pin? si quisiera que todos los pin inicien a pagados desde el setup?

digitalWrite(matriz[rnd][0], matriz[rnd][1]) aca no se como lee los pines ya que no tengo un random para ellos, solo veo el random(0, (cont-1)), low o high, y de donde sava el random(8,12) que serian los numeros de los pines.

Adrian_E:
esto lo tomo del setup, el [.0], apunta a la zona de la matriz de los numeros de los pin? si quisiera que todos los pin inicien a pagados desde el setup?

Claro cuando tienes una matrix X filas Y columnas, en este caso es 5 filas y 2 columnas.
Cada elemento es identificado por ambas coordenadas.

int matriz[6][2]   = {{8,  0}, 
                      {9,  0}, 
                      {10, 0}, 
                      {11, 0}, 
                      {12, 0}};

Se que te puede parecer complejo pero ayuda tener todo junto porque luego cuando quiero el estado lo tengo ahi como un elemento de la misma fila.

Veamos ahora solo quiero saber que dato tiene cada elemento
matriz[0][0] => 8 matriz[0][1] => 0
matriz[1][0] => 9 matriz[0][1] => 0
matriz[2][0] => 10 matriz[0][1] => 0
matriz[3][0] => 11 matriz[0][1] => 0
matriz[4][0] => 12 matriz[0][1] => 0

entonces si quiero barrer los pines que hago... uso matriz[rnd][0] eso si rnd cambia de 0 a 4 me dara el valor del pin

si quiero ver el estado uso matriz[rnd][1] y tendre el estado de cada fila.
Simple no?

si señor simple, cuando te lo explican bien, gracias