Eine Box mit Zahlenfeld bauen....

Hallo,
ich würde gerne eine Box bauen mit Tastenfeld....

es soll so funktionieren:

  1. die Box ist geschlossen also zu
  2. wenn man den richtigen Code eingibt ,wird ein Servo angesteuert und der öffnet die Box....

aber ich bekomme die Software nicht hin.... die Tastatur funktioniert schon mal :-[ aber wie schreibe ich die Abfrage??? ist der Code richtig bewege den servo von Position 0 nach 150.... oder so... kann mir da jemand helfen????

Es befindet sich hier ein Relay was an geht ,wenn der Code richtig ist.... das wird aber nicht gebraucht :slight_smile: Ich hoffe ihr könnt mir helfen .....

#include <Keypad.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(0, 1, 2, 3, 4, 12);

#define relayPin 13

const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
 {'1','2','3'},
 {'4','5','6'},
 {'7','8','9'},
 {'*','0','#'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = { 7, 6, 5}; //connect to the column pinouts of the keypad

int pos = 0;
char secretCode[6] = {'1', '2', '3', '4', '5', '6'};
char inputCode[6] = {'0', '0', '0', '0', '0', '0'};

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup()
{
 lcd.begin(16, 2);
 pinMode(relayPin, OUTPUT);
 //Serial.begin(9600);
 lcd.setCursor(0,0);
 lcd.print("    Welcome!    ");
 delay(2000);
}
void loop()
{
 readKey();
}

void readKey()
{
 int correct = 0;
 int i;
 char customKey = customKeypad.getKey();
 if (customKey)
 {
   switch(customKey)
   {
     case '*':
       pos = 0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Input Your Code:");
     break;
     case '#':    
       for(i = 0; i < 6; i++)
       {
         if(inputCode[i] == secretCode[i])
         {
           correct ++;
         }
       }
       if(correct == 6)
       {
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Input correctly!");
         lcd.setCursor(0, 1);
         lcd.print(" Please Come In ");
         digitalWrite(relayPin, HIGH);
         delay(2000);
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("    Welcome!    ");
       }
       else
       {
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("  Input Error!  ");
         lcd.setCursor(0, 1);
         lcd.print("  Please Again  ");
         digitalWrite(relayPin, LOW);
         delay(2000);
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("    Welcome!    ");
       }
     break;
     default:
       inputCode[pos] = customKey;
       lcd.setCursor(pos,1);
       lcd.print(inputCode[pos]);
       pos ++;
   }
 }
}

DerTron71:
aber ich bekomme die Software nicht hin.... die Tastatur funktioniert schon mal :-[ aber wie schreibe ich die Abfrage??? ist der Code richtig bewege den servo von Position 0 nach 150.... oder so... kann mir da jemand helfen????

Der Code für die Abfrage wäre am einfachsten, wenn Du ein definiertes "Startzeichen" und ein abschließendes "Endzeichen" hättest. Bei einer 3x4 Tastenmatrix zum Beispiel als Code:
*123456#

Das wäre vom Code her am einfachsten abfragbar.

So etwas kommt bei Dir nicht in Frage?

Sehe gerade in Deinem Code: So möchtest Du es machen.
Aber Du darfst NICHT MIT DELAY programmieren!

Wenn während eines delay(2000) (Programmblockierung für 2 Sek.) eine Taste gedrückt wird, kann der Tastendruck sonst niemals erkannt werden!

Wenn ich mir den Code mal näher betrachte: Da wird ja überhaupt kein Servo angesteuert, wenn der richtige Code eingegeben wird, sondern nur angezeigt "Please Come In". An der Stelle im Programm würde ich mal den Servo ansteuern!

ich würde gerne einen anderen Code benutzen als 123456 .... ich würde gerne 0815 oder 4711 nehmen... geht das ???? Kannst Du mir Helfen????

Hallo Mike60,
nein das ist nicht meine Absicht, viele Leute zu beschäftigen.... doch leider sind nicht alle Leute so Genies wie Du und können programmieren...

Und wenn man etwas nicht weiß .... dafür gibt es doch solche Forum oder????

LG Reiner

Und wenn man etwas nicht weiß .... dafür gibt es doch solche Forum oder?

Ein bißchen Eigeninitiative sollte man schon entwickeln.

ich würde gerne einen anderen Code benutzen als 123456 .... ich würde gerne 0815 oder 4711 nehmen... geht das

Natürlich geht das, aber Deine Frage zeugt davon, daß Du den Code den Du gepostet hast nicht im mindesten verstanden oder gelesen hast. Deine Eigenleistung scheint mir bis jetzt den Sketch von SunFounder focuses on STEAM education with Open-Source robots in Deinen ersten Post kopiert zu haben. Da fühlt man sich schnell mal ausgenutzt.

Fange mal mit einem Tutorial oder Buch über Arduino an und dann sehen wir weiter.

Grüße Uwe

Schließe mich Mike und Uwe an. Sicherlich ist man hier im Forum hilfsbereit. Nur kann man nicht erwarten, dass man einen cp-Code postet und andere diesen für einen selber umsetzen.

Davon lernst du überhaupt nichts! Der Code ist noch sehr einfach gestrickt. Ich gehe davon aus, dass du dich noch nicht durch "Must-Have" Tutorials durchgearbeitet hast.

Würde vorschlagen, du liest die Tasten so ein.

'*' signalisiert einen neuen Code. Wenn '#' kommt, wertest du den Wert aus.

sschultewolter:
Würde vorschlagen, du liest die Tasten so ein.

'*' signalisiert einen neuen Code. Wenn '#' kommt, wertest du den Wert aus.

Das macht der Sketch ja schon :smiling_imp: :smiling_imp: :smiling_imp:

case '*':
       pos = 0;
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Input Your Code:");
     break;
     case '#':    
       for(i = 0; i < 6; i++)
       {
         if(inputCode[i] == secretCode[i])
         {
           correct ++;
         }
       }

Grüße Uwe