38 Taster auf 4 Analog Pins entprellen

Hi

Aktuell versuche ich ein Projekt neu zu gestalten und würde gerne 38 Taster über 4 Analog Pins nutzen wollen um dann über 3 von 8 Pins ein HIGH auszugeben (Pro Taster eine 3er Kombination)
wollte ganz gerne, wie auf der Steckplatine ersichtlich, über eine Widerstandskette unterschiedliche Spannungen auslesen.
Einen fertigen Code habe ich noch nicht und lade daher erst mal meinen Test Code mit hoch.



const int ledPin4 = 13;
const int ledPin3 = 12;
const int ledPin2 = 11;
const int ledPin1 = 10;


void setup() {
  
  Serial.begin(9600);
  pinMode (ledPin4, OUTPUT);
  pinMode (ledPin3, OUTPUT);
  pinMode (ledPin2, OUTPUT);
  pinMode (ledPin1, OUTPUT);
  pinMode (A0, INPUT);
}


void loop() {
  
  int A0 = analogRead(A0);
    if  (A0 > 900 && A0 < 1100) {
  
      digitalWrite(ledPin4, HIGH);
      digitalWrite(ledPin3, HIGH);
      digitalWrite(ledPin2, HIGH);
      Serial.print(A0);
      Serial.println(A0);
  } else {
    
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin2, LOW);
  }


if  (A0 > 800 && A0 < 900) {
  
      digitalWrite(ledPin4, HIGH);
      digitalWrite(ledPin3, HIGH);
      digitalWrite(ledPin1, HIGH);
      Serial.print(A0);
      Serial.println(A0);
  } else {
    
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin1, LOW);
  }


if  (A0 > 550 && A0 < 700) {
  
      digitalWrite(ledPin4, HIGH);
      digitalWrite(ledPin2, HIGH);
      digitalWrite(ledPin1, HIGH);
      Serial.print(A0);
      Serial.println(A0);
  } else {
   
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin1, LOW);
  }


  if  (A0 > 300 && A0 < 450) {
  
      digitalWrite(ledPin3, HIGH);
      digitalWrite(ledPin2, HIGH);
      digitalWrite(ledPin1, HIGH);
      Serial.print(A0);
      Serial.println(A0);
  } else {
    
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin1, LOW);
  }






  
      delay(5);        
}

Ich verwende ein Nano Bord und würde 4 Gruppen an Tastern Parallel schalten und am ende alle auf GND über 10k und habe mir gedacht das ganze mit Gleichrichter Dioden abzusichern damit das Signal das für Pin A0 bestimmt ist nicht auf Pin A1 gehen kann da alle über 1 GND laufen.

Zu meinem Problem:
Jetzt sieht es aber so aus das anscheinen wegen dem Gleichrichter eine gewisse Spannung am Analogen Pin ankommt und ich grad ein wenig überfragt bin was ich da gegen unternehmen kann

Ich möchte noch erwähnen das ich keine Lösung auf dem Silbertablett erwarte und an sich sehr wenig Erfahrung habe.
Versuche die meiste zeit mir über YouTube und co. einiges anzueignen aber die Suche gestaltet sich manchmal schwieriger als erhofft und bitte unterlasst es passiv aggressive Kommentare ohne Inhalt zu posten,
das zerstört einem die Motivation.

vielen Dank schonmal im voraus.

So ganz habe ich nicht verstanden, was die Diode bewirken soll.
Und mit einem Widerstand kannst du da nix entprellen.
Zumal das mit 8 Tastern sehr eng wird, bis nicht funktioniert.

Du solltest das Thema mal überdenken und evtl. auf einen I2C-Portexpander (PCF8574 x 4) umschwenken. Oder 2 Stück MCP23017 verwenden. Das wird def. sicherer als die analoge Abfrage.

Und das hier:

habe ich mal absichtlich überlesen, da es hier nicht reinpasst.

Hallo,
zu diesem Thema gibt es im weltweiten Netz eine große Menge von Erklärungen und auch Lösungen. Einfach mal eine Runde "surfen" gehen. :nerd_face:

  1. Entprellen mit Widerstand? Was für eine unerwartete Idee.
  2. Gleichrichter um Erde zu schutzen? Was für eine umweltfreundliche Idee.
  3. Ein einziges 10k Widerstand für zwei Reihen? Was für eine sparsame Idee.

Plannst du immer nur eine Taste gleichzeitig drücken? denn wenn mehrere dann:

  1. 1023 Kombinationen für 10 Tasten zu beschreiben! Wie fleißig!
  2. 38 Tasten kodieren in 3 bit? 2³=8

  1. Kondensator parallel zu ihn schalten.
  2. raus damit.
  3. für eine Reihe eigenen pull-down.
  4. mal deinen Antwort abwarten.
  5. es sind 6 bit nötig. den 5 geben nur 32 Kombinationen.

die Dioden sollen bewirken das die Linken taster ihr Signal nur an den Pin A0 abgeben und die Rechten nur an Pin A1.
dadurch das ich die Taster über 1 GND Pin entprelle erscheint mir das nötig da ansonsten mit jedem Tastendruck A0 und A1 das selbe Signal bekommen würden.

mit 8 Output Pins kann ich 56 3er Kombinationen erzeugen ohne die Reihenfolge zu berücksichtigen was in meinem Fall gegeben ist.

hast du schematic?

was sind das für welche? ich dachte, dass du willst jeder Taste ein ensprechendes binäres Kod geben

Taste 1 = B001
Taste 2 = B010
Taste 3 = B011
Taste 4 = B100
Taste 5 = B101

nein?

die 8 Output Pins sollen nur HIGH in 3er Kombinationen
das ist aber nicht das Problem.

wie am Anfang erwähnt bekommt z.B. der Pin A0 ein Signal von 0 - 60 ohne das ein Taster gedrückt wird und das liegt an der Diode aber ohne Diode würde bei einem Tastendruck A0,A1,A2 und A3 das selbe Signal bekommen.

ah, das kommt davon, das du sie zusammen geschlossen hast.
lese meine Ratschläge Beitrag#4 Rat №3

ich hab bei dem NANO 2x GND Pins aber 4 Taster Gruppen
und da ich bei der Seriellen Abfrage einen Signalbereich 0 - 1023 zur Verfügung habe wollte ich nicht mehr als 10 Taster pro Pin anschließen und bedingt durch den Spannungsteiler zwischen den Tastern eine Signal Differenz von 60 - 120
habe in anderen Beiträgen gelesen das man die abstände nicht kleiner als 50 machen soll.

oh gott, das Schrott ist nur wegen Engpass an GND... dessen sind 3, eigentlich, am Nano.
wie verbindest du den die Teile zusammen? Löten, Breadboard?

stimmt sind 3 :slight_smile: habs übersehen
aber leider fehlt dann trotzdem einer dann

wie verbindest du denn die Teile zusammen? Löten, Breadboard?

werden verlötet
auf einer Lochrasterplatine
aber alles sehr chaotisch xD

ich hab das Projekt vorher schon einmal gebaut aber ohne Microcontroller und es hat auch Funktioniert allerdings hat mir das insgesamt nicht gefallen und wollte es gerne auf diese Art umsetzten.

an der Lochrasterplatine lässt sich am einfachsten eine Schiene zu organisieren wo alle GND zusammen kommen. Einfach ein Bein vom Widerstand abknipsen und auf einige Löcher anlöten.

ok. Jetzt die Frage: werden die Tasten ausschließlich eins nach den anderen gedrückt oder auch gleichzeitig einige?

Taster werden immer nur einzeln gedrückt.
die GND Schiene hab ich bereits drin und es löst mein Problem nicht.

Wenn ich einen Taster aus Gruppe 1 drücke das ein Signal an A0 geben soll dann geht es über die GND Schiene und gibt das selbe Signal auch an A1,A2 und A3 ab was es aber nicht soll und genau da kommen die Gleichrichter Dioden ins Spiel die aber Probleme machen

du hast ein Widerstand zu GND, solltest aber 4 haben. jede Reihe soll getrennt sein, ist es nicht offensichtlich?

mir dämmert was du mir damit sagen willst.
ich schau es mir mal an und hoffe das ich es richtig gerafft habe

Ich bezweifle das deine Konstruktion sicher und stabil läuft. Und das auch bei Temperatur- und Spannungsschwankungen.

Dennoch viel Erfolg dabei.

danke für dein Kommentar
ich werde es einfach versuchen fertig zu machen und wenn es nicht das ist was ich haben möchte kann ich das ganze dann über I2C verwirklichen aber bis dahin sehe ich das hier zumindest als eine Art Lernprozess :slight_smile: