This is pretty simple 4 digits (and a colon between 2-digit groups) display. Natural use would be to display time (see here), but I decided to show a sample used for IR Remote codes testing.
Here is the initial state before anything was sent to the receiver.
Label Ready 😉 was obtained by adressing single segments (as described for instance in document on forum.arduino.cc
Later on codes (2 digits are displayed on rightmost positions, while on 2 leftmost, there is previous code visible. it is usefull in particular when a key is hold a bit longer, and code 20 is received.
To divide visualy the two groups, I used semicolon. Unfortunately it was not implemented in a library I used ( Avishay (avishorp) library on github ), so it is “semi manually” added in the code.
#include <IRremote.h>
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 9
#define DIO 10
#define RECV_PIN 11
unsigned long next_time;
int res, last_res;
uint8_t segto;
const uint8_t SEG_RDY[] = { 0, //empty first digit
SEG_E | SEG_G, // r
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_B | SEG_C | SEG_D | SEG_F | SEG_G // y
};
TM1637Display display(CLK, DIO);
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
irrecv.enableIRIn(); // Start the receiver
display.setBrightness(0x0b); //ca. 75% of "full power"
display.setSegments(SEG_RDY);
}
void loop() {
if (irrecv.decode(&results)) {
res = resultIR(results.value);
if ((res != 20) || (next_time < millis())) {
display.showNumberDec(100*last_res + res, true);
segto = 0x80 | display.encodeDigit(last_res%10);
display.setSegments(&segto, 1, 1); //add colon to separate values
last_res = res;
next_time = millis()+100;
}
irrecv.resume(); // Receive the next value
}
}
And again (as in IR remote simple test via serial interface) decoding function shall be added:
int resultIR(long reading){
int result;
switch (reading) {
case 16738455:
result = 1 ;
break;
case 16750695:
result = 2 ;
break;
case 16756815:
result = 3 ;
break;
case 16724175:
result = 4 ;
break;
case 16718055:
result = 5 ;
break;
case 16743045:
result = 6 ;
break;
case 16716015:
result = 7 ;
break;
case 16726215:
result = 8 ;
break;
case 16734885:
result = 9 ;
break;
case 16730805:
result = 10 ; //przycisk 0 button 0
break;
case 16728765:
result = 11 ; //gwiazdka asterix
break;
case 16732845:
result = 12 ; //krzyżyk hash
break;
case 16736925:
result = 14 ; //góra up
break;
case 16754775:
result = 15 ; //dół down
break;
case 16720605:
result = 16 ; //lewy left
break;
case 16761405:
result = 17 ; //prawy right
break;
case 16712445:
result = 18 ; //OK
break;
case 16753245:
result = 19 ; //włącznik na pilocie kamery, ON-OFF on dashboard camera
break;
case 16769565:
result = 21 ; //detekcja ruchu - kamera, movement detection on dashboard camera
break;
case 4294967295:
result = 20 ; //przytrzymanie, hold
break;
default:
result = 13 ; //błąd lub nieznany przycisk, error or not listed above
}
return result;
}


2 thoughts on “TM1637 4 digits”