โปรเจกต์ ผสมสี Addressable LEDs
บทเรียนนี้มีวัตถุประสงค์เพื่อแสดงวิธีการควบคุม addressable WS2812 LEDs strip เพื่อให้ได้สีต่างๆ โดยใช้ 3 potentiometers
บทเรียนนี้มีวัตถุประสงค์เพื่อแสดงวิธีการควบคุม addressable WS2812 LEDs strip เพื่อให้ได้สีต่างๆ โดยใช้ 3 potentiometers
เพื่อให้สามารถรัน sketch นี้บน Board Arduino ของคุณได้ คุณจำเป็นต้องดาวน์โหลด Adafruit NeoPixel library.
sketch นี้เรียบง่ายมาก: มี potentiometer 3 ตัวเชื่อมต่อกับ analog inputs 3 ช่องที่แตกต่างกัน (A0, A1 และ A2) แต่ละตัวจะควบคุมปริมาณสี (สีแดง สีเขียว และสีน้ำเงิน ตามลำดับ) ใน WS2812 LEDs แบบ addressable ความยาว 1 เมตร
เพื่อความเรียบง่าย ใน layout ด้านล่างจะแสดง LED เพียงดวงเดียวเท่านั้น
ข้อควรระวัง: กรุณาตรวจสอบให้แน่ใจว่าได้จ่ายไฟให้แถบ LED โดยใช้แหล่งจ่ายไฟภายนอก 5V ตามที่ระบุไว้ใน layout!

นี่คือ Code! อัปโหลดมันแล้วเริ่มสนุกกับสีสันได้เลย!
/*
การควบคุม addressable LEDs โดยใช้ Adafruit NeoPixel library
อุปกรณ์ที่จำเป็น:
แถบ addressable LEDs 1m http://store.arduino.cc/products/C000083
สร้างเมื่อ 28 พฤศจิกายน 2014
โดย Arturo Guadalupi <a.guadalupi@arduino.cc>
Code ตัวอย่างนี้เป็นส่วนหนึ่งของ public domain
*/
#include <Adafruit_NeoPixel.h>
const int NUMPIXELS = 60; //จำนวนของ LEDs ใน 1m
const int LEDsPin = 9; // LEDs เชื่อมต่อกับ digital Pin 9
const int redPotPin = A0; // Pin สำหรับควบคุมสีแดง
const int greenPotPin = A1; // Pin สำหรับควบคุมสีเขียว
const int bluePotPin = A2; // Pin สำหรับควบคุมสีน้ำเงิน
int redValue = 0; // ค่าที่จะเขียนไปยัง LED สีแดง
int greenValue = 0; // ค่าที่จะเขียนไปยัง LED สีเขียว
int blueValue = 0; // ค่าที่จะเขียนไปยัง LED สีน้ำเงิน
int redPotValue = 0; // Variable สำหรับเก็บค่าจาก red pot
int greenPotValue = 0; // Variable สำหรับเก็บค่าจาก green pot
int bluePotValue = 0; // Variable สำหรับเก็บค่าจาก blue pot
// เมื่อเรา setup NeoPixel library เราจะบอกจำนวน pixels และ Pin ที่จะใช้ส่งสัญญาณ
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// เริ่มต้นการสื่อสาร Serial ที่ 9600 bps:
Serial.begin(9600);
// ตั้งค่า digital Pin เป็น output
pinMode(LEDsPin, OUTPUT);
}
void loop() {
// อ่านค่าจาก pots ก่อน:
// อ่านค่าจากการควบคุม red pot:
redPotValue = analogRead(redPotPin);
// ให้เวลา ADC ปรับตัวเล็กน้อย
delay(5);
// อ่านค่าจากการควบคุม green pot:
greenPotValue = analogRead(greenPotPin);
// ให้เวลา ADC ปรับตัวเล็กน้อย
delay(5);
// อ่านค่าจากการควบคุม blue pot:
bluePotValue = analogRead(bluePotPin);
// แสดงค่าไปยัง Serial monitor
Serial.print("raw sensor Values \\t red: ");
Serial.print(redPotValue);
Serial.print("\\t green: ");
Serial.print(greenPotValue);
Serial.print("\\t Blue: ");
Serial.println(bluePotValue);
/*
ในการนำค่าจาก pots มาใช้กับ LEDs
คุณต้องทำการคำนวณเล็กน้อย ADC ให้ค่าขนาด 10-bit
แต่ analogWrite() ใช้ 8 bits คุณควรหารค่าที่อ่านจาก
Sensor ด้วย 4 เพื่อให้ค่าอยู่ในช่วงของ output
*/
redValue = map(redPotValue, 0, 1023, 0, 255);
greenValue = map(greenPotValue, 0, 1023, 0, 255);
blueValue = map(bluePotValue, 0, 1023, 0, 255);;
// แสดงค่าที่ถูก mapped แล้ว
Serial.print("Mapped sensor Values \\t red: ");
Serial.print(redValue);
Serial.print("\\t green: ");
Serial.print(greenValue);
Serial.print("\\t Blue: ");
Serial.println(blueValue);
// สำหรับชุดของ NeoPixels ตัวแรกคือ 0 ตัวที่สองคือ 1 ไปจนถึงจำนวน pixels ลบหนึ่ง
for (int i = 0; i < NUMPIXELS; i++) {
// pixels.Color รับค่า RGB จาก 0,0,0 ไปจนถึง 255,255,255
pixels.setPixelColor(i, pixels.Color(redValue, greenValue, blueValue));
pixels.show(); // ส่งค่าสี pixel ที่อัปเดตแล้วไปยัง hardware
delay(50); // หน่วงเวลาเป็นระยะเวลาหนึ่ง (ในหน่วย milliseconds)
}
}
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้