#FADE / Blink 동시에 진행
#define UP 0
#define DOWN 1
int ledArr[] = {10, 9, 3};
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);
const int minPWM = 0;
const int maxPWM = 255;
byte fadeDirection = UP;
int fadeValue = 0;
byte fadeIncrement = 5;
unsigned long previousFadeMillis;
unsigned long previousMillis;
int fadeInterval = 20;
int ledState = LOW;
int blinkInterval = 1000;
void setup()
{
for(int i=0; i<ledSize; i++)
pinMode(ledArr[i], OUTPUT);
pinMode(2,OUTPUT);
Serial.begin(9600);
}
void doTheFade(int *pwmPin, unsigned long thisMillis) {
if (thisMillis - previousFadeMillis >= fadeInterval) {
if (fadeDirection == UP) {
fadeValue = fadeValue + fadeIncrement;
if (fadeValue >= maxPWM) {
fadeValue = maxPWM;
fadeDirection = DOWN;
}
} else {
fadeValue = fadeValue - fadeIncrement;
if (fadeValue <= minPWM) {
fadeValue = minPWM;
fadeDirection = UP;
}
}
for(int i=0; i<ledSize; i++)
analogWrite(ledArr[i], fadeValue);
previousFadeMillis = thisMillis;
}
}
void doTheBlink(int ledPin, unsigned long thisMillis)
{
if (thisMillis - previousMillis >= blinkInterval) {
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
previousMillis = thisMillis;
}
}
void loop() {
unsigned long currentMillis = millis();
doTheFade(ledArr, currentMillis);
doTheBlink(2, currentMillis);
}
# 3개의 LED 연속 FADE
int ledArr[] = {10, 9, 3};
int fadeTime = 20;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);
int brightness = 0;
void setup()
{
for(int i=0; i<ledSize; i++)
pinMode(ledArr[i], OUTPUT);
Serial.begin(9600);
}
void fade_one(int pinNum, int fadeInterval)
{
for (brightness = 0; brightness <= 255; brightness += 5) {
analogWrite(pinNum, brightness);
delay(fadeInterval);
}
for (brightness = 255; brightness >= 0; brightness -= 5) {
analogWrite(pinNum, brightness);
delay(fadeInterval);
}
}
void fade_all(int *pins, int size, int fadeInterval)
{
Serial.println( sizeof(pins));
for (brightness = 0; brightness <= 255; brightness += 5) {
for(int i=0; i<size; i++){
analogWrite(pins[i], brightness);
}
delay(fadeInterval);
}
for (brightness = 255; brightness >= 0; brightness -= 5) {
for(int i=0; i<size; i++){
analogWrite(pins[i], brightness);
}
delay(fadeInterval);
}
}
void loop()
{
fade_all(ledArr, ledSize, fadeTime);
for(int i=0; i<ledSize; i++){
fade_one(ledArr[i],fadeTime);
}
}
# 시리얼 통신으로 제어하기
int ledArr[] = {10,9,3,2};
const long interval = 100;
String str;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);
unsigned long previousMillis = 0;
int modeSelect = 0;
int ledCount = 0;
#define LED_OFF 0
#define LED_ON 1
#define LED_UP 4
#define LED_DOWN 5
void setup()
{
for(int i=0; i<ledSize; i++)
pinMode(ledArr[i], OUTPUT);
Serial.begin(9600); // 시리얼 통신 시작
}
void led_on()
{
for(int i=0; i<ledSize; i++){
digitalWrite(ledArr[i],HIGH);
}
}
void led_off()
{
for(int i=0; i<ledSize; i++){
digitalWrite(ledArr[i],LOW);
}
}
void led_up(int count)
{
int i = ledSize - 1 - (count % ledSize);
for(int n=0; n<ledSize; n++){
if(n==i)
digitalWrite(ledArr[n], HIGH);
else
digitalWrite(ledArr[n], LOW);
}
}
void led_dn(int count)
{
int i = count % ledSize;
for(int n=ledSize-1; n>=0; n--){
if(n==i)
digitalWrite(ledArr[n], HIGH);
else
digitalWrite(ledArr[n], LOW);
}
}
void mode_selector(int mode)
{
switch(mode){
case 10:
digitalWrite(10,HIGH);
break;
case 9:
digitalWrite(9,HIGH);
break;
case 3:
digitalWrite(3,HIGH);
break;
case 2:
digitalWrite(2,HIGH);
break;
case LED_ON:
led_on();
break;
case LED_OFF:
led_off();
break;
case LED_UP:
led_up(ledCount);
break;
case LED_DOWN:
led_dn(ledCount);
break;
}
}
void loop()
{
if(Serial.available() > 0){
str = Serial.readStringUntil('\n');
Serial.print(str);
if(str == "10"){
modeSelect = 10;
Serial.println(" : 10번 켜짐");
}
else if(str == "9"){
modeSelect = 9;
Serial.println(" : 9번 켜짐");
}
else if(str == "3"){
modeSelect = 3;
Serial.println(" : 3번 켜짐");
}
else if(str == "2"){
modeSelect = 2;
Serial.println(" : 2번 켜짐");
}
else if(str == "on" || str == "ON"){
modeSelect = LED_ON;
Serial.println(" : LED 켜짐");
}
else if(str == "off" || str == "OFF"){
modeSelect = LED_OFF;
Serial.println(" : LED 꺼짐");
}
else if(str == "up" || str == "UP"){
modeSelect = LED_UP;
mode_selector(LED_OFF);
ledCount = 0;
Serial.println(" : LED 위에서 아래로");
}
else if(str == "dn" || str == "DN" ||
str == "down" || str == "DOWN"){
modeSelect = LED_DOWN;
mode_selector(LED_OFF);
ledCount = 0;
Serial.println(" : LED 아래에서 위로");
}
else{
Serial.println(" : zzz입력한 명령어가 없습니다.");
}
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
mode_selector(modeSelect);
ledCount++;
}
}
'Embedded > Arduino' 카테고리의 다른 글
RC카+아두이노TEST (0) | 2022.06.18 |
---|---|
lilyPad_v220429 (0) | 2022.04.29 |
Arduino_v220428 - piezo only (0) | 2022.04.28 |
arduino_v220427 (0) | 2022.04.27 |
arduino_v220425 (0) | 2022.04.25 |