iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
自我挑戰組

硬體學習日記系列 第 28

Day-28 arduino介紹-10 OLED

  • 分享至 

  • xImage
  •  

今天要介紹的是一個像小螢幕的東西-有機發光二極體,英文是Organic Light-Emitting Diode,簡寫就是OLED。前幾天有介紹使用LCD來顯示一些文字,今天就來介紹使用OLED來顯示一些內容~

OLED是一個輕薄且有效率的元件(如果有拿到實體的話要小心對待),他的呼叫方式跟LCD也有一些落差喔~
在模擬器中,有兩種版本的OLED,這邊使用的是「SSD1306 OLED display」,如下圖。
https://ithelp.ithome.com.tw/upload/images/20240905/201683629ewKrMcQp4.png

他有四個引腳,GND相信大家都很熟了,就是接地~然後VCC就接到5V,SCL則是接到「A5」,SDA則是接到「A4」。
接好線的樣子:
https://ithelp.ithome.com.tw/upload/images/20240905/20168362AVqojic7p3.png

那在執行前,有幾個函式庫要下載~

  1. Adafruit_GFX.h
  2. Adafruit_SSD1306.h

如果沒下載也沒關係,到時候執行時就會跳出畫面問你要不要下載。

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

然後要定義兩個常數,一個是用來表示寬度、一個則是高度。
通常寬度設為128,高度設為64,單位是像素。

#define SCREEN_WIDTH 128 //設定寬度
#define SCREEN_HEIGHT 64 //設定高度

那我們要先使用「Adafruit_SSD1306」來創建一個可以用來控制OLED的object,這是Adafruit函式庫提供用來控制OLED的class。創建好後,就可以用他來呼叫函式庫提供的function來控制OLED了~

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

接著來介紹基本的顯示方法~
首先是清空畫面:之前介紹LCD的時候,就直接lcd.clear(),那在OLED,則是object_name.clearDisplay()。

在OLED,一樣有游標可以設定,這邊就跟LCD一樣,為object_name.setCursor(x,y)。
那他有一個LCD沒有的功能,就是OLED可以設定自體的大小~object_name.setTextSize(value)。如果沒有設定,預設會是1。
如果想要設定自體顏色,則是object_name.setTextColor(color_name)。這邊一定要先設定喔,不然不會顯示出東西XD

那我覺得最特別的部分就是印字~
印字的呼叫方式是object_name.print(F(”content”)),除了這行的,後面還要加上object_name.display(),才會顯示文字。
如果使用「print」,那下一句被印出的content就會接序在上一句的後面;如果是使用「println」,下一句被印出的content就會在下一行印出。

接著就來點練習~這邊程式碼執行的話,就會從上往下印出「This is no.i line.」,每隔一秒會印出下一行。

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

#define SCREEN_WIDTH 128 //設定寬度
#define SCREEN_HEIGHT 64 //設定長度

//創建object
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup()
{
  //初始化OLED
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
        Serial.println(F("SSD1306 allocation failed"));
        for(;;);
    }

  display.clearDisplay(); //清空畫面
  display.setTextSize(1); //設定字體大小
  display.setTextColor(SSD1306_WHITE); //設定字的顏色
  display.setCursor(0,0); //設定游標位置
}

void loop()
{
  initial(); //清空畫面
  display.setCursor(0,0); //設定游標位置
  delay(500);
  for( int i = 1; i <= 8; ++i ){
    display.print(F("This is no."));
    display.print(i);
    display.println(F(" line."));
    display.display(); //顯示上面三行要求印出的文字
    delay(1000);
  }
}

void initial()
{
  display.clearDisplay(); //清空畫面
}

https://ithelp.ithome.com.tw/upload/images/20240905/20168362C3eb0Z1Gs8.png

今天就先到這邊~


上一篇
Day-27 arduino介紹-9 7-segment
下一篇
Day-29 嵌入式系統的歷史與演進
系列文
硬體學習日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言