본문 바로가기
코딩/아두이노

아두이노 시리얼 통신으로 LED를 제어 해보자

by 어릴적 꿈은 미친과학자 2019. 11. 5.

안녕하세요 전자공이 입니다.

본문에서 다룰 내용은 아두이노 시리얼 통신으로 LED를 제어해보겠습니다.

 

 

LED와 330옴

 

 

-준비물-

아두이노

브레드보드

LED

330옴 고정 저항

점퍼선

 

 

-회로 구성-

----------------------------------------------------------------------------------------

아두이노------------------<>------------------LED(+)

pin2------------------<>------------------LED+단자

 

아두이노------------------<>------------------저항

GND------------------<>------------------저항 단자

 

저항------------------<>------------------LED(-)

저항 단자------------------<>------------------LED(-) 단자

----------------------------------------------------------------------------------------

LED 및 저항 연결상태

위의 사진은 회로 구성이 된 상태입니다. 사진처럼 해주세요

 

 

코드

 

 

-코딩 및 설명-

----------------------------------------------------------------------------------------

int led = 2;  // 전역 int led=2로 설정
int led_value=LOW; // 전역 int led_value=LOW로 설정
char read_LED; // 전역 char read_LED로 설정

void setup() {
pinMode(2, OUTPUT); // 핀 2번을 OUTPUT으로 설정
Serial.begin(9600); // 시리얼 통신 값을 9600바이트로 설정함
}

void loop() {
  
      read_LED = Serial.read(); // 읽은 시리얼 값을 read_LED에 설정
    
      if(read_LED == '1' && led_value == LOW)

      // read_LED에 '1'인지 확인 led_value값이 LOW인지 확인 후 조건이 맞는지 && 논리 연산함 맞으면

      다음 괄호의 코드를 진행 아니면 다음 괄호 코드를 진행하지 않고 delay부분으로 넘어감

      {
       digitalWrite(led, HIGH);  // led를 HIGH로 디지털 출력
       Serial.println(" LED 2 가 켜졌다. "); // 시리얼 출력
       led_value = HIGH; // led_value 값에 HIGH를 설정
      }
      else if(read_LED == '1' && led_value == HIGH)

      // read_LED에 '1'인지 확인 led_value값이 HIGH인지 확인 후 조건이 맞는지 && 논리 연산함 맞으면

      다음 괄호의 코드를 진행 아니면 다음 괄호 코드를 진행하지 않고 delay부분으로 넘어감
      {
       digitalWrite(led, LOW); // led를 LOW로 디지털 출력
       Serial.println(" LED 2 가 꺼졌다. ");  // 시리얼 출력
       led_value = LOW; // led_value 값에 LOW를 설정
      }
delay(100); // 딜레이를 100ms로 설정
 }

----------------------------------------------------------------------------------------

 

 

위의 내용처럼 회로를 구성하고 알맞게 아두이노 코딩을 업로드한 뒤 시리얼 모니터를 켜줍시다.

 

시리얼모니터

위의 사진처럼 시리얼 모니터에 아무것도 안 뜹니다.

 

 

1

여기에 숫자 1을 치고 엔터를 눌러줍니다.

 

 

켜졌다

LED 2가 켜졌다 라는 문구와 LED 부분에서 불이 들어옵니다.

 

 

1 켜졌다

다시 1을 입력하고 엔터를 눌러줍니다.

 

 

켜지고 꺼지고

그럼 LED 2가 켜졌다. 바로 아래 LED 2가 꺼졌다. 문구가 나온 뒤 LED 불빛이 꺼지게 됩니다.

 

 

1111 켜지고 꺼지고

1111을 입력하고 엔터를 눌러봅시다. 어떤 결과가 나올까요?

 

 

켜지고 꺼지고 반복

처음 1을 1회씩 값을 입력했을 때처럼 문구가 출력되며 LED가 반짝이게 됩니다.

 

지정한 숫자가 1이고 단위나 순서 인식이 아닌 단순 숫자로 인식하기에 1111 대신 12345, 54321, 32145를 입력 후 엔터를 누르면 어떻게 든 1이 있으면 불이 켜지고 꺼지는 코드이기에 LED가 불빛을 깜빡이게 됩니다.

정확한 인식이 필요할 경우 코드를 수정하여 정확하게 인식하도록 바꾸어 봅시다.

회로 부분은 그렇게 어렵다고 생각이 되지 않습니다.

하지만 코드 부분은 논리 연산과 같이 눈으로 쓱보기에는 다소 어려운 부분이 있으니 이해가 되지 않는 부분은 왜 이렇게 작동이 되는 건지 다시 한번 확인해봅시다.

 

 

 

 

-시리얼 통신 LED 제어 끝-

댓글


page contents