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: 29)
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
  Code wird langsamer mit der Laufzeit Wampo 9 490 05.10.2017 11:32
Letzter Beitrag: SkobyMobil
  Richtungsblinker und Warnblinker über jeweils einen Schalter Crazydiver 25 1.190 04.10.2017 12:47
Letzter Beitrag: hotsystems
  Kommunikation über das WiFi-Shield Flap 13 1.540 12.09.2017 22:12
Letzter Beitrag: Flap
Tongue Visual Studio Code als Editor für die Entwicklung von Arduino Code Klaus(i) 1 315 03.09.2017 19:15
Letzter Beitrag: Mathias
  Volume Up falscher Tastatur Hex-Code Maxi290997 7 565 03.07.2017 21:49
Letzter Beitrag: Maxi290997
  delay(...) im Code ok? donut 4 540 08.06.2017 20:16
Letzter Beitrag: donut
  Textdokument in Arduino Code umwandeln Tellen 9 737 03.06.2017 16:30
Letzter Beitrag: Tellen
  TFT Pixel to Code oOSpikeOo 5 455 06.04.2017 18:49
Letzter Beitrag: Tommy56
  Keypad Shield luj1990 11 691 29.03.2017 21:15
Letzter Beitrag: Tommy56
  RGB Animation über Serial Steuern Medolino 5 754 20.02.2017 16:14
Letzter Beitrag: Medolino

Gehe zu:


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