Pin-Eingabe

Lese­zeit: 6 Minu­ten

Pineingabe_Serieller Moni­tor

Navi­ga­ti­on

Bei die­ser Auf­ga­be lernst du ver­schie­de­ne Mög­lich­kei­ten ken­nen einen String aus­zu­wer­ten:

  • BeispielString.indexOf(Zeichen) → bestimmt die Posi­ti­on eines Zei­chens inner­halb des Strings
  • BeispielString.length() → ermit­telt die Län­ge eines Strings
  • BeispielString.substring(Start, Ende) → zeigt den Teil des Strings von Start bis Ende

Bei­spiel:

Der String "Pro­gram­mie­ren fin­de ich toll ;-)" soll auf sei­ne Län­ge und die Pos­ti­on des „t“ unter­sucht wer­den. Anschlie­ßend wird er in zwei Teil­strings zer­legt.

void setup()  
{
  Serial.begin(9600);  
  String BeispielString = "Programmieren finde ich toll ;-)"; 

  // Länge bestimmen 
  int Laenge = BeispielString.length();  
  Serial.print("Laenge des Strings: "); 
  Serial.println(Laenge); 

  // das t suchen 
  int Suche = BeispielString.indexOf("t");     
  Serial.print("Position t: "); 
  Serial.println(Suche); 
 
  // String vom Anfang bis zum t  
  BeispielString.substring(0, Suche); 
  Serial.print("String bis zum t: ");      
  Serial.println(BeispielString.substring(0, Suche));

  // oder, weil Laenge schon bestimmt wurde: 
  // BeispielString.substring(suche + 1, Laenge);    

  Serial.print("String vom t bis zum Ende: ");     
  Serial.println(BeispielString.substring(Suche, BeispielString.length())); 
} 

void loop()  
{ 
  // bleibt leer → das Programm soll nur einmal ausgeführt werden 
}

Wei­te­re Infor­ma­tio­nen

Benö­tig­te Bau­tei­le:

  • Laut­spre­cher
  • Tas­ten­feld 3×4
  • Lei­tungs­dräh­te

Baue die Schal­tung auf:
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Das Pro­gramm soll einen Pin („1234“) abfra­gen. Wur­de der Pin nach Druck auf die Tas­te # rich­tig ein­ge­ge­ben, wird die Mel­dung „kor­rek­ter Pin“ ange­zeigt.

Es sind eini­ge Schrit­te zur Vor­be­rei­tung nötig. Im Kopf des Pro­gramms müs­sen ver­schie­de­ne Varia­ble defi­niert wer­den:

Du benö­tigst die Biblio­thek Key­pad:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Das Tas­ten­feld besteht aus Rei­hen und Spal­ten, die von unten nach oben in einem ➨zwei­di­men­sio­na­len Array ange­ord­net wer­den:

Jedem Pin wird ein­deu­tig eine Tas­te zuge­ord­net:

// Bibliothek einbinden
# include <Keypad.h> 

/*
  Größe des Tastenfeldes
  3 Spalten. 4 Zeilen
  bei der Definition der Größe eines Arrays müssen 
  die Angaben mit const definiert werden
*/
const byte SPALTEN = 3;
const byte REIHEN = 4;

// die Ziffern/Zeichen:
// Array 3 x 4
char Tasten[REIHEN][SPALTEN] = 
{
   {'#', '0', '*'},
   {'9', '8', '7'},
   {'6', '5', '4'},
   {'3', '2', '1'}
};

// die Pins für die 3 Spalten
byte SpaltenPins[SPALTEN] = { 2, 3, 4 };

// die Pins für die 4 Zeilen
byte ReihenPins[REIHEN] = { 8, 9, 10, 11 };

// TastenFeld → Name des Keypads
// → Zuordnung der Pins zu den REIHEN und SPALTEN des Arrays
Keypad TastenFeld = Keypad(makeKeymap(Tasten), ReihenPins, SpaltenPins, REIHEN, SPALTEN);

Jetzt kann die eigent­li­che Pro­gram­mie­rung begin­nen.
Lege zusätz­li­che Varia­ble fest:

char gedrueckteTaste; 
String Vergleich; 
String Pin = "1234"; 
String Eingabe;
int LAUTSPRECHER = 13;

void setup()  
{  
  pinMode(LAUTSPRECHER, OUTPUT); 
  Serial.begin(9600); 

  // Text nur beim Start anzeigen 
  Serial.println("Pin-Eingabe"); 
  Serial.println("mit # abschließen"); 
}

void loop()  
{ 
  // gedrückte Taste abfragen 
  gedrueckteTaste = TastenFeld.getKey(); 

  // wenn eine Taste gedrückt wurde 
  if (gedrueckteTaste) 
  {   
    // Ton ausgeben     
    . . .   
    // gedrückte Taste wird mit dem Zeichen # verglichen  
    // # soll nicht angezeigt werden   
    if (gedrueckteTaste != '#') Serial.print(gedrueckteTaste);          
    Eingabe = Eingabe + gedrueckteTaste; 
    // oder Kurzform:   
    // Eingabe += gedrueckteTaste; 

    // # → Vergleich durchführen 
    if (gedrueckteTaste == '#') 
    {    
      // letztes Zeichen ist # → muss entfernt werden        
      String Vergleich = Eingabe.substring(0, Eingabe.length() - 1);   
    
       // Eingabe mit dem Pin vergleichen 
      if (Vergleich == Pin)   
      {     
        // \t → Tabulator  
        Serial.println("\tPin ist korrekt - Zugriff");    
      }  
      else Serial.println("\tFalscher Pin - kein Zugriff");       
      Eingabe = "";   
    }  
  }
}

Die Tas­te * soll eine Kor­rek­tur des Pins ermög­li­chen.
Erset­ze den loop-Teil.

void loop()  
{ 
  // gedrückte Taste abfragen 
  gedrueckteTaste = TastenFeld.getKey(); 
  // wenn eine Taste gedrückt wurde
  if (gedrueckteTaste)  
  { 
    tone(LAUTSPRECHER, 1000); 
    delay(50); 
    noTone(LAUTSPRECHER); 

    // # soll nicht angezeigt werden  
    if (gedrueckteTaste != '#') Serial.print(gedrueckteTaste);          
    Eingabe = Eingabe + gedrueckteTaste;  

    // Korrektur mi *  
    if (gedrueckteTaste == '*' && Eingabe.length() > 1) 
    {     
      // letztes Zeichen ist * → muss entfernt werden        
      Eingabe = Eingabe.substring(0, Eingabe.length() - 2);  
      Serial.println("Korrektur: ");  
      Serial.print(Eingabe); 
    } 

    if (gedrueckteTaste == '#') 
    {   
      // letztes Zeichen ist # → muss entfernt werden       
      String Vergleich = Eingabe.substring(0, Eingabe.length() - 1);   
      if (Vergleich == Pin)  
      {   
        Serial.println("\tPin ist korrekt - Zugriff");  
      }       
      else Serial.println("\tFalscher Pin - kein Zugriff");       
      Eingabe = "";  
    } 
  } 
}  


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 23. Aug 2020 @ 19:48