Comando tipo random

Hola, tengo un problema, yo estoy haciendo un juego de desactivar una bomba, y uno de los "minijuegos" es desconectar un cable al azar y, si ese cable es el correcto que aparezca algo en una pantalla lcd (eso ya me arreglo yo), pero en caso de ser incorrecto que suene un buzzer y en la pantalla lcd aparezca "Error".

Bueno, ahora mi pregunta es, como puedo hacer que al desconectar un cable suene un buzzer?

El relé de 5v lo tengo y no se si me conviene o no ponerlo. (La parte de los cables esta recuadrada en rojo a la derecha)

La idea seria que aleatoriamente se elija un cable, el cual va a ser el correcto, y si el usuario desconecta el incorrecto suene el buzzer y se reinicie. ¿Que comandos uso? ¿Como lo puedo hacer?

No se si me explico, gracias desde ya

Colocas los pines a leer como elementos de un vector asi

const byte cable[] = {23,24,25,26,27,28,29,30,31,32};

luego los defines como entradas del tipo INPUT_PULLUP o sea aprovechas la opción mas simple y los conectas todos a GND

en el setup defines asi

void setup() {
    for (byte i=0; i<sizeof(clabe); i++) {
          pinMode(i, INPUT_PULLUP);            // esto los define como entradas del tipo INPUT_PULLUP
    }
}

ahora te queda armar algo al azar usando random entre 23 y 32

con lo cual el cable o pin que dispare el buzzer será ese

y por ultimo una rutina parecida al setup usando digitalRead(pin) y cuando el pin este en HIGH lo comparas con el elegido al azar y si es buzzer ON y sino nada.

Este es un código ejemplo con random

long randNumber;

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

  // if analog input pin 0 is unconnected, random analog
  // noise will cause the call to randomSeed() to generate
  // different seed numbers each time the sketch runs.
  // randomSeed() will then shuffle the random function.
  randomSeed(analogRead(0));
}

void loop() {
  // imprime numeros random desde 23 a 32
  randNumber = random(23, 32);
  Serial.println(randNumber);

  delay(50);
}

Recuerda que para leer el valor de un índice no puedes usar ese randNumber sino que debes usar el valor random referenciado o restado de 23.

Gracias lo voy a intentar, y una pregunta mas, como hago para relacionar los buzzers? hay alguna libreria en especifico? (Tengo los comunes, no los especificos para arduino)

No necesitas ninguna librería para hacer esto.

No se si esta bien, yo hice esto que me parecio mas sencillo (aunque lo que vos me pusiste del for es mas corto)

int cable1 = 44;
  int cable2 = 45;
  int cable3 = 46;
  int cable4 = 47;
  int cable5 = 48;
  int cable6 = 49;  
  int cable7 = 50;
  int cable8 = 51;
  int cable9 = 52;
  int cable10 = 53;

  pinMode(cable1, INPUT_PULLUP);
  pinMode(cable2, INPUT_PULLUP);
  pinMode(cable3, INPUT_PULLUP);
  pinMode(cable4, INPUT_PULLUP);
  pinMode(cable5, INPUT_PULLUP);
  pinMode(cable6, INPUT_PULLUP);
  pinMode(cable7, INPUT_PULLUP);
  pinMode(cable8, INPUT_PULLUP);
  pinMode(cable9, INPUT_PULLUP);
  pinMode(cable10, INPUT_PULLUP);

Despues en la parte del juego

randNumber1 = random(44, 53); // Genero numero de cable al azar
        valorGuardado = randNumber1; // Guardo en variable el numero de cable
        Serial.println(valorGuardado); // Lo muestro en el puerto serial
        numCable= valorGuardado;//

Ahora, mi problema es que al general un numero al azar (ademas de mostrar siempre el 48 en el puerto serial), probé con ifs, for, no se si lo aplico mal o que, pero en ninguno me reconoce que estoy desconectando el cable que esta en la entrada 48, que puede ser? como puedo hacer la pregunta de cual estoy pulsando?

Perdon por tantas preguntas, soy medio nuevo en esto de arduino y encima en mi escuela me exigen mucho sin explicarme tanto :l

PD: Las variables como valorGuardado o numCable estan declaradas

Si pero es el modo paso a paso y no tiene nada de automatización.
Si tenés muchos cables la forma es que algo barra o escanee todo de una vez y no que tenga que preguntar a cada uno estas HIGH, Si o no? Estas HIGH si o no? asi 20 veces

Si tu mismo te das cuenta que usar el for es mas veloz y simple, porque no lo usas?

surbyte:
Si pero es el modo paso a paso y no tiene nada de automatización.
Si tenés muchos cables la forma es que algo barra o escanee todo de una vez y no que tenga que preguntar a cada uno estas HIGH, Si o no? Estas HIGH si o no? asi 20 veces

Si tu mismo te das cuenta que usar el for es mas veloz y simple, porque no lo usas?

Claro entendi lo del for, pero lo de:

surbyte:
Si tenés muchos cables la forma es que algo barra o escanee todo de una vez y no que tenga que preguntar a cada uno estas HIGH, Si o no? Estas HIGH si o no? asi 20 veces

Me dijeron que ahí me conviene usar otro for, se como funciona pero no se como aplicarlo a lo que necesito

@ArduMyth
Gracias por ayudarme, a lo que me puso @surbyte le tengo que agregar esto?

#define SIZE(x) (sizeof(x) / sizeof(x[0]))
const byte cablesPosibles[] = {44,45,46,47,48,49,50,51,52,53};
byte cableDetonador;
bool bombaDesactivada;
 
void setup() {
  Serial.begin(9600);
  for(byte i = 0; i < SIZE(cablesPosibles); i++){
    pinMode(cablesPosibles[i], INPUT_PULLUP);  
  }
  randomSeed(analogRead(0));
  cableDetonador = cablesPosibles[random(SIZE(cablesPosibles))];
  Serial.println("El cable detonador es:" + String(cableDetonador));
}

o simplemente lo reemplazo?

La parte del juego sería asi si reemplazo supongo, y si, puede haber muchas lineas innecesarias pero bueno como lo dije soy nuevo en esto

  case '2':  
    randomSeed(analogRead(0));
    cableDetonador = cablesPosibles[random(SIZE(cablesPosibles))];
    Serial.println("El cable detonador es:" + String(cableDetonador));
        delay(200); 
        lcd.setCursor(16,1); 
        //lcd.clear();
        lcd.write ("2");
        delay(300);
        lcd.clear();
        lcd.setCursor(0,1);
        lcd.print("Cargando Juego 2...");
        lcd.setCursor(0,0);
        delay(1500);
        lcd.print("                                                 ");
        lcd.clear();
        lcd.print("                                                 ");
        lcd.clear();
        lcd.print("Desconecta un cable");
        randNumber1 = random(44, 53); // Genero numero de cable al azar
        valorGuardado = random(44, 53); // Guardo en variable el numero de cable
        numCable = valorGuardado;//}
  if(!bombaDesactivada){
    for(byte i = 0; i < SIZE(cablesPosibles); i++){
      if(digitalRead(cablesPosibles[i]) && cablesPosibles[i] == cableDetonador ){
        bombaDesactivada = true;
        Serial.println("Desactivada");
      }
    }
  }
  
        break;

Lo siento por hacerles perder tiempo en algo que seguramente es muy tonto, es que ya no me queda donde recurrir

@ArduMyth lo del "case 2" es porque son varios juegos, pero ahora estoy con este.

Una de las cosas que no entendí es la corrección del codigo a @surbyte(lo de modificar el i por el array[ i ], ya que yo use ese codigo para definir las entradas al final) y lo de pin_pullup, no se supone que ya lo habia declarado como entrada todos los posibles cables?

Para que te quites la duda, la observación de ArduMyth es correcta.
Respondo online sinprobar cosas y se escapan errores que a veces espero que el lector (tu) pueda resolver pero esta vez no fue deliberado.