본문 바로가기
  • test
[E-02] LED Panel 32x16 (Arduino V2.x.x)/[E-02] 도형 그리기

[E-02] 도형 그리기

by ledmatrix 2024. 12. 29.

[E-02] 도형 그리기

 

LED_config.h 

#ifndef _LED_CONFIG_H_ // 헤더 파일의 중복 포함 방지
#define _LED_CONFIG_H_

// 매트릭스 디스플레이 설정
#define MATRIX_WIDTH  64         // LED 매트릭스의 가로 크기를 정의 (LED의 가로 픽셀 수)
#define MATRIX_HEIGHT 32         // LED 매트릭스의 세로 크기를 정의 (LED의 세로 픽셀 수)

// 전체 디스플레이 영역 설정
#define TOTAL_WIDTH  128         // 전체 디스플레이의 가로 크기 (모듈 연결을 고려한 값, 현재는 단일 모듈)
#define TOTAL_HEIGHT  32         // 전체 디스플레이의 세로 크기 (모듈 연결을 고려한 값, 현재는 단일 모듈)

/* LED MATRIX 설정
 ESP32-HUB75 매트릭스 라이브러리 사용 시 매트릭스 객체를 외부에서 참조 가능하도록 선언
 extern 키워드를 사용하여 다른 소스 파일에서 이 객체를 정의 및 사용할 수 있도록 지정
*/
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
extern MatrixPanel_I2S_DMA *display;

/* NeoPixel MATRIX 설정
 FastLED_NeoMatrix 객체를 외부에서 참조 가능하도록 extern으로 선언
 다른 소스 파일에서 이 객체를 정의 및 사용할 수 있도록 지정
*/
// #include <FastLED_NeoMatrix.h>
// extern FastLED_NeoMatrix *display;

#endif // 헤더 파일의 중복 포함 방지를 위한 조건부 컴파일 종료

 

 

led_shaple.ino

#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h> // ESP32 HUB75 매트릭스 제어 라이브러리
#include "LED_config.h"                     // LED 설정 파일 포함

#define MATRIX_CHAIN 1   // 체인으로 연결된 매트릭스 패널의 총 개수 (현재 1개 사용)

// MatrixPanel_I2S_DMA 클래스 객체 포인터를 초기화 (디스플레이 객체를 동적으로 생성)
MatrixPanel_I2S_DMA *display = nullptr;

void setup() {
  // 매트릭스 크기와 체인 수를 기반으로 HUB75 구성 초기화
  HUB75_I2S_CFG mxconfig(MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_CHAIN);

  // HUB75 매트릭스와 연결된 ESP32의 GPIO 핀 번호 설정
  mxconfig.gpio.r1 = 25;   // 첫 번째 스캔 라인의 빨간색 데이터 핀
  mxconfig.gpio.b1 = 26;   // 첫 번째 스캔 라인의 파란색 데이터 핀
  mxconfig.gpio.g1 = 27;   // 첫 번째 스캔 라인의 초록색 데이터 핀
  mxconfig.gpio.r2 = 21;   // 두 번째 스캔 라인의 빨간색 데이터 핀
  mxconfig.gpio.b2 = 22;   // 두 번째 스캔 라인의 파란색 데이터 핀
  mxconfig.gpio.g2 = 0;    // 두 번째 스캔 라인의 초록색 데이터 핀

  // 주소 핀 설정 (행 선택 신호)
  mxconfig.gpio.a   = 12;  // A 주소 핀
  mxconfig.gpio.b   = 5;   // B 주소 핀
  mxconfig.gpio.c   = 23;  // C 주소 핀
  mxconfig.gpio.d   = 4;   // D 주소 핀
  mxconfig.gpio.e   = -1;  // E 주소 핀 (사용하지 않음)

  // 기타 제어 핀 설정
  mxconfig.gpio.lat = 32;  // 래치 신호 핀 (데이터 잠금)
  mxconfig.gpio.oe  = 33;  // 출력 활성화 핀 (Output Enable)
  mxconfig.gpio.clk = 15;  // 클럭 신호 핀 (Clock)

  // 추가 설정
  mxconfig.clkphase = false; // 클럭 위상 설정 (false는 기본값)
  mxconfig.driver = HUB75_I2S_CFG::ICN2038S; // 매트릭스 드라이버 IC 지정 (ICN2038S)
  mxconfig.min_refresh_rate = 240;          // 최소 화면 리프레시 속도 설정 (240Hz)

  // MatrixPanel_I2S_DMA 객체를 동적으로 생성하고 초기화
  display = new MatrixPanel_I2S_DMA(mxconfig);
  display->begin();                         // 디스플레이 초기화 (사용 준비)
  display->setTextWrap(false);              // 텍스트 줄 바꿈 비활성화
  display->setBrightness(150);              // 디스플레이 밝기 설정 (0~255, 150은 중간 밝기)
  display->clearScreen();                   // 화면 초기화 (검은색으로 채우기)
}

void loop() {
  // 개별 픽셀 그리기
  display->drawPixel(0, 0, display->color565(255, 0, 0)); // 빨간색 픽셀 출력 (좌표: 0, 0)

  // 선 그리기
  display->drawLine(1, 1, 7, 7, display->color565(0, 255, 0)); // 초록색 대각선 (좌표: 1,1 → 7,7)

  // 사각형 테두리 그리기
  display->drawRect(8, 0, 8, 8, display->color565(0, 0, 255)); // 파란색 사각형 테두리 (8x8 크기)

  // 사각형 채우기
  display->fillRect(16, 0, 8, 8, display->color565(255, 0, 255)); // 보라색 사각형 채우기 (8x8 크기)

  // 원 테두리 그리기
  display->drawCircle(28, 4, 3, display->color565(0, 255, 0)); // 초록색 원 테두리 (중심: 28,4, 반지름: 3)

  // 원 채우기
  display->fillCircle(36, 4, 3, display->color565(0, 255, 255)); // 청록색 원 채우기 (중심: 36,4, 반지름: 3)

  // 삼각형 테두리 그리기
  display->drawTriangle(0, 8, 0, 15, 7, 15, display->color565(255, 0, 0)); // 빨간색 삼각형 테두리

  // 삼각형 채우기
  display->fillTriangle(8, 8, 8, 15, 15, 15, display->color565(255, 0, 255)); // 보라색 삼각형 채우기

  // 둥근 사각형 테두리 그리기
  display->drawRoundRect(0, 16, 16, 8, 1, display->color565(0, 255, 0)); // 초록색 둥근 사각형 테두리 (16x8 크기, 반지름: 1)

  // 둥근 사각형 채우기
  display->fillRoundRect(16, 16, 16, 8, 1, display->color565(255, 0, 0)); // 빨간색 둥근 사각형 채우기 (16x8 크기, 반지름: 1)

  // 출력 내용 유지 후 100ms 대기
  delay(100); // 속도 제어 (100ms 간격으로 화면 갱신)
}​


display->drawLine(x1, y1, x2, y2, color) 

    좌표1에서 좌표2까지 선 그리기

display->drawTriangle(x1, y1, x2, y2, x3, y3, color)

    좌표1, 좌표2, 좌표3, 세 점에 선 그리기

display->drawRect(x1, y1, lx, ly, color) 

    lx, ly는 좌표가 아니라 가로 길이, 세로 길이

display->drawRoundRect(x1, y1, lx, ly, r, color) 

    lx, ly는 좌표가 아니라 가로 길이, 세로 길이  r :모서리의 둥근 부분의 반지름

 

댓글