TM1638 Erweiterungsmodul (🚧)

Synopsis: HandsontecUserGuide🔗 Datenblatt🔗 TM1638plusLib🔗
Günstig an viele LEDs ,7-Segmentanzeigen und Tasten kommen, dabei nur 3 IO-Leitungen verbrauchen.
Versorgungsspannung VCC = 5V. Achtung: Bei µC mit 3.3V wie z.B. STM32 und ESP32 sollte beim Pin für DIO, der auch Daten zum µC sendet, überprüft werden, ob eine Spannungstoleranz für 5V Signale existiert, sonst ist ein Pegelwandler oder Spannungsteiler dafür an zu raten.
In Kombination mit guter Library (ohne wäre es gruselig zu verwenden) kann es bei Projekten nützlich sein.
Lerneffekt bzgl. TGI-Bildungsplan finde ich nicht so hoch. Für Anfänger ist es auch mit Lib nicht so einfach zu verstehen was passiert.
Position 0 der LEDs, Taster und 7-Segment-Stellen ist Links.
Für Fortgeschrittene ist das Modul durchaus brauchbar, sie können durch die Lib, die sie dann auch verstehen sollten bei Projekten leicht eine günstige Anzeige und 8 Taster anbinden.

TM1638 Erweiterungsmodul
TM1638 Erweiterungsmodul

In der Lib🔗 gibt es prima Beispiele🔗 und auch eine gute Doku mit Klassendiagramm🔗..

Anbindung an µC geschieht mit Software SPI artiger Schnittstelle, die Pins dafür können daher frei gewählt werden.
Im folgenden Testprogramm wurde für Strobe (STB) Arduino-Pin 4, Clock (CLK) 6, Daten (DIO) 7 verwendet. Die Anzeige ist mit VCC an 5V angeschlossen, daher sollte beim GPIO-Pin für Daten (DIO) auf 5V Toleranz geachtet werden, über diesen Pin werden die Tastaturzustände empfangen.
ToDo: Wie sieht das z.B. bei ESP32 aus?

Kleines Testprogramm

#include <TM1638plus.h>

#define  STROBE_TM 4 // strobe = GPIO connected to strobe line of module
#define  CLOCK_TM 6  // clock = GPIO connected to clock line of module
#define  DIO_TM 7 // data = GPIO connected to data line of module
bool high_freq = false; //default false,, If using a high freq CPU > ~100 MHZ set to true.

//Constructor object (GPIO STB , GPIO CLOCK , GPIO DIO, use high freq MCU)
TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM, high_freq);

void setup() {
  tm.displayBegin();
  tm.displayText("MezMedia");
  delay(3000);
}

void loop() {
  static int test=0;
  int i;
  switch (test){
    case 0: // Helligkeit einstellen
      tm.setLEDs(0xFF00); // alle LEDs an
      for(i=0;i<=7;i++){
        tm.brightness(i);
        delay(500);
      }
      tm.brightness(2); // Default Helligkeit wieder einstellen
      tm.reset(); // Display löschen
      test++;
      break;
    case 1: // LEDs verwenden
      for(i=0;i<=7;i++){
        tm.setLED(i, 1); // an Position i einschalten
        delay(500);
        tm.setLED(i, 0); // an Position i ausschalten
      }
      test++;
      break;
    case 2: // (Hex-) Ziffern ausgeben
      for(i=0;i<=7;i++){
        tm.displayHex(i,i);
        delay(200);
      }
      delay(1000);
      for(i=8;i<=15;i++){
        tm.displayHex(i,i);
        delay(200);
      }
      delay(1000);
      test++;
      break;
    case 3: // Zahlendarstellung
      tm.DisplayDecNumNibble(53, 8, true, TMAlignTextRight); // "0053" "0008" , right aligned , leading zeros
      delay(3000);
      tm.displayIntNum(45, false, TMAlignTextLeft); // "45      "
      delay(3000);
      // TEST 7b Integer left aligned , leading zeros
      tm.displayIntNum(99991, true, TMAlignTextLeft); // "00099991"
      delay(3000);
      tm.reset();
      // TEST 7c Integer right aligned , NO leading zeros
      tm.displayIntNum(35, false, TMAlignTextRight); // "      35"
      delay(3000);
      // TEST 7d Integer right aligned , leading zeros
      tm.displayIntNum(9983551, true, TMAlignTextRight); // "09983551"
      delay(3000);
      // TEST 7e tm.DisplayDecNumNIbble left aligned
      tm.DisplayDecNumNibble(134, 70, false, TMAlignTextLeft); // "134 " "70" , left aligned, NO leading zeros
      delay(3000);
      tm.DisplayDecNumNibble(23, 662, true, TMAlignTextLeft); // "0023" "0662" , left aligned , leading zeros
      delay(3000);
      tm.reset();
      // TEST 7f tm.DisplayDecNumNIbble right aligned
      tm.DisplayDecNumNibble(43, 991, false, TMAlignTextRight); // "  43" " 991" , right aligned, NO leading zeros
      delay(3000);
      test++;
      break;
    default:
      tm.reset();
      tm.displayText("Love IT");
      test=0;  
  }
}