Das hier verwendete Arduino-Modul kann sowohl für schnelle Tests im Bereich der Arduino-Programmierung verwendet werden, als auch als Anzeige-Modul für verschiedenste Projekte, z.B. Anzeige von Sensor-Daten.
Das TM1638-Modul wird über eine SPI-Schnittstelle angesprochen, so dass die Anzahl an PINs für den Arduino minimal ist. (Die Pins am Arduino kann man auch variieren und sind hier nur beispielhaft angegeben)
TM1638 | Beschreibung | Arduino |
---|---|---|
VCC | Spannungsversorgung 5V | 5V |
GND | Ground (Masse) | GND |
STB | Strobe Pin | Pin 8 |
CLK | Clock Pin | Pin 9 |
DIO | Data Pin | Pin 10 |
Die folgenden Programm-Beispiele sollen die Funktionalität des TM1638-Moduls zeigen und verwenden alle die Library tm1638-library.
Dieser Sketch liest die Mikrotaster des TM1638-Moduls aus und stellt deren Bit-Position auf den 7-Segment-Anzeigen dar. Werden mehrere Taster gleichzeitig gerückt, so werden die entsprechenden Werte zusammengerechnet dargestellt.
#include <TM1638.h>
#define PIN_DIO 10
#define PIN_CLK 9
#define PIN_STB 8
TM1638 modul(PIN_DIO, PIN_CLK, PIN_STB);
void setup() {}
void loop()
{
byte button = modul.getButtons();
modul.setDisplayToDecNumber(button, 0b00000000, false);
}
In diesem Sketch werden zunächst nacheinander jede der 3mm-LEDs beleuchtet. Dann wird ein schneller über dieses LEDs berechnet. Im loop()-Teil werden je nach Druck auf einen der Mikrotaster die entsprechende LED beleuchtet.
#include <TM1638.h>
#define PIN_DIO 10
#define PIN_CLK 9
#define PIN_STB 8
TM1638 modul(PIN_DIO, PIN_CLK, PIN_STB);
void setup()
{
// show every single LED
byte leds[] = {1, 2, 4, 8, 16, 32, 64, 128};
for (byte i = 0; i < 8; i++) {
modul.setLEDs(leds[i]);
delay(250);
}
// binary counter
for (byte i = 0; i < 255; i++) {
modul.setLEDs(i);
delay(50);
}
delay(1000);
modul.setLEDs(0);
}
void loop()
{
// show LED corresponding to pressed button
byte button = modul.getButtons();
modul.setLEDs(button);
}
Dieser Sketch lässt einen beliebigen Text über die acht 7-Segment-Anzeigen durchrollen.
#include <TM1638.h>
#define PIN_DATA 10
#define PIN_CLOCK 9
#define PIN_STROBE 8
TM1638 module = TM1638(PIN_DATA, PIN_CLOCK, PIN_STROBE);
const char string[] = " PROJEKTE UND EXPERIMENTE UNTER - ELEKTRO.TURANIS.DE ";
int base = 0;
void setup() {}
void loop()
{
const char* pos = string + base + 8;
if (pos >= string && pos + 8 < string + sizeof(string)) {
module.setDisplayToString(pos);
} else {
module.clearDisplay();
}
base++;
if (base == sizeof(string) - 8) {
base = -8;
}
delay(200);
}
Der letzte Sketch ist von einem der vorgegebenen Beispielen der TM1638-Library abgewandelt und testet etliche verschiedene Funktionen des Moduls.
#include <TM1638.h>
#define PIN_DATA 10
#define PIN_CLOCK 9
#define PIN_STROBE 8
TM1638 module = TM1638(PIN_DATA, PIN_CLOCK, PIN_STROBE);
byte mode = 0;
unsigned long startTime;
void setup()
{
startTime = millis();
module.setupDisplay(true, 7);
}
void loop()
{
byte buttons = module.getButtons();
unsigned long runningSecs = (millis() - startTime) / 100;
// button pressed - change mode
if (buttons != 0) {
mode++;
mode%=8;
module.clearDisplay();
module.setLEDs(0);
}
switch (mode) {
case 0:
module.setDisplayToDecNumber(runningSecs, 1 << 7);
break;
case 1:
module.setDisplayToDecNumber(runningSecs, 1 << 6, false);
break;
case 2:
module.setDisplayToHexNumber(runningSecs, 1 << 5);
break;
case 3:
module.setDisplayToHexNumber(runningSecs, 1 << 4, false);
break;
case 4:
module.setDisplayToBinNumber(runningSecs, 1 << 3);
break;
case 5:
module.clearDisplayDigit((runningSecs - 1) % 8, 0);
module.setDisplayDigit(runningSecs % 8, runningSecs % 8, 0);
break;
case 6:
char s[8];
sprintf(s, "Secs %03d", runningSecs % 999);
module.setDisplayToString(s);
break;
case 7:
if (runningSecs % 2 == 0) {
module.setDisplayToString("TM1638 ");
} else {
module.setDisplayToString("LIBRARY ");
}
module.setLED(0, (runningSecs - 1) % 8);
module.setLED(1 + runningSecs % 3, runningSecs % 8);
break;
case 8:
default:
module.setDisplayToError();
break;
}
}
zurück