Necesito obtener más entradas analógicas Arduino Uno

1

Estoy haciendo BattleShip en el Arduino:

2 x rejilla ((10x10 pulsadores) + (10x10 led 5mm)) 2 x rejilla ((interruptores de láminas 10x10) + (10x10 led 5mm))

Hice una cuadrícula de botones pulsadores de 10x10 configurando 10 botones seguidos con resistencias en cada botón. Al ponerlo en 5 voltios, cada botón le da a Arduino otro valor de voltio cuando se lo presiona.

En este caso, tengo 10 cables de 1 x 10x10 botones de cuadrícula. 4 redes totales (40 cables con entrada analógica)

ahora mi pregunta es cómo conectar esos cables de entrada analógica a Arduino UNO. ¿Puede ayudarme aquí? Gracias

/ e

Estoy usando 1 pin analógico para conectar 10 botones (en los botones del código 5).

Código:

para (int i = 0; i < 10; i ++) {

  if      ((voltage[i] >= 0.35) && (voltage[i] <= 0.50) && (gameStatus[i][0] == 0)){ gameStatus[i][0] = 2;}
  else if ((voltage[i] >= 0.35) && (voltage[i] <= 0.50) && (gameStatus[i][0] == 1)){ gameStatus[i][0] = 3;} 
  else if ((voltage[i] >= 1.40) && (voltage[i] <= 1.60) && (gameStatus[i][1] == 0)){ gameStatus[i][1] = 2;}
  else if ((voltage[i] >= 1.40) && (voltage[i] <= 1.60) && (gameStatus[i][1] == 1)){ gameStatus[i][1] = 3;}
  else if ((voltage[i] >= 2.40) && (voltage[i] <= 2.55) && (gameStatus[i][2] == 0)){ gameStatus[i][2] = 2;}
  else if ((voltage[i] >= 2.40) && (voltage[i] <= 2.55) && (gameStatus[i][2] == 1)){ gameStatus[i][2] = 3;}
  else if ((voltage[i] >= 3.65) && (voltage[i] <= 3.80) && (gameStatus[i][3] == 0)){ gameStatus[i][3] = 2;}
  else if ((voltage[i] >= 3.65) && (voltage[i] <= 3.80) && (gameStatus[i][3] == 1)){ gameStatus[i][3] = 3;}
  else if ((voltage[i] >= 4.30) && (voltage[i] <= 4.60) && (gameStatus[i][4] == 0)){ gameStatus[i][4] = 2;}
  else if ((voltage[i] >= 4.30) && (voltage[i] <= 4.60) && (gameStatus[i][4] == 1)){ gameStatus[i][4] = 3;}
}
    
pregunta Bart

2 respuestas

1

Como han dicho otros en los comentarios, probablemente haya mejores formas de hacerlo. Sin embargo, si está configurado para necesitar más entradas analógicas, la respuesta es simple: use un multiplexor analógico.

Puede utilizar el chip 74HC4067 para multiplexar las señales en el Arduino. Así es como funciona:

  • 16 canales entran en el chip
  • Solo sale uno
  • El Arduino controla el chip y le dice a cuál de los 16 canales emitir

Es básicamente como un gran interruptor.

En tu caso, tienes 40 cables. Puede usar 3 chips multiplexores, lo que le da un máximo de 48 canales en total, multiplexado en 3 entradas Arduino separadas, una para cada chip. En su software, escanearía rápidamente a través de cada multiplexor, buscando un botón presionando cada una de las 16 señales de entrada. Sin embargo, tenga en cuenta que la combinación de multiplexor analógico + Arduino ADC será mucho más lenta que una solución digital. Arduino tarda en convertir la tensión analógica en un valor digital. En el caso de presionar un botón, desea responder rápidamente. Considere todas sus opciones antes de seguir el camino de un multiplexor analógico.

Aquí hay un tutorial de Arduino relevante en el sujeto, utilizando el mismo chip.

    
respondido por el crocboy
1

Hablando de opciones digitales, puede usar el PCF8575 de TI. Es un expansor de E / S general de 16 canales con interfaz i2c. Tiene un pin de interrupción que puede utilizar para llamar a una interrupción en su código. La interrupción se restablece al leer o escribir en el chip (pág. 12). Puede usar múltiples chips en la misma línea i2c y usar interrupciones de cambio de pin para capturar las diferentes interrupciones de chips. Simplemente haga que la Rutina de servicio de interrupción (ISR) sea eficiente o es posible que no detecte varias entradas. La colocación cuidadosa de sus entradas asegurará que no tendrá este problema.

enlace

Buena suerte con tu juego. Lo digital es generalmente una buena manera de ir con cosas como esta. El ruido está en todas partes lol.

    
respondido por el MiscBob

Lea otras preguntas en las etiquetas