본문 바로가기

Embedded/Arduino

Arduino-v211022

동시에 FADE

// 동시에 FADE
int ledArr[] = {11};
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);
}

void loop()
{
  for (brightness = 0; brightness <= 255; brightness += 5) {
    for(int i=0; i<ledSize; i++){
    	analogWrite(ledArr[i], brightness);
    }
    delay(fadeTime); 
  }
  for (brightness = 255; brightness >= 0; brightness -= 5) {
    for(int i=0; i<ledSize; i++){
    	analogWrite(ledArr[i], brightness);
    }
    delay(fadeTime); 
  }
}

 

순서대로 FADE

// 순서대로 FADE
int ledArr[] = {11};
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);
}

void loop()
{
  for(int i=0; i<ledSize; i++){
    for (brightness = 0; brightness <= 255; brightness += 5) {
      analogWrite(ledArr[i], brightness);
      delay(fadeTime); 
    }
    for (brightness = 255; brightness >= 0; brightness -= 5) {
      analogWrite(ledArr[i], brightness);
      delay(fadeTime); 
    }
  }
}

 

명령어에 따라 LED 켜고 끄기

int ledArr[] = {11};

String str;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);

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 loop()
{
  if(Serial.available() > 0){
       str = Serial.readStringUntil('\n');
       Serial.print(str);
       if(str == "on"){
         led_on();
         Serial.println(" : LED 켜짐");
       }
       else if(str == "off"){
         led_off();
         Serial.println(" : LED 꺼짐");
       }
       else{
         Serial.println(" : 입력한 명령어가 없습니다.");
       }
   }
}

 

문자입력(on, off, up, down)

int ledArr[] = {11,10,9,6,5,3};
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 2
#define LED_DOWN 3


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 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 == "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(" : 입력한 명령어가 없습니다.");
    }
  }
  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    mode_selector(modeSelect);
    ledCount++;
  }
}

 

relay 기능 추가

int ledArr[] = {11,10,9,6,5,3};
const long interval = 100;

String str;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);

unsigned long previousMillis = 0;
int modeSelect = 0;
int ledCount = 0;
int mode_change = 0;

#define LED_OFF 0
#define LED_ON 1
#define LED_UP 2
#define LED_DOWN 3
#define LED_RELAY 4


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 led_relay(int count)
{
  if(mode_change == 0)
    led_dn(count);
  else
    led_up(count);
}
 
void mode_selector(int mode)
{
  switch(mode){
    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;
    case LED_RELAY:
      led_relay(ledCount);
      // ledCount : 0부터 시작하므로 0~5까지가 한 Cycle 
      // 나눗셈은 1~6까지가 한묶음 : +1 해줘야함
      mode_change = ((ledCount+1)/ledSize)%2;
      break;
  }
}


void loop()
{
  if(Serial.available() > 0){
    str = Serial.readStringUntil('\n');
    Serial.print(str);
    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 if(str == "relay" || str ="RELAY"){
      modeSelect = LED_RELAY;
      mode_selector(LED_OFF);
      ledCount = 0;
      Serial.println(" : LED 번갈아 깜빡임");
    } 
    else{
      Serial.println(" : 입력한 명령어가 없습니다.");
    }
  }
  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    mode_selector(modeSelect);
    ledCount++;
  }
}

포토레지스터 연결하기 ( 연결저항은 10kΩ )

포토레지스터에 들어오는 빛의 세기를 값으로 표시

void setup()
{
  Serial.begin(9600);
  pinMode(A0, INPUT);
}
 
void loop()
{
  int sensorValue = analogRead(A0);
  Serial.print("Sensor value : ");
  Serial.println(sensorValue);
}

 

센서값이 THR값보다 작으면 LED가 켜짐

int ledArr[] = {11,10,9,6,5,3};
const long interval = 100;
#define THR 500

String str;
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);

unsigned long previousMillis = 0;
int modeSelect = 0;

#define LED_OFF 0
#define LED_ON 1


void setup()
{
  for(int i=0; i<ledSize; i++)
  	pinMode(ledArr[i], OUTPUT);
  pinMode(A0, INPUT);
  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 mode_selector(int mode)
{
  switch(mode){
    case LED_ON:
      led_on();
      break;
    case LED_OFF:
      led_off();
      break;
  }
}


void loop()
{
  int sensorValue = analogRead(A0);
  Serial.print("Sensor value : ");
  Serial.println(sensorValue);
  if (sensorValue < THR)
    modeSelect = LED_ON;
  else
    modeSelect = LED_OFF;
  
  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    mode_selector(modeSelect);
  }
}

 

밝기값에 따라 켜지는 LED개수 변화

int ledArr[] = {11,10,9,6,5,3};
int ledSize = sizeof(ledArr) / sizeof(ledArr[0]);

void setup()
{
  for(int i=0; i<ledSize; i++)
  	pinMode(ledArr[i], OUTPUT);
  
  pinMode(A0, INPUT);
  Serial.begin(9600); // 시리얼 통신 시작
}

void led_add_on(int level)
{
  for(int i=0; i<ledSize; i++){
    digitalWrite(ledArr[i],LOW);
  }
  
  for(int i=0; i<level; i++){
    digitalWrite(ledArr[i],HIGH);
  }
}

void loop()
{
  int sensorValue = analogRead(A0);
  int ledLevel = map(sensorValue, 0,1023, 0,7);
  Serial.print("Sensor value : ");
  Serial.print(sensorValue);
  Serial.print(" map : ");
  Serial.println(ledLevel);
  
  led_add_on(ledLevel);
}

 

센서값이 어두워지면 LED가 깜빡이는 방법이 바뀜

#define THR 500
 
int ledArr[] = {11,10,9,6,5,3}; // 사용하는 LED번호
int ledSize = sizeof(ledArr)/ sizeof(ledArr[0]);
int ledCount = 0;
int flag = 0;
 
int modeCount = 0;
 
unsigned long fade_previousMillis = 0;
unsigned long previousMillis = 0;
      
const long interval = 150;
 
void setup()
{
  for(int i=0; i<ledSize; i++)
  	pinMode(ledArr[i], OUTPUT);

  pinMode(A0,INPUT);
  
  Serial.begin(9600);
}
 
void led_off()
{
  for(int i=0; i<ledSize; i++)
      digitalWrite(ledArr[i], LOW);
}
 
void led_blink(int count)
{
  if(count%2 == 0){ 
    for(int i=0; i<ledSize; i++){
      digitalWrite(ledArr[i], HIGH);
    }
  }
  else{
    for(int i=0; i<ledSize; i++){
      digitalWrite(ledArr[i], LOW);
    }
  }
}
 
void led_up2dn(int count)
{
  int n = count % (ledSize+1);
  for(int i =0; i<ledSize; i++){
    if (i == n)
      digitalWrite(ledArr[i], HIGH);
    else
      digitalWrite(ledArr[i], LOW);
  }
}
 
void led_dn2up(int count)
{
  int n = count % (ledSize+1);
  for(int i=ledSize-1; i>=0; i--){
    if (i == (ledSize-1-n))
      digitalWrite(ledArr[i], HIGH);  
    else
      digitalWrite(ledArr[i], LOW);  
  }
}
 
void led_weighted_up2dn(int count)
{
  int n = count % (ledSize+1);
  if (n == ledSize)
    led_off();
  else
  	digitalWrite(ledArr[n], HIGH);
}
 
void led_weighted_dn2up(int count)
{
  int n = count % (ledSize+1);
  if (n == ledSize)
    led_off();
  else
  	digitalWrite(ledArr[ledSize-1-n], HIGH); 
}

 
void mode_selection(int mode)
{
  switch(mode%6){
    case 0:
    	led_blink(ledCount);
    	ledCount++;
    	break;
    case 1:
    	led_up2dn(ledCount);
    	ledCount++;
    	break;
    case 2:
    	led_dn2up(ledCount);
    	ledCount++;
    	break;
    case 3:
    	led_weighted_up2dn(ledCount);
    	ledCount++;
    	break;
    case 4:
    	led_weighted_dn2up(ledCount);
    	ledCount++;
    	break;
    default:
    	led_off();
    	break;
  }
}
 
void loop() {
  int inputValue = analogRead(A0);
  Serial.print("Sensor : ");
  Serial.print(inputValue);
  Serial.print(" Mode : ");
  Serial.println(modeCount);
  if (inputValue < THR){
    if(flag == 0){
      flag = 1;
      modeCount++;
      ledCount = 0;
      led_off();
      delay(150);
    }
  }
  else if(inputValue > (THR+150)){
    if(flag == 1){
      flag = 0;
    }
  }
  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    mode_selection(modeCount);
  }
}

'Embedded > Arduino' 카테고리의 다른 글

lilyPad-v211026  (0) 2021.10.26
lilyPad-v211025  (0) 2021.10.25
Arduino-v211021  (0) 2021.10.21
Arduino-v211020  (0) 2021.10.20
Arduino-v211019  (0) 2021.10.19