const int RED_PIN = 2; // LED đỏ
const int GREEN_PIN = 3; // LED xanh lá
const int BLUE_PIN = 4; // LED xanh dương
int DELAY_TIME = 500;
void setup()
{
pinMode(RED_PIN, OUTPUT); // khởi tạo chân Output
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
displayAllBasicColors(); // gọi hàm displayAllBasicColors thể hiện toàn bộ màu cơ bản
showSpectrum(); // gọi hàm showSpectrum để chạy hiệu ứng cầu vồng.
}
void displayAllBasicColors()
{
digitalWrite(RED_PIN, LOW); // tắt toàn bộ đèn
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(500);
digitalWrite(RED_PIN, HIGH); // chỉ bật đèn màu đỏ
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
delay(400);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH); // chỉ bật đèn màu xanh lá cây
digitalWrite(BLUE_PIN, LOW);
delay(400);
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH); // chỉ bật đèn màu xanh dương
delay(300);
// bật đèn vàng
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
delay(300);
}
void showSpectrum() // cài đặt hàm showSpectrum
{
for (int i = 0; i < 768; i++)
{
showRGB(i);
delay(10);
}
}
void showRGB(int color) // cài đặt hàm showRGB(int color)
// cài đặt hàm showRGB để mỗi khi nhận một giá trị từ 0 - 767
{
int redPWM;
int greenPWM;
int bluePWM;
if (color <= 255) // xanh lục 100%
{
redPWM = 255 - color; // màu đỏ dần dần tắt
greenPWM = color; // màu xanh lá dần sáng
bluePWM = 0;// màu xanh dương luôn tắt
}
else if (color <= 511) // xanh dương 100%
{
redPWM = 0; // màu đỏ luôn tắt
greenPWM = 255 - color; // màu xanh lá dần dần tắt
bluePWM = (color - 256); // màu xanh dương từ tắt thành sáng
}
else // color >= 512 //màu đỏ sáng 100%
{
redPWM = (color - 512); // màu đỏ dần dần sáng
greenPWM = 0; // màu xanh lá cây luôn tắt
bluePWM = 255 - color; // màu xanh sáng rồi lại tắt
}
analogWrite(RED_PIN, redPWM);
analogWrite(BLUE_PIN, bluePWM);
analogWrite(GREEN_PIN, greenPWM);
}