Arduino LED 불켜기 | dasfef

2023.03.15


[ 충북대학교 공동훈련센터 IoT기반 스마트솔루션 개발자 양성과정 ] 진도가 살짝 빠른감이 없지 않아 느껴진다 초반에는 집중적으로 한 과목씩 끝내느라 이런 진도의 빠름이나 조급함이 없다고 느꼈었는데 과목을 번갈아 하다보니 복습할 내용도 많고, 시간은 부족하니 정리할 시간도 부족하다고 느껴진다 😢

월 - 아두이노 화 - 오라클 수 - C# 목 - 오라클 금 - C#
​으로 과목의 교육이 진행되고 있은지 2주째, 드디어 조금 정리하고 기록을 남겨보려 컴퓨터를 켰다 벌써 충북대학교 공동훈련센터에서의 교육을 시작한지 한 달이 넘었고 2주째 아두이노, 오라클, C# 을 번갈아 하고 있으니 괜히 나 혼자 더 조급해짐을 느끼는것 같다 :(
​아두이노의 소프트웨어 설치나 코드 자체는 많이 어렵지 않다 언제인지 기억이 나지 않지만 전류의 흐름과 회로, 저항 등에 대해 배운 기억은 있는것 같은데 정확히 기억이 나지 않아 이해가 따라가는데 시간이 조금 걸렸다

벌써 너덜너덜해진것 같은 내 아두이노 키트


아두이노 교육시 이런 아두이노 키트를 나눠준다 구성품은 있을건 다~ 있는 아두이노 키트인데 처음 봤을때 어릴때 장난감 선물 받은것 처럼 신났었다(회로 배우기 전까진)

​아두이노 IDE


아두이노 자체는 이렇게 생긴 소프트웨어를 활용한다 이 프로그램에 C 명령어로 넣어주면 기존에 있던 C 언어 중 필수 항목이었던 int main() 함수는 제외한 채로 진행할 수 있게 만들어 둔 프로그램이다 C 를 재밌게 배웠던 나에게 있어선 다시 C 로 건드릴 수 있어 조금이나마 흥미 유발이 되었다
전기회로를 맞닥뜨리면서 뇌가 살짝 정지됐었는데 수학, 물리가 싫어 문과로 전향했던 나에겐 너무나도 듣기 싫은 내용이었다.. 하지만 옛 기억을 되살려서 이것저것 따라하다 보니 어느샌가 이해가 됐고 어떻게 해야될지 감이 많이 되살아났다

아두이노 UNO


우리가 활용하는 모델은 UNO 라는 모델인데 생각보다 굉장히 자그마하다 저기 검고 네모난 구멍들에 얇디 얇은 전선들을 이어 회로 구성에 맞게 배치하고 아두이노 소프트웨어에서의 프로그래밍으로 원하는대로의 작동을 구성하는 방식이다
엄청나게 디테일한 설명은 굉장히 길어지는 강의가 될것 같아서 패스하고 현재 어디까지 교육을 받았는지에 대한 짤막한 소개와 내가 구성한 코드만 공유하고 마치도록 하겠다

1) 방향 바꾸며 LED 불 들어오게하기


일단 회로 구성에 맞게 전선과 LED 등을 연결해 준 뒤,

#define LED_1_Pin 5
#define LED_2_Pin 6
#define LED_3_Pin 7
#define SW1_Pin 11
#define SW2_Pin 12
int LED_Mode = 0;
int SW1 = 1;
int SW2 = 1;

void setup() {
  pinMode(LED_1_Pin, OUTPUT);
  pinMode(LED_2_Pin, OUTPUT);
  pinMode(LED_3_Pin, OUTPUT);
  pinMode(SW1_Pin, INPUT);
  pinMode(SW2_Pin, INPUT);
}

void play(int LED_Mode) {
  if (LED_Mode == 1){
    digitalWrite(LED_1_Pin, HIGH); digitalWrite(LED_2_Pin, LOW); digitalWrite(LED_3_Pin, LOW);
  }
  else if (LED_Mode == 2) {
    digitalWrite(LED_1_Pin, LOW); digitalWrite(LED_2_Pin, HIGH); digitalWrite(LED_3_Pin, LOW);
  }
  else if (LED_Mode == 3) {
    digitalWrite(LED_1_Pin, LOW); digitalWrite(LED_2_Pin, LOW); digitalWrite(LED_3_Pin, HIGH);
  }
  else {
    digitalWrite(LED_1_Pin, LOW); digitalWrite(LED_2_Pin, LOW); digitalWrite(LED_3_Pin, LOW);
    LED_Mode = 0;
  }
}


void loop() {
  SW1 = digitalRead(SW1_Pin);
  if (SW1 == 0) {
    ++LED_Mode;
    if (LED_Mode > 3) {
      LED_Mode = 0;
    }
  }

  SW2 = digitalRead(SW2_Pin);
  if (SW2 == 0) {
    --LED_Mode;
    if(LED_Mode < 0) {
      LED_Mode = 3;
    }
  }
  play(LED_Mode);
  delay(500);
}

요런식으로 간단한 코드를 입력하고 컴파일 및 기기로 전송을 해주면!

스위치1 : -> / 스위치2 : <-


이런식으로 1번 스위치는 왼 -> 오 방향으로 2번 스위치는 오 -> 왼 방향으로 빛이 나게 된다

​2) RGB LED 색상 조정
​아두이노 키트 안에는 1개의 전구와 4개의 핀으로 같이 구성된 자그마한 레고 장난감이 있는데 이게 바로 RGB LED 이다 하나의 전구 안에 RGB 값이 들어가 있어 IDE 안에서 조정을 잘 해주면 원하는 값의 RGB를 출력할 수 있다

RGB LED


다시 IDE 로 돌아와서 요렇게 프로그래밍 해주면!!

int RedLed = 3;
int GreenLed = 5;
int BlueLed = 6;

void setup(){
  ledOutput(255,0,0);
  delay(1000);
  ledOutput(0,255,0);
  delay(1000);
  ledOutput(0,0,255);
  delay(1000);
}

void loop() {
  for(int i = 0; i<=255; ++i){
    ledOutput(255,i,0);
    delay(10);
  }

  for(int i=0;i<=255; ++i){
    ledOutput(0,255,i);
    delay(10);
  }

  for(int i=0;i<=255; ++i){
    ledOutput(i, 0, 255);
    delay(10);
  }

  for(int i=0;i<=255;++i){
    ledOutput(i, 255, 255);
    delay(10);
  }

  for (int i=0;i<=255;++i){
    ledOutput(255, i, 255);
    delay(10);
  }

  for (int i=0; i<= 255; ++i){
    ledOutput(255, 255, i);
    delay(10);

  }
}

void ledOutput(int Red, int Green, int Blue){
  analogWrite(RedLed, Red);
  analogWrite(GreenLed, Green);
  analogWrite(BlueLed, Blue);
}


단순한 반복문의 활용으로 각 RED, GREEN, BLUE 값들의 0 ~ 255 까지의 반복 순환으로 아름다운 빛깔의 RGB LED를 감상할 수 있다