Selbstgebaute Arduino-Drucktastenbank funktioniert nicht

Also versuche ich, eine 5-Tasten-Tastatur wie eine Schaltung zu machen, aber mit erhöhtem taktilem Gefühl, also habe ich auf im Laden gekaufte Drucktasten verzichtet. Ich habe Schlüssel mit etwas Aluminiumfolie und Plastikstücken aufgerüstet und diese an 5V angeschlossen. Alle Tasten teilen sich diese 5V. Dann habe ich einige Kontaktpads aus Aluminiumfolie hergestellt, die eine Leitung zwischen zwei Schichten haben. Diese Leitung hatte zwei Drähte, einen, der mit einem der digitalen E / A verbunden war, und einen, der mit einem Widerstand verbunden war, der dann mit Masse verbunden war. Alle Kontakte teilen sich den Widerstand (und damit Masse). Wenn also das Plastikteil mit dem Sandwichteil verbunden wird, wird es zu einem Knopf. Das funktioniert, ich habe es ausprobiert. Was ich nicht beheben kann, ist, dass, wenn ich nur den Pin für Digital 2 anschließe und dann eine beliebige Taste drücke, nicht nur die an Pin 2, ein Drücken registriert wird.

Geben Sie hier die Bildbeschreibung ein

Hier ist der Code, den ich verwende, um nach Pressen zu suchen:

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);  
  }

}

Der kommentierte Teil sollte nach allen 5 Verbindungen suchen, während der unkommentierte Teil nur nach Pin 2 sucht.

Antworten (1)

Sie müssen einen Widerstand pro Taste haben. Wenn Sie dies nicht tun, erhöht jeder Tastendruck den gemeinsamen Knoten auf +5 V und alle registrieren den Tastendruck.

Also bräuchte ich einen einzelnen Widerstand für alle Kontakte? Können sie an eine gemeinsame Masse angeschlossen werden? Müssen sie auch unterschiedliche Widerstände haben?
So I would need an individual resistor to all contacts? JA Can they be connected to a common ground? JA Also, do they have to have different resistances? NEIN
Nur eine letzte Bemerkung, bevor ich die Kontakte weiterlöte, kann einer von euch erklären, warum diese Lösung funktioniert? Ich glaube, ich verstehe es, aber ich möchte irgendwie eine Bestätigung. Wird durch einen Widerstand an jedem Kontaktpad sichergestellt, dass jedes Pad den Widerstand um einen bestimmten Betrag erhöht? Der Digitaleingang kann also lesen, ob sich die Spannung um einen bestimmten Betrag geändert hat, und nur für diesen Pin lesen?
Die Widerstände verhindern, dass es einen gemeinsamen Knoten zwischen allen Schaltern gibt, wodurch verhindert wird, dass sie alle gleichzeitig die gleiche Spannung erhalten.
@ nadjatee1996, wenn Sie sich die Zeichnung genau ansehen, wird Digital2 direkt mit Digital3 kurzgeschlossen, und ihre kurzgeschlossene Verbindung wird über Ihren Widerstand heruntergezogen. Wenn Digital3 „betätigt“ ist, werden +5V an den Kurzschluss zwischen Digital2 und Digital3 geliefert.
Danke, es funktioniert jetzt. Nur noch eine Frage. Woher weiß der Digital-Pin, welche Spannung er liest? Wenn also ein Pad 4,8 V und das andere 4,5 V hat, woher weiß der Pin, für welchen zu lesen ist?
Der Pin liest die Spannung des Knotens, mit dem er verbunden ist. Und Knoten können nur eine einzige Spannung haben.