Inhaltsverzeichnis
P7 - PIN-Eingabe
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') */