[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 :모서리의 둥근 부분의 반지름
댓글