Random con 3 leds

Busqué bastante en el foro y no encontré ninguna entrada que resolviera mi problema. Tengo 3 leds conectados a dos pulsadores. Lo que debo hacer es, que cuando toque un pulsador prenda un led, cuando toque el otro prendan los otros dos y cuando toque los dos pulsadores al mismo tiempo se prenda un led random. Este es mi código que, obviamente, no está funcionando. A ver si alguien le encuentra el error.
Gracias!

int buttonPin1 = 6;
int buttonPin2 = 2;
int ledPin1 = 7;
int ledPin2 = 3;
int ledPin3 = 13;
int buttonState1 = 0;
int buttonState2 = 0;

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
Serial.begin(9600);

}

void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
digitalWrite(ledPin1, buttonState1);
digitalWrite(ledPin2, buttonState2);
digitalWrite(ledPin3, buttonState2);
int rnd = random(1,4);
long ledPin1 = 1;
long ledPin2 = 2;
long ledPin3 = 3;

if (buttonState1 == HIGH & buttonState2 == HIGH) {
// Se prende led aleatorio:
digitalWrite(rnd, HIGH);

} else {
// turn LED off:
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);

if (rnd = 1) {
digitalWrite(ledPin1, HIGH);
}else {
//apagar el led
digitalWrite(ledPin1, LOW);
}
if (rnd = 2) {
digitalWrite(ledPin2, HIGH);
}else {
//apagar el led
digitalWrite(ledPin2, LOW);
}
if (rnd = 3) {
digitalWrite(ledPin3, HIGH);
}else {
//apagar el led
digitalWrite(ledPin3, LOW);
}

if (buttonState1 == HIGH) {
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
}
if (buttonState2 == HIGH) {
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
} else {
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
}
Serial.print("Estado del pulsador 1: ");
Serial.println(buttonState1);
Serial.print("Estado del pulsador 2: ");
Serial.println(buttonState2);
delay(1); // delay in between reads for stability
}
}

Primero de todo, te recomiendo que pongas el código como se debe o te llevarás un aviso de los moderadores.

mitziann:

int ledPin1 = 7;

int ledPin2 = 3;
int ledPin3 = 13;






long ledPin1 = 1;
long ledPin2 = 2;
long ledPin3 = 3;

Como verás esto da error seguro, doble definición de variable.

Además deberías tener en cuenta el "rebote" de los pulsadores, a la velocidad de un microprocesador tu pulso normal puede dar 10 o 12 pulsaciones en el código, deberías poner unos retrasos en las lecturas.

  if (buttonState1 == HIGH & buttonState2 == HIGH) {
    // Se prende led aleatorio:
        digitalWrite(rnd, HIGH);
       
     } else {
    // turn LED off:
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);

Si no se cumple esto siempre están apagados, pulses el 1 o el 2.

El resto del código es más o menos lo mismo, tienes que tener cuidado con los elses, porque le estás diciendo al código todo el rato que apague los leds si no se cumple algo, a la velocidad que va el código sólo funcionará a modo de parpadeo a lo sumo.

Por ejemplo si pulsas el pulsador1 pero rnd es 3 el if de pulsador le dice que se encienda pero el de rnd que se apague y el de doble pulsador también lo apaga.