Encendido leds aleatorio

Buenas noches, quisiera saber si me podrian dar una mano, tengo un pulsador y 2 leds, 1 rojo y otro azul.
Entonces quiero presionar el pulsador y que al hacer esto se prenda uno de los dos, cualquiera, y bueno luego se apague, pero que este proceso sea aleatorio, por ejemplo que el 30% de las veces prenda el rojo, y el 70% el azul..
Es muy complicado?
No soy experto en arduino, quiero hacer un juego para mi hijo!

Gracias y saludos!

Leíste las Normas del foro?

Para hacer lo que quieres podrias usar random() pero eso te da 50-50 no 30-70

Disculpa, esto es lo que voy haciendo y se podria decir que lo consegui, dejo el codigo para ver que me recomiendan o como lo puedo mejorar, la idea como dije es tener dos leds, uno verde y otro rojo, pero que salga el 70% rojo y el resto verde, aleatoriamiente.
Con la funcion random supongo que sale con el porcentaje que me dijiste, y vi que siempre se repite la misma rutina cada vez que lo reinicio al arduino.
Luego hice otro programa sin radom, mas que nada la rutina que haria siempre consiguiendo asi el porcentaje querido, pero bueno, no soy experto en arduino y a lo mejor me equivoque en algo o hay una manera mejor de resolverlo gracias.

//Programa Aleatorio Semaforo Led
long numero;
int LED=2;
int LED2=4;
int PUL=7;

void setup() {
  
  
  Serial.begin(9600);
  
  
  
  pinMode(LED2,OUTPUT);
  pinMode(LED,OUTPUT);  
  digitalWrite(LED,LOW);
  digitalWrite(LED2,LOW); 
}

 

void loop() {

  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  numero = random(1,3);//guardamos un numero al azar elegido por arduino en la variable "numero"
  if (numero==1){
    digitalWrite(LED,HIGH);//si el numero es 1, enciende el led1
    
  }
  else{
    digitalWrite(LED2,HIGH);//si no es 1 enciende el led 2
      }
  delay(2000);//espera 2 segundos y apago los leds y se repite el ciclo
  digitalWrite(LED,LOW);
  digitalWrite(LED2,LOW);
  
  
  
  
}

el otro codigo

//Programa Aleatorio Semaforo Led
long numero;
int LED=2;
int LED2=4;
int PUL=7;

void setup() {
  pinMode(LED2,OUTPUT);
  pinMode(LED,OUTPUT);  
  digitalWrite(LED,LOW);
  digitalWrite(LED2,LOW);
}

 
//Bucle principal
void loop() {

  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);
  digitalWrite(LED2,HIGH);
  delay(2000);
  digitalWrite(LED2,LOW);
  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);
  digitalWrite(LED2,HIGH);
  delay(2000);
  digitalWrite(LED2,LOW);
   while(digitalRead(PUL)==0);
  digitalWrite(LED2,HIGH);
  delay(2000);
  digitalWrite(LED2,LOW);
  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);//Repite este ciclo hasta que ve un 1, y luego continua
  digitalWrite(LED,HIGH);
  delay(2000);
  digitalWrite(LED,LOW);
  while(digitalRead(PUL)==0);
  digitalWrite(LED2,HIGH);
  delay(2000);
  digitalWrite(LED2,LOW);
  
  
}

Hola, eso es bastante simple solo tienes que generar una función random mayor y luego la divides en el % que tu quieras.

La función random(min,max) genera números enteros entre min y max-1 y si tu la generar muchas veces encontraras que obtendrás el mismo numero de ocurrencias de cada dígito, como te dice Surbyte. Pero si luego repartes esos números de manera que logres el desbalance que deseas en tu caso: 30-70% funciona muy bien.

Ahora te explicare otro problema y es que la función random en realidad es un "seudo random", haciendo que comience en un punto arbitrario en su secuencia aleatoria. Esta secuencia, aunque es muy larga y aleatoria, siempre es la misma. Por eso debes usar otra función llamada semilla.

Luego en este caso no tiene importancia porque tu código es muy simple, pero es una buena practica evitar en lo posible crear variables globales y de preferencia que sean solo de 1 byte si es posible.

Mira y analiza este código que te propongo:

const byte LED=2;
const byte LED2=4;
const byte PUL=7;

void setup() {
	Serial.begin(9600);
	pinMode(LED2, OUTPUT);
	pinMode(LED, OUTPUT);
        pinMode(PUL,INPUT_PULLUP);  //Para pulsador  
	digitalWrite(LED, LOW);
	digitalWrite(LED2, LOW); 
	randomSeed(analogRead(0));  //Cambia la semilla cada vez
}

void loop() {
   while(digitalRead(PUL)==0){}
      byte numero = random(1,11);   //Genera numeros aleatorios de 1 a 10
      if (numero <=7){
         digitalWrite(LED, HIGH);        //si es menor o igual a 7 (70%), enciende el led		
      }else{
         digitalWrite(LED2, HIGH);      //si es 8, 9 o 10 (30%), enciende el led2
      }
      delay(2000);
      digitalWrite(LED, LOW);
      digitalWrite(LED2,LOW);
   }
}

Buen dia, según lo que entendí en tu primer post lo que quieres que cuando se presione un botón, se encienda al azar uno de los 2 led y que uno tenga mas probabilidad que otro. Bueno no creo que ninguno de los 2 codigos que tienes haya funcionado, te voy a decir porque: No declaras el pinMode del Pulsador, a los while no les pones llaves, en su lugar pusiste ; ademas que cuando presiones el botón no va a pasar nada.
Ahora pasando a la forma de hacerlo se me ocurrieron 2
Usando ramdom() que quiza la probabilidad no este muy correcta pero funciona

//Programa Aleatorio Semaforo Led
long numero;
const byte LedRojo = 2;
const byte LedAzul = 4;
const byte PUL = 7;
bool estadoPulsador = false;
bool estadoAntPulsador = false;


void setup() {

  Serial.begin(9600);
  pinMode(PUL, INPUT);
  pinMode(LedRojo, OUTPUT);
  pinMode(LedAzul, OUTPUT);
  digitalWrite(LedRojo, LOW);
  digitalWrite(LedAzul, LOW);
  randomSeed(analogRead(0));     //Esto es para que cada que enciendas el arduino comienze con un numero diferente
}


void loop() {

  estadoPulsador = digitalRead(PUL);
  numero = random(1, 101);              //esto igual lo podrias hacer de 1 al 11

  if (estadoPulsador && !estadoAntPulsador) {

    Serial.println(numero);

    if (numero < 31)
      digitalWrite(LedRojo, HIGH);     //con esto le das menos probabilidad al led rojo

    else
      digitalWrite(LedAzul, HIGH); 

    delay(2000);//espera 2 segundos y apago los leds y se repite el ciclo
    digitalWrite(LedRojo, LOW);
    digitalWrite(LedAzul, LOW);
  }
  estadoAntPulsador=estadoPulsador;
  
}

Y este que solo suma en uno cada paso del loop y cuando presionas el boton toma el numero

//Programa Aleatorio Semaforo Led
byte numero = 1;
const byte LedRojo = 2;
const byte LedAzul = 4;
const byte PUL = 7;
bool estadoPulsador = false;
bool estadoAntPulsador = false;


void setup() {

  Serial.begin(9600);
  pinMode(PUL, INPUT);
  pinMode(LedRojo, OUTPUT);
  pinMode(LedAzul, OUTPUT);
  digitalWrite(LedRojo, LOW);
  digitalWrite(LedAzul, LOW);
  
}


void loop() {

  estadoPulsador = digitalRead(PUL);

  numero ++;

  if (numero > 100)       //Tambien puedes usar el 10 o 1000 o 10000
    numero = 1;


  if (estadoPulsador && !estadoAntPulsador) {

    Serial.println(numero);

    if (numero < 31)         //con esto le das menos probabilidad al led rojo 
      digitalWrite(LedRojo, HIGH); 

    else
      digitalWrite(LedAzul, HIGH); 

    delay(2000);//espera 2 segundos y apago los leds y se repite el ciclo
    digitalWrite(LedRojo, LOW);
    digitalWrite(LedAzuL, LOW);
  }
   estadoAntPulsador=estadoPulsador;
  
}

Analiza los codigos para que los comprendas y comenta, en este momento mientras escribo alguien mas te esta contestando, quiza tenga algo mejor que lo que aqui expongo, esto lo hice para darte una idea de como lo puedes hacer