본문 바로가기

ESP32

TM74 LED Driver - 4 digit 7 segment

반응형

 

74HC595D 칩 2개가 포함된 4비트 LED 디지털 튜브 모듈용 아두이노 라이브러리 

참고

 

https://github.com/0xF6/TM74

 

 

 

 

 

사용법 예제 코드

 

// A0   A1   A2   5V  GND
//  |    |    |    |   |
// SCLK RCLK DIO  VCC GND

// SCLK, RCLK and DIO - control pins for this module
// VCC - 5V pin
// GND - zero pin
#include "TM74.h"
#define SCLK A0 
#define RCLK A1 
#define DIO  A2

TM74 disp(SCLK, RCLK, DIO);

const uint8_t useDot = 0x1;


void loop() 
{ 
    // fill segment data
    const Segment segs[4] = {
        Segment('1'), // 4 display
        Segment('1'), // 3 display
        Segment('2', useDot), // 2 display with enabled dot indication
        Segment('3') // 1 display
    };
    // send data to module
    disp.writeSegments(segs, sizeof(segs) / sizeof(Segment));
}

 

 

세그먼트에서 사용할 수 있는 기호 지원

 

'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
'A', 'b', 'C', 'd', 'E', 'F'
'°' // (degree)
'-' // (minus)

 

 

깃 허브 참고: https://github.com/0xF6/TM74

 

 

예제 코드는 RTC에서 읽어 온 시간 데이터를 출력하는 코드

 

 

//
// 1. Install library: Time, DS1307RTC
// 2. Connect TM74 at
//  A0   A1   A2   5V  GND - Arduino
//   |    |    |    |   |
//  SCLK RCLK DIO  VCC GND - TM74
// 3. Connect RTC module
//  SDA  SCL       GND  5V  - Arduino
//   |    |         |    |
//  SDA  SCL  SQW  GND  VCC - RTC module (DS1307RTC)
// 4. Compile and upload firmware
// 5. You are great ❤️❤️❤️
//

#include "TM74.h"
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#define SCLK A0
#define RCLK A1
#define DIO  A2

TM74 disp(SCLK, RCLK, DIO);

// Decomposite 1-2 digit to template string
String to2digitsStr(uint8_t number) {
  if(number == 0)
    return "00";
  if(number > 0 && number < 10)
    return "0" + String(number);
  return String(number);
}

// Decomposite 4-char string to Segment and send to LED driver
void deconstructAndDisplay(String str, uint8_t second)
{
  const Segment segs[4] = {
    Segment(str[3]),
    Segment(str[2]),
    Segment(str[1], second % 2 == 0), // every second blink dot in second LED segment
    Segment(str[0])
  };
  disp.writeSegments(segs, sizeof(segs) / sizeof(Segment));
}

// main loop
void loop() {
  tmElements_t tm;    // time structure
  if (RTC.read(tm)) { // start RTC read
    String n1 = to2digitsStr(tm.Hour);   // read Hour and cast to string
    String n2 = to2digitsStr(tm.Minute); // read minute and cast to string
    deconstructAndDisplay(n1 + n2, tm.Second); // composite string
  }
  else delay(1500); // delay when RTC module has error
}
void setup() { }

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^