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
atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe)
09.01.2015, 18:33
Beitrag #1
Sad atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe)
Hallo,

wir arbeiten an folgendem Projekt:

Wir bauen einen Safe der mit Codeeingabe über ein Keypad(4x3) geöffnet werden kann (durch einen Servomotor), wird der Code 3 mal falsch eingegeben wird eine Zufallszahl erzeugt, welche vom Benutzer dann über das Keypad eingegeben werden muss (quasi wie ein Captcha auf Internetseiten) um die Code Eingabe wieder zu ermöglichen. Wird die Zufallszahl falsch eingegeben wird die Eingabefunktion für eine Stunde gesperrt.

Eine weitere Funktion ist die Änderung des Codes mittels Eingabe eines vorher festgelegten Superpins.

Wir haben soweit schon alle Funktionen, haben allerdings das Problem, dass wir die Zufallszahl nicht überprüfen können, die Eingabe erfolgt ja über das Keypad und dieses gibt Zeichenketten wieder. Daher müssen wir diese Zeichen mittels der Funktion atoi() in einen Int umwandeln damit wir die Zufallszahl mit der Eingabe überprüfen können. Wir schaffen es ein eingegebens Zeichen umzuwandeln, schaffen es aber nicht die darauffolgenden Zeichen auch umzuwandeln. Wir haben da entweder einen Denkfehler oder kriegen es einfach seit Tagen nicht hin, dies zu programmieren und langsam sind wir am verzweifeln.

Ein weiteres Problem ist dass wir den Code mittels Eingabe des Superpins nur auf einen vorher festgelegten Wert ändern können("1234") , unser Ziel ist es allerdings das der Benutzer einen beliebiegen neuen Code eingeben kann.

hier das Versuchsprogramm, in dem wir versuchen mehrere Zeichen über das Keypad umzuwandeln(wie Ihr seht ist es alles was durcheinander und man sieht vielleicht wie verzweifelt wir sind Confused:

Code:
#include <Keypad.h>
int c=0;
int i=0;
int eingabe;
char test[4];
//char test[1];
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] = {5,4,3,2 };//
byte colPins[COLS] = { 8,7,6 };


// Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  {
//randomSeed(analogRead(0));

Serial.begin(9600);
}

keypad.addEventListener(keypadEvent);

}
void loop()
  {
keypad.getKey();
  }


  
    //test[0]=random(1000, 10000);
    void keypadEvent(KeypadEvent eKey){//int a;
      
//switch (keypad.getState()){
  
   //case PRESSED:
  
switch(c){
  for(c=0;c<4;c++);
     case 0:
     {
     char str1[4] = {eKey};
    
     int i1;
    Serial.println(str1[0]);
    i1 = atoi(str1);
    Serial.println("Wert1:");
    Serial.print(i1);
  
    
    
    
    
     }
    case 1:
    {
     char str2[2] = {eKey};
    
     int i2;
    Serial.println(str2[1]);
    i2 = atoi(str2);
    Serial.println("Wert2:");
    Serial.print(i2);
  
    while(1);
    
    
    }
    case 2:
{  
     char str3[2] = {eKey};
    
     int i3;
    Serial.println(str3[1]);
    i3 = atoi(str3);
    Serial.println("Wert3:");
    Serial.print(i3);
    
    while(1);
    
    
}
    case 3:    
   {
     char str4[2] = {eKey};
    
     int i4;
    Serial.println(str4[1]);
    i4 = atoi(str4);
    Serial.println("Wert4:");
    Serial.print(i4);
    break;
    while(1);
    
    
   }}

...und noch unser Hauptprogramm mit allen Funktionen:

Code:
#include <Servo.h>

#include <Password.h>

#include <Keypad.h>
Servo motor1;
int i;
int x;
int zuf;
int vergl;

Password password = Password( "4711" );


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] = {5,4,3,2 };//
byte colPins[COLS] = { 8,7,6 };


// Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );



void setup(){
  
  randomSeed(analogRead(0));
  
{
motor1.attach(9);
Serial.begin(9600);
}




keypad.addEventListener(keypadEvent); //event keypad



}

void loop(){
keypad.getKey();
}

//events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
  
case PRESSED:
     Serial.print(eKey);
    
     switch (eKey){
       case '#': guessPassword(); break;
       case '12345678':
       {
      //Überprüfung alter Code  
      password.set("1234");
      Serial.print("Neuen Code erstellen");
      //password.reset();
      Serial.println("Code geändert");
      break;}
        default:
              password.append(eKey);
              // *Case`*`->Superpin
}
}}
    void zu()
  {
  motor1.write(90);
  }
  
  
void auf()
  {
  motor1.write(4);
  }
  
    
void guessPassword(){
    Serial.print("Code wird gelesen...");
    if (password.evaluate()){
          //hier Servo einbauen
           i=0;              
           auf();
          Serial.println("Safe oeffnet! "); //
             password.reset(); }
    else{
          i++;
          delay(3);
          zu();
          Serial.println("ungueltiger Code!");
             password.reset();  
                for (int i=0 ; i<3 ;i++);
                if(i>=3){motor1.detach();
                for(x=0;x<1;x++);}}}

etwas Hilfe könnten wir echt gut gebrauchen, da[/code] das Projekt am Dienstag abgegeben werden muss Confused Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2015 19:34 von aepfelbirnen.)
Beitrag #2
RE: atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe)
Die Aufgabenstellung war nicht gegeben, sondern wir haben diese selbst entwickelt als eigenes Projekt, diese steht seit ca. 2 Wochen und bisher haben wir uns ,weil es unser Projekt ist, auch selbst alles erarbeitet.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 20:40 (Dieser Beitrag wurde zuletzt bearbeitet: 09.01.2015 20:46 von rkuehle.)
Beitrag #3
RE: atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe)
Wenn ich mir den Code so angucke (ohne tiefer in die Logik reinzugehen) fällt auf, dass ihr ab der zweiten Eingabe
Code:
while (1);
benutzt. Das könnte der Grund sein, dass ihr nur die erste Eingabe vergleichen könnt.
Die Zeile sieht umgeschrieben so aus:
Code:
while (1)
        {
          ;
        }
Pseudo: Solange 1 dann mache nichts.
Da "Solange 1" immer wahr ist, beibt er in dem while, kommt nicht mehr raus und tut was da drin steht:Nichts (das Semikolon).
Ausserdem dürften in den Case-Zweigen die breaks fehlen.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2015, 13:55
Beitrag #4
RE: atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe)
(09.01.2015 20:40)rkuehle schrieb:  Wenn ich mir den Code so angucke (ohne tiefer in die Logik reinzugehen) fällt auf, dass ihr ab der zweiten Eingabe
Code:
while (1);
benutzt. Das könnte der Grund sein, dass ihr nur die erste Eingabe vergleichen könnt.
Die Zeile sieht umgeschrieben so aus:
Code:
while (1)
        {
          ;
        }
Pseudo: Solange 1 dann mache nichts.
Da "Solange 1" immer wahr ist, beibt er in dem while, kommt nicht mehr raus und tut was da drin steht:Nichts (das Semikolon).
Ausserdem dürften in den Case-Zweigen die breaks fehlen.
Grüße Ricardo

Ja, da hast du recht. Wir hatten das Problem, dass die cases einfach durchlaufen werden ohne dass wir einen weiteren Wert eingeben können und der erste eingegebene Wert wurde einfach übernommen und es sah dann auf dem seriellen Monitor so aus wenn man beispielsweise die "4" auf dem Keypad drückt:

"
4
Wert1:
4
Wert2:
4
Wert3:
4
Wert4:
44
Wert1:
4
Wert2:
4
....."

Der Loop ist folgender:
Code:
void loop()
  {
keypad.getKey();
  }


  
    //test[0]=random(1000, 10000);
    void keypadEvent(KeypadEvent eKey){//int a;
      
//switch (keypad.getState()){
  
   //case PRESSED:
for(c=0;c<4;c++){
switch(c){
    
     case 0:
     {
    
    char str1[2] = {eKey};
     int i1;
    Serial.println(str1[0]);
    i1 = atoi(str1);
    Serial.println("Wert1:");
    Serial.print(i1);
    break;
    
    
    
    
     }
    case 1:
    {
     char str2[2] = {eKey};
    
     int i2;
    Serial.println(str2[0]);
    i2 = atoi(str2);
    Serial.println("Wert2:");
    Serial.print(i2);
    break;
  
    
    
    }
    case 2:
{  
     char str3[2] = {eKey};
    
     int i3;
    Serial.println(str3[0]);
    i3 = atoi(str3);
    Serial.println("Wert3:");
    Serial.print(i3);
    break;
    
  
    
    
}
    case 3:    
   {
     char str4[2] = {eKey};
    
     int i4;
    Serial.println(str4[0]);
    i4 = atoi(str4);
    Serial.println("Wert4:");
    Serial.print(i4);
    break;
    
    
    
   }}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mehrere Taster entprellen Kitt 15 508 24.10.2016 21:17
Letzter Beitrag: georg01
  Empfange nur "Geister"zeichen vom BT-Modul dabbamonkeyyy 2 128 23.10.2016 11:34
Letzter Beitrag: Harry Hirsch
  Einfacher Tacho für niedrige Geschwindigkeiten – Code optimieren Bastelo 2 259 12.10.2016 20:31
Letzter Beitrag: Bastelo
  Code mit Verifikation über Keypad & LCD machnetz 5 215 10.10.2016 15:01
Letzter Beitrag: torsten_156
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 605 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  LCD Display plötzlich komische Zeichen Jessi97 2 241 28.07.2016 11:34
Letzter Beitrag: Bitklopfer
  Altes Digitales Display mit Text/Bits durch Genuino Micro versorgen - SPI-Bibliothek? RollingStone 0 202 25.06.2016 17:46
Letzter Beitrag: RollingStone
  Mehrere Wertabfragen blebbens 5 370 18.06.2016 22:58
Letzter Beitrag: Scheams
  Deckel offen erkennung durch Temperaturabfall MarkoM 3 259 08.06.2016 14:18
Letzter Beitrag: hotsystems

Gehe zu:


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