INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Code mit Verifikation über Keypad & LCD
06.10.2016, 20:41
Beitrag #1
Code mit Verifikation über Keypad & LCD
Hallo liebe Gemeinde,

ich lese hier schon länger mit und konnte bereits viele meiner Probleme selbst lösen. Nun stehe ich aber wie Ochs vorm Berg, so dass ich mein Problem gern mal beschrieben möchte und dann einen Schubs in die richtige Richtung erbitte ;-)

Mittels eines 4x3 Keypad und Anzeige auf I2C-LCD wird ein dreistelliger Code eingegeben. Ist dieser richtig, erfolgt eine akustische Ausgabe eines kurzen Musiktitel mittels seriell angesteuertem DFPlayer Mini.

Wird aber ein "Master-Code" eingegeben, soll ein Verifikations-Code (V-Code) eingetippt werden. Ist der ebenfalls richtig, soll eine akustische Ausgabe eines "Gewinntitel" über den DFPlayer Mini gespielt werden und ein Servo öffnet dann eine Schublade. Das ganze Zeug soll die Steuerung für einen GeoCache werden.

Bisher funktioniert es so, dass wenn ein 3stelliger Code eingegeben wird, dieser angezeigt wird und beim "Nummern-Match" mit einer der passenden Melodie vom DFPlayer-Mini bestätigt wird (ja, und auch auf dem LCD angezeigt wird). Ist ein Code falsch, kommt ein "Looser-Sound (booh)".

Mein denktechnisches Problem ist nun dies das ich keine Idee habe, eine weitere Abfrage für den V-Code einzubauen. Mein bisheriger Code liegt anbei. Ich möchte keinen fertigen Code erfragen, sondern eher danach wie ich die vorhandene Routine zur Eingabe eines 3stelligen Code nutzen kann. Ich hoffe nämlich, dass das geht.

Ich habe mir auch schon die password-Lib angesehen, die hat aber den Nachteil dass hier nur *ein* Passwort verwendet werden kann. Kann also für mehrfache Verwendung mit verschiedenen Codes nicht angewendet werden.

Ich freue mich auf Rückmeldungen. Gruß, machnetz


Angehängte Datei(en)
.ino  I2C_LCD_KEYB_PWD_RSK2.ino (Größe: 3,62 KB / Downloads: 8)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2016, 20:56
Beitrag #2
RE: Code mit Verifikation über Keypad & LCD
Hallo,
den V-Code gibst Du ja ein- und bestätigst diesen.

Wenn das geschehen ist dann mit while eine WarteSchleife einbauen.

Code:
var = 0;
while(var < 200)
{
  // do something repetitive 200 times
  var++;
}
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.10.2016, 08:24
Beitrag #3
RE: Code mit Verifikation über Keypad & LCD
Hallo Andreas,

Zitat:den V-Code gibst Du ja ein- und bestätigst diesen.

Ähm, nein - soweit bin ich aktuell ja eben nicht. Ich weiss halt nicht, wie ich die Routine erneut aufrufen soll. Vielleicht habe ich da auch einen kompletten Gedankenfehler und man kann die erneute Eingabe des V-Codes anders lösen.

Gruß, machnetz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.10.2016, 10:57
Beitrag #4
RE: Code mit Verifikation über Keypad & LCD
Hallo,
also Du gibst einen dreistelligen Code ein, wie geht das vor sich?
Code = 123
Master-Code = 456
Verifikations-Code =789

Eingabe 1, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 2, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 3, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?

Jetzt hast Du den Code 123 richtig eingegeben, jetzt darfst Du NICHT- zu Deiner akustische Ausgabe springen
Du springst jetzt zu Master-Code-Überprüfung.

Hier prüfst Du auf Master-Code.
Ist es ein Master-Code?
Nein
Ist der Code richtig?
Ja
Springe zur akustische Ausgabe

Hier prüfst Du auf Master-Code.
Ist es ein Master-Code?
Nein
Ist der Code richtig?
Nein
Springe zur Fehler-Ausgabe

Hier prüfst Du auf Master-Code.
Ist es ein Master-Code?
ja
Ist der Code richtig?
Ja
Springe zur Verifikations-Code-Funktion
Eingabe 7, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 8, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 9, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Ist der Code richtig?
Ja
Springe zur Verifikations-Code-Funktion-Mache-was

Hier prüfst Du auf Master-Code.
Ist es ein Master-Code?
ja
Ist der Code richtig?
Ja
Springe zur Verifikations-Code-Funktion
Eingabe 7, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 8, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Eingabe 9, wird das mit Taste bestätigt oder zählt es automatisch weiter zur nächsten Stelle?
Ist der Code richtig?
Nein
Springe zur Fehler-Verifikations-Code-Funktion

Zeichne Dir einmal ein ja/nein FlussDiagram, dann siehst Du wie es ablaufen soll.
Es ist doch nur eine ja/nein Abfrage. Bei ja springst Du zu nächsten Abfrage, bei nein fliegst Du raus.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2016, 19:01
Beitrag #5
RE: Code mit Verifikation über Keypad & LCD
Hallo Andreas,

danke für deine Ausführliche Erläuterung zu den Abfragen, aber die Schleife ist eigentlich nicht das Problem. Ich habe mein Problem vlt. nicht gut genug erklärt (das bekomme ich ziemlich gut hin Cool ) und habe grad noch mal einen abgespeckten Code zum Copy-n-pasten fürs Terminal erstellt. Ein I2C-LCD hat man ja auch nicht immer zur Hand Angel Dann kann man das direkt mal zu Hause nachstellen:

Code:
/*
  2016-10-08 - Keypad geht an D9 bis D3, bein NANO kann man das direkt draufstecken
*/

#include <Keypad.h>
#include <Wire.h>

// 3 Zeichen + NULL char
#define Password_Lenght 4                  

// Number of chars it can hold + the null char
char Data[Password_Lenght];                
// Station1
char Stat1[Password_Lenght]     = "111";    
// Station1 Verification Code
char VCStat1[Password_Lenght]   = "222";    

byte data_count = 0;
char customKey;

// Keypad konfigurieren
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] =
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = { 9, 8, 7, 6};
byte colPins[COLS] = { 5, 4, 3};

// Initialisiere eine Instanz der Klasse "customKeypad"
Keypad customKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup()
{
  Serial.begin(9600);
  Serial.println("NOTRUFSÄULE");  
  Serial.println("Wähle Nr.?");
}

void loop()
{
  // Eingabe vom Keypad lesen
  readKeyboard();                
  if (data_count == Password_Lenght - 1)
  {  
    Serial.println("Code für Stat.1 eingeben");
    if (!strcmp(Data, Stat1))    
    {
      Serial.println("Stat. 1 gefunden.");
      Serial.println("Verfikation-Code?");              
      readKeyboard();
      if (data_count == Password_Lenght - 1)
      {
        clearData();
        data_count = 0;
        // Verification Code eingeben
        if (!strcmp(Data, VCStat1))
          {
             Serial.println("Coole Geo-Sau !");
          }
      }
    }
    else
    {
      Serial.println("Ooooh, leider daneben.");
    }
    Serial.println("Reset");
    delay(1500);                        
    clearData();                        
  }
}

void readKeyboard()
{
  customKey = customKeypad.getKey();    
  if (customKey)
  {
    // Eingabe geht ins "Data" Array
    Data[data_count] = customKey;      
    data_count++;                      
  }
}

void clearData()
{
  while (data_count != 0)
  {                                    
    Data[data_count--] = 0;             // Array für neue Daten löschen
  return;
  }
}

Der Obige Code erzeugt nun die Ausgabe:

Zitat:NOTRUFSÄULE
Wähle Nr.?
NOTRUFSÄULE
Wähle Nr.? <- hier drücke ich die 111 auf dem Keypad ein
Code für Stat.1 eingeben
Stat. 1 gefunden. V-Code??
Reset
Nach der Eingabe von "111" wird der Part ab Zeile 55 komplett übergangen Confused
Ich verstehe nicht, warum nach der Eingabe der Code für Station1 ("111") die erneute Abfrage der Tastatur übersprungen wird. Daran hänge ich aktuell und komme nicht weiter.

Gruß, machnetz[/quote]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2016, 15:01
Beitrag #6
RE: Code mit Verifikation über Keypad & LCD
Hallo,

(08.10.2016 19:01)machnetz schrieb:  void loop()
{
// Eingabe vom Keypad lesen
readKeyboard();
if (data_count == Password_Lenght - 1)
{
Serial.println("Code für Stat.1 eingeben");
if (!strcmp(Data, Stat1))
{
Serial.println("Stat. 1 gefunden.");
Serial.println("Verfikation-Code?");
readKeyboard();

Weil das letzte readKeyboard() hier dafür sorgt, dass der data_count gleich 4 ist und somit die erste if-Abfrage nicht stimmt. Da springt die Funktion dann halt in die else...

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mehrstellige Zahl aus Keypad StB 7 222 23.11.2016 03:47
Letzter Beitrag: StB
  Kommunikation über das WiFi-Shield Flap 3 229 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Menü über Bluetooth Eingabe abwarten anwo 4 502 18.10.2016 08:59
Letzter Beitrag: Lolliball
  Einfacher Tacho für niedrige Geschwindigkeiten – Code optimieren Bastelo 2 257 12.10.2016 20:31
Letzter Beitrag: Bastelo
  Daten über USB verarbeiten Felix91 10 318 12.10.2016 13:00
Letzter Beitrag: Tommy56
  Arduino Steuern über eigne Homepage b3ta 8 393 16.08.2016 11:07
Letzter Beitrag: Pit
  Wo kann ich hier noch Code spahren? (SPI-,Ethernet-,SD-,GSM-Library) avoid 4 377 05.06.2016 14:16
Letzter Beitrag: avoid
  DUE-MEGA über I2C Verbinden HTO 0 220 22.05.2016 10:16
Letzter Beitrag: HTO
  Serial Monitor Eingabe über Code Maxi290997 4 515 12.05.2016 18:57
Letzter Beitrag: SkobyMobil
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 505 29.03.2016 16:45
Letzter Beitrag: MartinK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste