프로젝트 일지/컴퓨터 HUD

[컴퓨터 HUD] Adafruit 라이브러리 적용해보기

우리집공돌이곰돌을좋아해 2022. 11. 16. 23:32
반응형

인터넷에서 SSD1306 관련하여 검색해보니 여러 라이브러리가 존재했습니다.
그중에서 제일 API 사용이 익숙한 방식으로 선정했습니다.
맨 하단에 첨부되어 있는 라이브러리를 받아 예제를 실행시켜보면 API들에 대한 이해가 쉬울 것입니다. 받아서 보드에 플래시 해보면, 각 함수 별로 챡챡 수행되는 게 보입니다. 대략 흐름을 보면 화면에 대한 세팅을 하고 display를 하면 띄워지는 것 같더군요. 이 부분이 매우 직관적이라 마음에 들었습니다.
우선 예제 중에 중간에 텍스트를 좌표 기반으로 넣는 예제를 활용해 보았습니다.  대강 CPU / GPU / RAM 에 대한 사용률을 띄우고 싶었습니다. 이 라이브러리의 아쉬운 점이라고 하면 글씨 크기가 소수점 단위로 조절이 되지 않습니다. 글씨 크기가 1로 설정할 경우 작아서 크기를 2로 설정할 경우에 크기가 커져 두 번째 줄 글씨가 잘립니다. ㅠㅠ 가시성이 떨어지지만 글씨 크기는 1로 작업을 시작해야 할 것 같습니다. (추후에는 애니메이션 타입으로 변경하여 가시성 개선 필요, 조금 더 큰 사이즈로 살걸,,) 전체 화면을 4 등분하여 아래 사진과 같이 띄워보았습니다. 한 칸이 비어있어 우선은 VRAM을 넣었는데 이 부분은 추후 다른 정보로 대체할까 고민 중입니다.

그리고 사진에서 보이듯 액정 전체가 OLED화면이 아닙니다.. 아래에 약간의 공백이 있었네요. 우선은 화면에 글씨를 띄우는 것까지 진행했으니 시리얼 통신으로 전달받은 데이터를 띄우는 부분을 구현해야겠습니다. 제가 자주 사용하는 패킷(나만의 통신 규약)이 있는데 이 부분에 대해서는 다음 글에서 자세히 다뤄보겠습니다.

 

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
  display.display();
  // Clear the buffer
  display.clearDisplay();
  display.setTextSize(1);             // Normal 1:1 pixel scale
  display.setTextColor(WHITE); // Draw 'inverse' text
  display.setCursor(0, 0);            // Start at top-left corner
  display.println(F("CPU:%"));
  display.setCursor(0, 16);            // Start at top-left corner
  display.println(F("GPU:%"));
  display.setCursor(64, 0);            // Start at top-left corner
  display.println(F("RAM:%"));
  display.setCursor(64, 16);            // Start at top-left corner
  display.println(F("VRAM:%"));
  display.display();
}

void loop() {
  // put your main code here, to run repeatedly:

}

Adafruit_SSD1306-master.zip
0.03MB

 

Adafruit-GFX-Library-master.zip
0.31MB

반응형