본문 바로가기
  • test
[E-01] Neo Matrix (Arduino V2.xx)/[E-01] 도형 그리기

[E-01] 도형 그리기

by ledmatrix 2024. 12. 27.

[E-01] 도형 그리기

 

다음은 LED_config.h 내용입니다.

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

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

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

/* 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 // 헤더 파일의 중복 포함 방지를 위한 조건부 컴파일 종료

 

 

다음은 neo_shape.ino 내용입니다.

#include <FastLED_NeoMatrix.h>  // FastLED NeoMatrix 라이브러리 포함
#include "LED_config.h"        // LED 매트릭스 설정을 위한 사용자 정의 헤더 파일

// LED 매트릭스를 제어할 핀 번호 정의
#define MATRIX_PIN 17            
// MATRIX_PIN은 NeoPixel 데이터 입력 핀을 정의합니다. 
// 핀 번호는 사용 중인 하드웨어에 따라 조정해야 합니다.

// LED 매트릭스 구성 방식 설정
// 매트릭스의 방향과 데이터를 읽는 방식을 지정합니다.
// - NEO_MATRIX_TOP: 매트릭스 데이터가 위쪽에서 시작
// - NEO_MATRIX_LEFT: 데이터가 왼쪽에서 오른쪽으로 진행
// - NEO_MATRIX_ROWS: 데이터가 행 단위로 전달
// - NEO_MATRIX_PROGRESSIVE: 연속적인 데이터 흐름
#define MATRIX_TYPE NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE

// 매트릭스 크기(MATRIX_WIDTH, MATRIX_HEIGHT)는 LED_config.h에서 정의된 값을 사용
CRGB leds[MATRIX_WIDTH * MATRIX_HEIGHT]; 
// CRGB 배열은 각 픽셀의 색상 데이터를 저장합니다. 
// FastLED 라이브러리의 CRGB 구조체는 Red, Green, Blue 값을 포함합니다.

// FastLED NeoMatrix 객체 초기화
FastLED_NeoMatrix *display = new FastLED_NeoMatrix(
    leds,                    // LED 배열
    MATRIX_WIDTH,            // 매트릭스 가로 크기
    MATRIX_HEIGHT,           // 매트릭스 세로 크기
    MATRIX_TYPE              // 매트릭스 방향 및 데이터 흐름 방식
);

// 초기 설정 함수
void setup() {
    Serial.begin(115200); // 시리얼 통신 초기화 (115200bps 설정)

    // FastLED 라이브러리로 LED 매트릭스를 초기화
    FastLED.addLeds<WS2812, MATRIX_PIN, GRB>(
        leds,                // LED 배열
        MATRIX_WIDTH * MATRIX_HEIGHT // LED 총 픽셀 수
    );

    display->begin();            // NeoMatrix 디스플레이 시작
    display->setTextWrap(false); // 텍스트 줄바꿈 비활성화 (한 줄에서 끝까지 출력)
    display->setBrightness(50);  // LED 밝기를 50으로 설정 (0~255 범위)
    display->fillScreen(0);      // 매트릭스 초기화 (검은색으로 채움)
    
    // MATRIX_WIDTH와 MATRIX_HEIGHT를 시리얼 모니터에 출력하여 매트릭스 설정 확인
    Serial.printf("Neo Pixel %d x %d \n", MATRIX_WIDTH, MATRIX_HEIGHT);
}

// 메인 루프 함수 (반복 실행)
void loop() {
    // 점 찍기
    // 좌표 (0, 0)에 빨간색 점 그리기
    display->drawPixel(0, 0, display->Color(255, 0, 0)); // RGB 값: 빨간색 (255, 0, 0)

    // 파란색 선 그리기
    // 시작 좌표: (1, 1), 끝 좌표: (7, 7)
    display->drawLine(1, 1, 7, 7, display->Color(0, 0, 255)); // RGB 값: 파란색 (0, 0, 255)

    // 초록색 사각형 테두리 그리기
    // 좌상단 시작 좌표: (8, 0), 가로길이: 8, 세로길이: 8
    display->drawRect(8, 0, 8, 8, display->Color(0, 255, 0)); // RGB 값: 초록색 (0, 255, 0)

    // 파란색 채워진 사각형 그리기
    // 좌상단 시작 좌표: (16, 0), 가로길이: 8, 세로길이: 8
    display->fillRect(16, 0, 8, 8, display->Color(0, 0, 255)); // RGB 값: 파란색 (0, 0, 255)

    // 빨간색 원 테두리 그리기
    // 중심 좌표: (8, 12), 반지름: 3
    display->drawCircle(8, 12, 3, display->Color(255, 0, 0)); // RGB 값: 빨간색 (255, 0, 0)

    // 초록색 채워진 원 그리기
    // 중심 좌표: (23, 12), 반지름: 3
    display->fillCircle(23, 12, 3, display->Color(0, 255, 0)); // RGB 값: 초록색 (0, 255, 0)

    // LED 매트릭스에 변경 사항 적용 (화면 갱신)
    display->show();

    // 100ms 대기
    delay(100);
}

 

 

 

display->drawPixel(x, y, color)

좌표 x,y에 점을 찍습니다.

 

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

좌표 x1,y1에서 좌표 x2,y2 까지 선을 그립니다.

display->drawRect(x, y, lx, ly, color) 

lx, ly는 좌표가 아니라 길이입니다.

좌표 x,y 에서 가로 길이 lx, 세로 길이 ly 만큼 이동하여 사각형을 그립니다.


display->fillRect(x, y, lx, ly, color)

좌표 x,y 에서 가로 길이 lx, 세로 길이 ly 만큼 이동하여 내부가 찬 사각형을 그립니다.


display->drawCircle(x, y, r, color)

x,y 는 좌측 시작점이 아니라 원의 중심 좌표입니다.

원의 중심에서 반지름 r만큼 떨어진 위치에 원을 그립니다.


display->fillCircle(x, y, r, color)

원의 중심에서 반지름 r만큼 떨어진 위치에 내부가 찬 원을 그립니다.

 

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

세 개의 점을 서로 있는 선 긋기

 

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

세 개의 점의 내부를 채우기

 

display->drawRoundRect(x, y, lx, ly, r, Color) 

r은 둥근 모서리의 반지름

 

display->fillRoundRect(x, y, lx, ly, r, Color) 

둥근 모서리 사각형의 내부를 채우기

 

댓글