開發第一個程式
引入程式庫和定義常數
#include <Adafruit_NeoPixel.h> #define LED_PIN 6 // LED燈條連接的Arduino腳位 #define LED_COUNT 45 // LED燈的數量 #define default_brightness 30 // LED 預設亮度 uint8_t r = 255 , g = 255 , b = 255; uint8_t brightness = default_brightness;
#include <Adafruit_NeoPixel.h>
:這行代碼引入了 Adafruit_NeoPixel 程式庫,該庫提供了控制 WS2812 LED 燈條的所有功能。#define LED_PIN 6
:定義了燈條數據線連接到 Arduino 的哪個腳位。在這裡,腳位 D6 被用來發送數據信號給燈條。#define LED_COUNT 45
:定義了燈條上的 LED 總數。在這個例子中,燈條包含 45 個 LED。#define default_brightness 30
:設置了 LED 的預設亮度值為 30。亮度值範圍是 0 到 255,值越大亮度越高。uint8_t r = 255 , g = 255 , b = 255;
:這三個變量分別定義了紅色、綠色和藍色的初始值,每個顏色都被設置為最大值 255(白色)。uint8_t brightness = default_brightness;
:定義了一個變量brightness
,並將其設置為預設亮度值。
初始化 NeoPixel 庫
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
:這行代碼創建了一個 strip
對象,用來控制燈條。這裡傳遞了三個參數:
LED_COUNT
是 LED 的數量。LED_PIN
是燈條連接到 Arduino 的引腳。NEO_GRB + NEO_KHZ800
是一個配置標誌,告訴程式庫 LED 是使用 GRB 格式(綠、紅、藍的順序),並且燈條的時鐘頻率是 800kHz。
設置部分
void setup() { strip.begin(); // 初始化LED燈條 strip.show(); // 初始化所有LED為'關閉'狀態 led_default(); }
strip.begin();
:初始化燈條,使其準備好接收和顯示數據。strip.show();
:更新燈條的狀態,這裡的作用是確保在初始化時所有 LED 都是關閉的。led_default();
:調用led_default
函數,將所有 LED 設置為初始顏色和亮度。
主循環函數
void loop() { // put your main code here, to run repeatedly: }
void loop()
:這是 Arduino 的主循環函數,它會不斷重複執行。當前的代碼中,loop
函數內沒有任何指令,因此燈條會在設置後保持靜止。
設置 LED 的預設顏色和亮度
void led_default()
:這個函數用來將燈條上的每個 LED 都設置為預設顏色(白色)和亮度。for(int i = 0; i < strip.numPixels(); i++)
:這個for
迴圈遍歷燈條上的每個 LED。strip.setPixelColor(i, strip.Color(r, g, b));
:這行代碼設置當前 LED 的顏色。strip.Color(r, g, b)
函數會根據 r、g、b 三個值生成一個顏色數據,並設置給第i
個 LED。strip.show();
:每次設置完顏色後,strip.show()
都會更新燈條上的顯示。strip.setBrightness(brightness);
:這行代碼設置燈條的亮度。亮度範圍是 0 到 255,這裡使用了預設的亮度值 30。
完整代碼
#include <Adafruit_NeoPixel.h> #define LED_PIN 6 // LED燈條連接的Arduino腳位 #define LED_COUNT 45 // LED燈的數量 #define default_brightness 30 // LED 預設亮度 uint8_t r = 255 , g = 255 , b = 255; uint8_t brightness = default_brightness; // 初始化NeoPixel庫 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); // 初始化LED燈條 strip.show(); // 初始化所有LED為'關閉'狀態 led_default(); } void loop() { // put your main code here, to run repeatedly: } void led_default() { for(int i = 0; i < strip.numPixels(); i++) { // 遍歷每個像素 strip.setPixelColor(i, strip.Color(r, g, b)); // 設置顏色 strip.show(); } strip.setBrightness(brightness); // 設置亮度(0-255) }