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
[Vorstellung] Keypad 4x4 kapazitiv
24.02.2019, 14:17 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2019 17:59 von Tommy56.)
Beitrag #1
[Vorstellung] Keypad 4x4 kapazitiv
Hallo Zusammen,

ich hatte ja das Glück, bei der Verlosung zum 6. Jahrestag, einen Gutschein für AZ-Delivery gewonnen zu haben. Dabei habe ich mir auch das AZ-Delivery Keypad TTP229 4x4 (kapazitiv) gekauft.

Über seinen Einsatz möchte ich kurz berichten, da es dabei einige Stolpersteine gibt.

Eins vorweg, wenn man es zum Laufen bekommen hat, ist es richtig gut. Es reagiert z.B. durch 3,5 mm dickes Plastik immer noch und kann durch seinen weiten Betriebsspannungsbereich sowohl mit den 5V, als auch den 3,3V Prozessoren arbeiten.

Leider hat die von AZ-Delivery bereitgestellte / verlinkte Dokumentation einen entscheidenden Mangel: Sie beschreibt den falschen Schaltkreis.

Vom TTP229 gibt es mehrere Varianten. Als eBook bereitgestellt und auf der Seite verlinkt wird das Datenblatt zur Variante mit 48 Pins, die auch I2C beherrscht.
Verbaut auf dem Modul ist aber die abgespeckte Variante TTP229-BSF mit 28 Pins, die leider kein I2C kann. Nur ein eigenes serielles Protokoll. Ich habe AZ-Delivery bereits über den Fehler informiert und hoffe, dass sie es korrigieren.

Hier ist das richtige Datenblatt.

Eine zweite Stolperstelle wird zwar im verlinkten Schematics sichtbar, sonst aber nirgends erwähnt: Das Modul wird so ausgeliefert, dass es nur die ersten 8 Tasten bedient. Erst durch Einlöten einer Brücke werden auch alle 16 Tasten bedient.

Über diese und andere Brücken kann man hier nachlesen.

Eine Lib für den Arduino gibt es auch.

Wer sich an dem Keypad versuchen will, sollte jetzt alle notwendigen Infos haben.

Gruß Tommy



Da mir die vorhandenen Libs nicht die Funktionen gegeben haben, die ich wollte, habe ich selbst eine Lib geschrieben.
TTP229B.h
Code:
/**************************************************************************
Copyright by Thomas Kühnert. All rights reserved.

This file is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

Arbeiten mit dem 4x4 Keypad mit TTP229BSF
Datenblatt: https://www.sunrom.com/get/611100
***************************************************************************/
#pragma once
#include <Arduino.h>

class TTP229B {
public:  
  // Konstruktor
  // mit keyCnt kann die Anzahl der Tasten begrenzt werden (von 1 an gezählt)
  TTP229B(uint8_t sclPin, uint8_t sdoPin, uint8_t keyCnt = 16);
  // auslesen der Initialisierungsparameter
  uint8_t getSclPin();
  uint8_t getSdoPin();
  uint8_t getKeyCnt();
  // Holt die Nummer (1-keyCnt) der gedrückten Taste solange sie gedrückt ist
  // 0 wenn keine Taste gedrückt ist
  uint8_t getKey();
  // Holt die Nummer (1-keyCnt) der gedrückten Taste einmal
  // erst wenn keine oder eine andere Taste gedrückt ist wird diese zurück geliefert
  // 0 wenn keine Taste gedrückt ist oder immer noch die gleiche Taste
  uint8_t getSingleKey();
  // Übersetzungsarray von Tastennummer - 1 in ein Zeichen
  void setCharArray(char *arr);
  // liefert das Zeichen aus dem Array, ansonsten wie getKey()
  // '\0' wenn keine Taste gedrückt wurde oder kein array gesetzt wurde
  char getChar();
  // liefert das Zeichen aus dem Array, ansonsten wie getSingleKey()
  // '\0' wenn keine Taste gedrückt wurde oder kein array gesetzt wurde
  char getSingleChar();
  
private:
  uint8_t _sclPin, _sdoPin, _keyCnt, _oldKey = 0;
  char *_arr = nullptr;
};

TTP229B.cpp
Code:
/**************************************************************************
Copyright by Thomas Kühnert. All rights reserved.

This file is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

Arbeiten mit dem 4x4 Keypad mit TTP229BSF
Datenblatt: https://www.sunrom.com/get/611100
***************************************************************************/

#include "TTP229B.h"

  TTP229B::TTP229B(uint8_t sclPin, uint8_t sdoPin, uint8_t keyCnt)
    : _sclPin{sclPin}, _sdoPin{sdoPin}, _keyCnt{keyCnt} {
    pinMode(_sclPin,OUTPUT);
    digitalWrite(_sclPin,HIGH);
    pinMode(_sdoPin,INPUT);    
  }
  
  uint8_t TTP229B::getSclPin() {
    return _sclPin;
  }
  
  uint8_t TTP229B::getSdoPin() {
    return _sdoPin;
  }
  uint8_t TTP229B::getKeyCnt() {
    return _keyCnt;
  }
  
  uint8_t TTP229B::getKey() {
  uint8_t ret = 0;
    delayMicroseconds(20); // Wartezeit am Anfang lt. Datenblatt
    for(uint8_t i = 0; i < _keyCnt; i++) {  
         digitalWrite(_sclPin, LOW);
        delayMicroseconds(2);
      if (!digitalRead(_sdoPin)) ret = i + 1;  
        digitalWrite(_sclPin, HIGH);
        delayMicroseconds(2);
    }
    delay(3); // Wartezeit am Ende lt. Datenblatt
    return ret;
  }

  uint8_t TTP229B::getSingleKey() {
  uint8_t key = getKey();
    if (key != _oldKey) {
      _oldKey = key;
      return key;
    }    
    return 0;
  }

  void TTP229B::setCharArray(char * arr) {
    _arr = arr;
  }
  char TTP229B::getChar() {
  uint8_t key;  
    key = getKey();
    if (_arr == nullptr || key == 0) return '\0';
    return _arr[key-1];
  }
  
  char TTP229B::getSingleChar() {
  uint8_t key;  
    key = getSingleKey();
    if (_arr == nullptr || key == 0) return '\0';
    return _arr[key-1];
  }

Beispiel:
Code:
/**************************************************************************
Copyright by Thomas Kühnert. All rights reserved.

This file is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

Arbeiten mit dem 4x4 Keypad mit TTP229BSF
Datenblatt: https://www.sunrom.com/get/611100
***************************************************************************/

#include "TTP229B.h"

// const byte SCL_PIN = 2;  // clock pin UNO
// const byte SDO_PIN = 3;  // data pin UNO

const byte SCL_PIN = 15;  // GPIO clock pin ESP8266
const byte SDO_PIN = 13;  // GPIO data pin ESP8266

TTP229B ttp(SCL_PIN, SDO_PIN, 16); // TTP229B(sclPin, sdoPin, keyCnt)

// Belegung wie Folientastatur
char tasten[] = {'1', '2', '3', 'A',
                 '4', '5', '6', 'B',
                 '7', '8', '9', 'C',
                 '*', '0', '#', 'D'};

void setup() {
    Serial.begin(115200);
    Serial.println("\nStart Test Keypad");
  ttp.setCharArray(tasten);
}

void loop() {
  char key;
  key = ttp.getSingleChar();
  if (key) Serial.println(key);  
}

Viel Spaß damit.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Exclamation LCD Keypad Shield - Paralell Port Versionen Bitklopfer 0 9.021 23.03.2014 16:39
Letzter Beitrag: Bitklopfer

Gehe zu:


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