#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int R_ledPin = 11; // LED
const int G_ledPin = 10;
const int B_ledPin = 9;
const int LED_R = 6; // 3LED
const int LED_G = 5;
const int LED_B = 3;
int ledStateR = LOW; // LED State
int ledStateG = HIGH;
int ledStateB = LOW;
unsigned long preMillisR = 0; // millis State
unsigned long preMillisG = 0;
unsigned long preMillisB = 0;
unsigned long preMillisLED = 0;
int sw_Pin = 12; // button
int sw_LED = 13;
const long interval = 1000;
int count1;
void setup() {
Serial.begin(115200);
pinMode(sw_Pin, INPUT);
pinMode(sw_LED, OUTPUT);
pinMode(R_ledPin, OUTPUT); // LED pin OUT
pinMode(G_ledPin, OUTPUT);
pinMode(B_ledPin, OUTPUT);
pinMode(LED_R, OUTPUT); // LED pin OUT
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
lcd.init();
lcd.clear();
lcd.backlight();
}
void loop() {
unsigned long currentMillis = millis(); // millis
if ( currentMillis %1000==0) { // Time
Serial.print(currentMillis);
Serial.println("ms");
//delay(1);
}
lcd.setCursor (5,0); // LCD 커서위치 지정
lcd.print(currentMillis); // 출력물
lcd.setCursor (14,0); // LCD 커서위치 지정
lcd.print("ms"); // 출력물
if (currentMillis - preMillisR >= interval * 2) { // LED
preMillisR = currentMillis;
if (ledStateR == LOW) {
ledStateR = HIGH;
} else {
ledStateR = LOW;
}
digitalWrite(R_ledPin, ledStateR);
}
if (currentMillis - preMillisG >= interval) {
preMillisG = currentMillis;
if (ledStateG == LOW) {
ledStateG = HIGH;
} else {
ledStateG = LOW;
}
digitalWrite(G_ledPin, ledStateG);
}
if (currentMillis - preMillisB >= interval / 2) {
preMillisB = currentMillis;
if (ledStateB == LOW) {
ledStateB = HIGH;
} else {
ledStateB = LOW;
}
digitalWrite(B_ledPin, ledStateB);
}
int btState = digitalRead(sw_Pin); // button
digitalWrite(sw_LED, btState);
if (currentMillis - preMillisLED >= interval/3) { // 3LED
preMillisLED = currentMillis;
showRGB(count1);
count1++;
if(count1 >= 768){count1=0;}
}
}
void showRGB(int color)
{
int R_Intensity;
int G_Intensity;
int B_Intensity;
if (color <= 255)
{
R_Intensity = 255 - color;
G_Intensity = color;
B_Intensity = 0;
}
else if (color <= 511)
{
R_Intensity = 0;
G_Intensity = 255 - (color - 256);
B_Intensity = (color - 256);
}
else
{
R_Intensity = (color - 512);
G_Intensity = 0;
B_Intensity = 255 - (color - 512);
}
analogWrite(LED_R, R_Intensity);
analogWrite(LED_G, G_Intensity);
analogWrite(LED_B, B_Intensity);
}