El banco de pulsadores Arduino hecho a sí mismo no funciona

Así que estoy tratando de hacer un teclado de 5 teclas como un circuito, pero con una mayor sensación táctil, así que olvidé los botones reales comprados en la tienda. Arreglé llaves con papel de aluminio y piezas de plástico y las conecté a 5V. Todos los botones comparten este 5V. Luego, hice algunas almohadillas de contacto de papel de aluminio que tienen un cable intercalado entre dos capas. Este cable tenía dos cables, uno que se conectaba a una de las E/S digitales y otro que se conectaba a una resistencia que luego se conectaba a tierra. Todos los contactos comparten la resistencia (y por lo tanto la tierra). Entonces, cuando la pieza de plástico se conecta con la pieza intercalada, se convierte en un botón. Esto funciona, lo he probado. Lo que no puedo arreglar es que si solo conecto el pin para Digital 2, luego presiono cualquier botón, no solo el que está conectado al pin 2, registra una pulsación.

ingrese la descripción de la imagen aquí

Aquí está el código que uso para verificar las prensas:

int ledPin = 13; 
int val = 0;     

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);  
  for(int x = 2;x<6;x++){
  pinMode(x, INPUT);  
  }

}

void loop(){
  /*for(int x = 2;x<6;x++){
  val = digitalRead(x); 
  if (val == HIGH) {        
    digitalWrite(ledPin, LOW);  
    Serial.println(x);
  } else {
    digitalWrite(ledPin, HIGH);  
  }
  }*/
  if(digitalRead(2) == HIGH){
    Serial.println("2");
    digitalWrite(ledPin, LOW);  
  } else {
    digitalWrite(ledPin, HIGH);  
  }

}

La parte comentada estaba destinada a verificar las 5 conexiones, mientras que la parte no comentada solo verifica el pin 2.

Respuestas (1)

Necesitas tener una resistencia por botón. Si no lo hace, cualquier pulsación de tecla elevará el nodo común a +5 V y todos registrarán la pulsación de tecla.

Entonces, ¿necesitaría una resistencia individual para todos los contactos? ¿Se pueden conectar a una tierra común? Además, ¿tienen que tener diferentes resistencias?
So I would need an individual resistor to all contacts? SI Can they be connected to a common ground? SI Also, do they have to have different resistances? NO
Solo un comentario final antes de volver a soldar los contactos, ¿alguno de ustedes puede explicar por qué funciona esta solución? Creo que lo entiendo, pero quiero una confirmación. Al tener una resistencia en cada almohadilla de contacto, ¿garantiza que cada almohadilla aumente la resistencia en cierta cantidad? Entonces, ¿la entrada digital puede leer si el voltaje cambió en una cierta cantidad y solo lee para ese pin?
Las resistencias evitan que haya un nodo común entre todos los interruptores, evitando así que todos tengan el mismo voltaje al mismo tiempo.
@ nadjatee1996, si observa detenidamente el dibujo, Digital2 está en cortocircuito directamente con Digital3, y su conexión en cortocircuito se reduce a través de su resistencia. Si Digital3 está "activado", se entregan +5 V al cortocircuito entre Digital2 y Digital3.
Gracias, ahora funciona. Aunque solo una pregunta más. ¿Cómo sabe el pin digital qué voltaje está leyendo? Entonces, si un pad es de 4,8 V y el otro de 4,5 V, ¿cómo sabe el pin cuál leer?
El pin leerá el voltaje del nodo al que está conectado. Y los nodos solo pueden tener un solo voltaje.