In diesem Blog Eintrag möchte ich euch erklären wie ihr eine Matrix Folientastatur über einen I2C Portexpander PCF8574 ansteuern könnt. Ich habe hier ein Arduino Uno eingesetzt. Wenn ihr nur die Folientastatur auswerten möchtet braucht ihr den Portexpander nicht (Sehr praktisch ist er aber schon :-) da die Folientastatur einfach eingesteckt werden kann). 


Portexpander PCF8574


Der Portexpander PCF8574 eignet sich da wo du zu wenig I/O hast. Also als Eingangs-Erweiterung um acht Eingänge mehr zu haben. Der PCF8574 wird über den I2C Bus angesteuert, daher wird auch der Verdrahtungsaufwand geringgehalten. Das Breakoutboard vom PCF8574 ist so aufgebaut, dass auch mehrere seriell aneinandergesteckt werden können. Damit der Mikrocontroller jeden PCF8574 einzel ansteuern kann, müssen sie adressiert werden. Es können maximal acht verschiedene Adressen vergeben werden. Somit könntest du deine I/O um maximal 64 erweitern. Es ist jedoch zu beachten, dass die Ein- und Ausgänge nicht super schnell sind, aber für Tasten und LEDs reicht es vollkommen.

Adressierung und Adressen vom PCF8574

Die Adressierung kannst du durch setzen der Jumper auf dem PCF8574 erledigen. Standardmässig sind die Jumper mit - verbunden somit hast du die Adresse 0x38.

A2A1A0Adresse (Hexadezimal)
---0x38
--+0x39
-+-0x3A
-++0x3B
+--0x3C
+-+0x3D
++-0x3E
+++0x3F

Verwendete Arduino Library


Da ich ein Keypad auslesen will, habe ich hier eine Keypad_I2C Library verwendet, die ich auf Github gefunden habe. Du kannst sie unter folgendem Link herunterladen:
https://github.com/joeyoung/arduino_keypads

Möchtest du den PCF8574 für andere Steueraufgaben nutzen, empfehle ich dir eine reine PCF8574 Library die du ebenfalls auf GitHub findest. z.B.: https://github.com/skywodd/pcf8574_arduino_library/tree/master/PCF8574


Keypad 4x4 Matrix Folientastatur


Diese Folientastatur ist sehr praktisch, da sie sehr dünn ist und aufgeklebt werden kann. Bei der Tastatur handelt es sich um eine Membran Tastatur. Falls ihr mehr über die Tastatur wissen möchtet, habe ich einen interessanten Beitrag gefunden unter folgendem Link:
http://www.14core.com/using-membrane-keypadkeyboard-on-arduino/

Zum Auslesen des Keypad habe ich die Arduino Library Keypad genutzt, die du im Library Manager von Arduino findest, wenn du nach Keypad suchst. Falls du eine andere Folientastatur als ich hast, kannst du einfach das Layout im Arduino Programm anpassen:

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

Schaltplan Folientastatur über PCF8574 für Arduino UNO

Hier noch ein Schaltplan/Schema wie du den PCF8574 und die Tastatur an das Arduino UNO anschliessen kannst.



Programm Code Beispiel für Arduino UNO

Das Programm sowie die Librarys kannst du auch komplett von unserem FTP Server herunterladen unter folgendem Download Link:
Bastelgarage_FTP_Arduino_Keypad_PCF8574_V1.zip

/*******************************************************************************************
 *******************************************************************************************
 **                                www.bastelgarage.ch                                    **
 ** Der Onlineshop mit Videoanleitungen und kompletten Bausätzen für Anfänger und Profis! **
 *******************************************************************************************
 *******************************************************************************************
 ** In diesem Blog Eintrag möchte ich euch erklären wie ihr eine Matrix Folientastatur    **
 ** über einen I2C Portexpander PCF8574 ansteuern könnt. Ich habe hier ein Arduino Uno    **
 ** eingesetzt. Wenn ihr nur die Folientastatur auswerten möchtet braucht ihr den         **
 ** Portexpander nicht (Sehr praktisch ist er aber schon :-)da die Folientastatur einfach **
 ** eingesteckt werden kann). Die Gedrückten Tasten werden in diesem Beispiel Programm    **
 ** im Seriell Monitor von Arduino angezeigt.                                             **
 **                                                                                       **
 ** Für den PCF8574 mit Keypad musst du folgende Library installieren:                    **
 ** https://github.com/joeyoung/arduino_keypads                                           **
 **                                                                                       **
 ** Für die Folientastatur habe ich folgende Library genutzt:                             **
 ** https://github.com/Chris--A/Keypad                                                    **
 **                                                                                       **
 ** Autor: Philippe Keller                                                                **
 ** Datum: Dezember 2016                                                                  **
 ** Version: 1.0                                                                          **
 * *****************************************************************************************
*/

/*************************(Importieren der genutzten Bibliotheken)*************************/
#include <Keypad_I2C.h>
#include <Keypad.h>        
#include <Wire.h>

/****************************(Definieren der Globale Variablen)***************************/
#define I2CADDR 0x38                          // I2C Adresse vom PCF8574

const byte anzZeilen = 4;                        //Anzahl Zeilen 
const byte anzSpalten = 4;                       //Anzahl Spalten

//Hier kannst du die Symbole von deinem Keypad eintragen
char tastenLayout[anzZeilen][anzSpalten] = {
  {'1','2','3','A'}, 
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

//Hier definieren wie das Keypad mit den IO Pins vom PCF8574 verdrahtet ist.
byte zeilenPins[anzZeilen] = {0, 1, 2, 3};       //Zeilen Pins
byte spaltenPins[anzSpalten] = {4, 5, 6, 7};     //Spalten Pins

//Initialisierung von Keypad
Keypad_I2C i2cKeypad( makeKeymap(tastenLayout), zeilenPins, spaltenPins, anzZeilen, anzSpalten, I2CADDR); 

/*******************************************(setup)****************************************/
void setup(){
  i2cKeypad.begin( );        
  Serial.begin(9600);
}

/*************************************(Hauptprogramm)**************************************/
void loop(){
  char ausgeleseneTaste = i2cKeypad.getKey();
  
  if (ausgeleseneTaste != NO_KEY){
    Serial.println(ausgeleseneTaste);
  }
}


Mit Touch Sensor MPR121 Sound Effekte abspielen
In diesem Blog Eintrag möchte ich euch zeigen wie ihr einen Kapazitiven Sensor mit dem Touch Sensor MPR121 selber bauen könnt....
Wasserdichtes Gehäuse für IoT Thingspeak
In diesem Blog zeige ich euch wie du ein Wasserdichtes Gehäuse für den Aussenbereich bauen kannst. Damit wir sehen wie dicht das Gehäuse ist, habe ich...
10 Bemerkungen
Ulrich
Ulrich

Sorry, bei geht geht gar nichts, Programm geladen, Schaltung aufgebaut, kein Fehler, jedoch wird kein Tastencode ausgegeben.
Kann mir jemand bitte helfen
VG Ulrich

Friedrich Kirchmayer
Friedrich Kirchmayer


sketch_oct07c:50:104: error: no matching function for call to 'Keypad_I2C::Keypad_I2C(char*, byte [4], byte [4], const byte&, const byte&, int)'

Bitte um Lösung.
mfG Kirmi




Jürgen Willnecker
Jürgen Willnecker

Ein gut erklärter Artikel. Danke.
Nachdem ich die Library händisch ins Arduino Verzeichnis kopiert hatte, kompilierte das Programm fehlerfrei. Auf einem "Arduino Leonardo" funktionierte nichts. Allerdings auch nicht die serielle Ausgabe, weiß der Kuckuck warum. Dann umgeschwenkt auf einen "Arduino Uno": seriell geht mit einem Begrüßungstext, Keyboard nichts. Beim weiteren Lesen im web darauf gestoßen, dass es 2 Versionen der 8574 gibt und dass man aus China mal diesen und mal die andere Variante bekommt! Hinweis: auch in Europa gekaufte Boards kommen aus China. Zwischenzeitlich noch ein Programm benutzt, daß die I2C Adresse scannt. Dann lief auch das Keypad mit Adressen zwischen 0c20 .. 0x27.
Hinweis: auf dem Expanderboard sind 2 SMD Widerstände mit je 10 kOhm. Das sind die PullUps für SCL und SDA. Damit läuft der Bus zumindest für kurze Leitungen.
Abschließend ein Satz aus einem Forum "I2C: weniger Leitungen, mehr Probleme!"

Moritz
Moritz

ACHTUNG ES GAB EIN UPADTE IN DER I2C Keypad Library

Und zweitens:
#define I2CADDR 0x20
{ 0, 1, 2, 3};
{ 4, 5, 6, 7};
void setup(){
Wire.begin( ); //FEHLT oben im Code dann geht der I2C Bus
i2cKeypad.begin( );
Serial.begin(9600);
}

Moes
Moes

Also bei mir geht garnichts am arduino uno..
der i/o expander hat die adresse #define I2CADDR 0x20 als default wert mit allen jumper rechts...
Die Folientastatur ist inordnung mit dem nachfolgenden Sketch.. am I/O expander geht nichts :-(
Bitte um Hilfe! Was kann ich tun den PCF8574 zu testen, pins verbinden führ zu keinerlei ausgabe im seriellen monitor
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//Pins 1,2,3,4 on the keypad
byte rowPins[ROWS] = { 2, 3, 4, 5}; //connect to the row pinouts of the keypad
//Pins 5,6,7,8 on the keypad
byte colPins[COLS] = { 6,7,8,9}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){Serial.begin(9600);}
void loop(){ char key = keypad.getKey(); if (key){Serial.println(key);}}

jonix
jonix

Hallo Philippe,
könntest Du mir das Fritzing-Bauteil des PCF8574 auch zusenden?
Grüße und vielen Dank
Jonathan

Zeige 1 bis 6 von 10 (2 Seite(n))
Einen Kommentar hinterlassen
Anmerkung: HTML wird nicht unterstützt!