/* Ejemplo de uso de displays de 7 segmentos mediante el driver TM1637
Utiliza la biblioteca: https://github.com/avishorp/TM1637
*/
#include <TM1637Display.h>
const int CLK = 2;
const int DIO = 3;
const int TEST_DELAY = 500;
const uint8_t SEG_DONE[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
TM1637Display display(CLK, DIO);
void setup() {}
void loop() {
int k;
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
display.setBrightness(0x0f);
// Encender todos los segmentos
display.setSegments(data);
delay(TEST_DELAY);
// Selectivamente setear diferentes digitos
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(1);
data[2] = display.encodeDigit(2);
data[3] = display.encodeDigit(3);
display.setSegments(data);
delay(TEST_DELAY);
display.clear();
display.setSegments(data + 2, 2, 2);
delay(TEST_DELAY);
display.clear();
display.setSegments(data + 2, 2, 1);
delay(TEST_DELAY);
display.clear();
display.setSegments(data + 1, 3, 1);
delay(TEST_DELAY);
// Mostrar números decimales con/sin ceros
// ___0
display.showNumberDec(0, false);
delay(TEST_DELAY);
// 0000
display.showNumberDec(0, true);
delay(TEST_DELAY);
// ___1
display.showNumberDec(1, false);
delay(TEST_DELAY);
// 0001
display.showNumberDec(1, true);
delay(TEST_DELAY);
// _301
display.showNumberDec(301, false);
delay(TEST_DELAY);
// 0301
display.showNumberDec(301, true);
delay(TEST_DELAY);
display.clear();
// _14_
display.showNumberDec(14, false, 2, 1);
delay(TEST_DELAY);
display.clear();
// 04__
display.showNumberDec(4, true, 2, 2);
delay(TEST_DELAY);
// __-1
display.showNumberDec(-1, false);
delay(TEST_DELAY);
// _-12
display.showNumberDec(-12);
delay(TEST_DELAY);
// -999
display.showNumberDec(-999);
delay(TEST_DELAY);
display.clear();
// _-5_
display.showNumberDec(-5, false, 3, 0);
delay(TEST_DELAY);
// f1Af
display.showNumberHexEx(0xf1af);
delay(TEST_DELAY);
// __2C
display.showNumberHexEx(0x2c);
delay(TEST_DELAY);
// 00d1
display.showNumberHexEx(0xd1, 0, true);
delay(TEST_DELAY);
display.clear();
// d1__
display.showNumberHexEx(0xd1, 0, true, 2);
delay(TEST_DELAY);
// Recorrer todos los puntos
for (k = 0; k <= 4; k++) {
display.showNumberDecEx(0, (0x80 >> k), true);
delay(TEST_DELAY);
}
// Prueba de brillo
for (k = 0; k < 4; k++)
data[k] = 0xff;
for (k = 0; k < 7; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(TEST_DELAY);
}
// Prueba On/Off
for (k = 0; k < 4; k++) {
display.setBrightness(7, false); // Apagar
display.setSegments(data);
delay(TEST_DELAY);
display.setBrightness(7, true); // Encender
display.setSegments(data);
delay(TEST_DELAY);
}
// Done!
display.setSegments(SEG_DONE);
while (1)
;
}