Gymnasium Himmelsthür

P7 - PIN-Eingabe

Programmierung einer Folientastatur.

Funktionsweise

Die Folientasten sind Schalter und mit Kabeln verbunden, die beim Drücken jeweils eine Reihe und eine Spalte verbinden.

Programm

|p7-pin.ino
int ZEILE0 = 2;                       //PIN-Nr. der 0. Zeile
int SPALTE0 = 6;                      //PIN-Nr. der 0. Spalte
int ZEILEN = 4;                       //Anzahl der Zeilen
int SPALTEN = 4;                      //Anzahl der Spalten
 
boolean unten;                        //false - keine Taste gedrückt
                                      //true - eine Taste gedrückt
 
void setup() {
  Serial.begin(9600);
  unten = false;
  for(int i=0;i<SPALTEN;i++){         //Alle Spalten werden als Eingänge definiert.
    pinMode(SPALTE0+i,INPUT);
  }
  for(int i=0;i<ZEILEN;i++){
    pinMode(ZEILE0+i,INPUT_PULLUP);   //Alle Zeilen werden als Eingänge geschaltet und auf
  }                                   //den Werte HIGH oder 1 gelegt. Wenn ein Schalter geschlossen
}                                     //wird, wechselt der Zustand auf 0.
 
void loop() {
  for(int i=0;i<SPALTEN;i++){         //Besuche nacheinander alle Spalten
    pinMode(SPALTE0+i,OUTPUT);        //Schalte eine Spalte als Ausgang und setze den Spannungswert
    digitalWrite(SPALTE0+i,LOW);      //auf 0.
    for(int j=0;j<ZEILEN;j++){        //Prüfe nacheinander alle Zeilen
      if(!digitalRead(ZEILE0+j)){     //Falls eine Zeile 0 ergibt, ist der zugehörige Schalter gedrückt.
        Serial.print(j);              //Gib Zeile und Spalte am seriellen Monitor aus.
        Serial.print(":");
        Serial.print(i);
        Serial.print("-");
        Serial.println(zeichen(j,i));
      }
    }
    digitalWrite(SPALTE0+i,HIGH);     //Setze die Spannung wieder zurück auf 5V.
    pinMode(SPALTE0+i,INPUT);         //Schalte die Spalte wieder auf Eingang.
  }
}
 
char zeichen(int zeile, int spalte){  //Finde das zugehörige Zeichen heraus und gib es zurück.
  switch(zeile){
    case 0:
      switch(spalte){
        case 0:
          return 'x';
        case 1:
          return 'x';
        case 2:
          return 'x';
        case 3:
          return 'x';
      }
    case 1:
      switch(spalte){
        case 0:
          return 'x';
        case 1:
          return 'x';
        case 2:
          return 'x';
        case 3:
          return 'x';
      }
    case 2:
      switch(spalte){
        case 0:
          return 'x';
        case 1:
          return 'x';
        case 2:
          return 'x';
        case 3:
          return 'x';
      }
    case 3:
      switch(spalte){
        case 0:
          return 'x';
        case 1:
          return 'x';
        case 2:
          return 'x';
        case 3:
          return 'x';
      }
  }
}
 
/*  P7_PIN 27.04.21
 
    **********************************************************
    AUFGABEN (Hinweise und Lösungen finden Sie am Ende!)
    **********************************************************
 
    1   VORBEREITUNG - Laden Sie dieses Programm unverändert auf den Aruino hoch. Wenn alles geklappt hat, reagiert der Arduino auf einen Tastendruck. 
 
 
    2   AUSGABE - Programmieren Sie den Arduino so um, das er nur das auf der Taste aufgedruckte Zeichen ausgibt.
 
 
    3   AUSGABE2 - Erweitern Sie die Ausgabe so, dass ein gedrücktes Zeichen nur einmal ausgegeben wird, solange
                   die Taste gehalten wird.
 
    4   PIN - Erweitern Sie die Schaltung um eine grüne LED (mit Widerstand!) an Pin 10 und programmieren Sie
              so um, das bei Eingabe einer "1" die LED zu leuchten beginnt und bei einer "0" wieder ausgeht.
 
    5   PIN-Vergleich(EXPERTENAUFGABE) - Erweitern Sie das Programm, so das die Eingabe mit dem PIN "1234*" verglichen wird.
                                         Ist die Eingabe richtig, so leuchtet die grüne LED.
 
 
    **********************************************************  
      PROGRAMMCODE FÜR TEILAUFGABEN
    **********************************************************
 
    3   AUSGABE2 - PROGRAMMCODE
        Fügen Sie als erste Zeile in "loop" die folgende Zeile ein
          boolean gehalten = false;           //Ist irgendeine Taste gedrückt?
 
        und ergänzen Sie "loop" an geeigneter Stelle um folgende Zeilen
 
             if(!unten){
 
              ...
 
              unten = true; 
            }
            gehalten = true;
 
        schließen Sie "loop" ab durch
 
           if(!gehalten){
            unten = false;
          }
 
 
    **********************************************************
    LÖSUNGSHINWEISE
    **********************************************************
 
    2   AUSGABE - LÖSUNGSHINWEISE
 
    - Sie müssen in der Methode "zeichen" herausfinden, an welcher Stelle Sie das "x" durch das passende Zeichen ersetzen müssen.
 
    4   PIN - LÖSUNGSHINWEISE
 
    - Ein Vergleich von zwei Zeichen erfolgt mit einem doppelten Gleichheitszeichen:
         if(taste == '1')
 
 
*/
Anmelden