Wie werte ich Signale aus ?

Hallo zusammen,
wir bauen zurzeit Spinde und wollen die Namen via LCD anzeigen lassen, wobei der Text sich ändert, wenn man einen falschen oder richtigen Ausweis vorhält [RFID] das Öffnen funktioniert bereits. Das Problem bei der Sache ist, dass wir das Signal bei einem Summer von der Schließanlage abfangen und es auch keine andere Möglichkeit gibt Signale abzufangen. Der Summer gibt zwei verschiedene Töne wieder, wenn der richtige oder der falsche Ausweis eingescannt wurde wobei er bei einem richtigen oder falschen den Text für 5 Sekunden ändern soll. Ich habe schon mehrfach gegoogelt und es selber versucht. Ich habe es mit 2 Tastern hinbekommen, dass er andere Nachrichten anzeigt, aber es soll ja nur mit einem gehen, wo bei ich verzweifel. Der Summer gibt folgende Signale.

Bei Zugriff verweigert: Kurz Kurz Kurz
Bei Zugriff gewährt: Kurz Lang

Meinen Code füge ich hier hinzu:

Vielen Dank im voraus

#include <LiquidCrystal.h>


const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int JA=9;
int NEIN=8;


void setup() {
  lcd.begin(16, 2);
  lcd.print("Name");
  lcd.setCursor(0, 1);
  lcd.print("Sonstiger Text");
  pinMode(JA, INPUT);
  pinMode(NEIN, INPUT);
  digitalWrite(JA, HIGH);
  digitalWrite(NEIN, HIGH);
  Serial.begin(9600);
}

void loop() {
  lcd.display();
  delay(500);
  if (digitalRead(JA) == LOW) {
      lcd.clear();
      lcd.print("Spind Öffnet");
      lcd.setCursor(0, 1);
      lcd.print("Name");
      delay(5000);
      lcd.clear();
      lcd.print("Name!");
      lcd.setCursor(0, 1);
      lcd.print("Sonstiger Text");
  }
  if (digitalRead(NEIN) == LOW){
    lcd.clear();
      lcd.print("Zugriff");
  lcd.setCursor(0, 1);
  lcd.print("verweigert");
  delay(5000);
  lcd.clear();
  lcd.print("Name");
  lcd.setCursor(0, 1);
  lcd.print("Sonstiger Text");
  }
}

Was genau meinst du mit "Töne abfangen" ?
Mit Mikrofon aufnehmen ? Oder direkt angeschlossen ?

Bei 2 Tastern gibt es 4 mögliche Zustände, zu denen irgendwelche Aktionen gehören. Bei 1 Signal gibt es (in Deinem Fall) 3 mögliche Zustände.

  1. Wandle die Eingaben in die entsprechenden Zustands-Nummer um.
  2. Führe bei Änderung des Zustands die jeweils zugehörige Funktion aus.

Hint: Für Dein Problem gibt es "else" für eine ganz einfache Lösung.

HotSystems:
Was genau meinst du mit "Töne abfangen" ?
Mit Mikrofon aufnehmen ? Oder direkt angeschlossen ?

Da kabel das den summer versorgt nehme ich als empfänger

Eric_Oxford:
Da kabel das den summer versorgt nehme ich als empfänger

Damit ist deine Aussage noch unklarer.

Wie willst du Kabel als Empfänger verwenden ?

Mit pulseIn() o.ä. kann man feststellen, ob und mit welcher Frequenz ein Signal auf der Leitung liegt.

DrDiettrich:
Mit pulseIn() o.ä. kann man feststellen, ob und mit welcher Frequenz ein Signal auf der Leitung liegt.

Dazu muss der TO aber die Kabel direkt an den Arduino anschließen, nur hierzu kommt keine Aussage.
Und was macht er, wenn auf dem Kabel 230 Volt liegen ? Nur mal so angenommen.

Hi

Ohne großartig Frequenzen erkennen zu müssen, würde ich ein Monoflop von dem Signal triggern lassen, Welches in der Pausenzeit sicher abfällt.

Klar: Man kann sowohl die Frequenz (sofern sich Diese unterscheiden, je nach Pieps-Länge oder Win/Fail-Meldung), wie die Länge mit dem Arduino erfassen - Das ist aber nicht der leichteste Weg - ein Monoflop würde den Kram auf eine kleine State-Maschine schrumpfen lassen, Die nur mit millis() spielen muß.

Entkoppeln kannst Du das Signal mit einem kleinen Kondensator (besser kein Elko).
GND muß verbunden sein - hier wäre Es 'toll', wenn der negative Pol des Summer mit dem GND des Arduino verbunden würde - andernfalls bekommst Du auf Deinen Digital-IN eine negative Spannung (unterhalb GND-Level) - was den Arduino schnell töten kann - nur sehr wenig Elektronik kann Spannungen viel tiefer als GND ab!

MfG