중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

시리얼 모니터로 LED 제어하기

2014-08-13 15:10:14

개요 & 부품목록


통신기능은 물리적인 입력과 출력을 디지털 세계로 연결하여 보다 더 많은 활용을 가능케 합니다.
그중 시리얼 모니터는 아두이노를 이용한 다양한 프로젝트에서 핵심적인 역할을 담당합니다.


 

예를 들면 다양한 센서의 정확한 수치 값을 측정하여 수정 및 보완하거나
실시간으로 아두이노의 제어를 담당할수도 있습니다.


출처 : Open Energy Monitor - sain smart

또한 LCD로 문자와 도형, 그림등을 출력하고자 할때 시리얼 통신을 이용합니다.

그럼 본격적으로 본 예제에서 시리얼 모니터를 이용하여
아두이노와 컴퓨터가 어떻게 통신하는지 알아보고,
이를 응용하여 특정 키패드를 입력하면 해당 LED가 켜지도록 실습을 해보겠습니다.


미리보기 동영상

 


부품목록


 
NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노 호환보드
2 브레드보드 1 브레드보드
3 220Ω 저항 3 저항
4 점퍼 케이블 6 점퍼 케이블
5 LED 3 빨강:1 노랑:1 초록:1
 
부품명 오렌지 보드 220Ω 저항 브레드보드 점퍼케이블 Red LED
파트 x1 x3 x1 x6  x1
품명 Yellow LED Green LED
파트 x1 x1
 
 

하드웨어 Making

회로도


 

브레드보드 레이아웃

 

 

 

소프트웨어 Coding

아래의 코드를 아두이노 업로드 합니다.

 

 

 

 

/*
 Simple LED sketch by Kocoa FAB - www.kocoafab.cc
 */
     
int redLED = 11; // 적색 LED 를 11번 핀에 연결
int yellowLED = 10;// 노란색 LED를 10번 핀에 연결
int greenLED = 8;// 초록색 LED를 8번 핀에 연결
     
void setup()
{
    pinMode(redLED, OUTPUT); // 11번핀을 출력으로 설정
     pinMode(yellowLED, OUTPUT); //10번핀을 출력으로 설정
     pinMode(greenLED, OUTPUT); //8번핀을 출력으로 설정
    // 시리얼 통신을 준비합니다.
    Serial.begin(9600); // (9600)의 통신속도로 통신을 시작합니다.
    Serial.flush();
}
     
void loop()
{
    String input = "";
     
    // 시리얼 통신으로 문자를 입력하기 위한 준비를 합니다. 
while (Serial.available() > 0)// 시리얼 입력이 있을때
    {
        input += (char) Serial.read(); // 한번에 한문자를 읽으면
        delay(5); // 5밀리초 동안 대기하고 다음 문자를 읽을 준비를 합니다.
    }
     
    if (input == "1") // 만약 1 이라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, HIGH);// 적색을 켜고
       digitalWrite(yellowLED, LOW); // 나머지를 끕니다.
        digitalWrite(greenLED, LOW); 
    }
    if (input == "2") // 만약 2라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, LOW);
       digitalWrite(yellowLED, HIGH); //황색을 켜고 나머지를 끕니다.
        digitalWrite(greenLED, LOW);
    }
    if (input == "3")//만약 3이라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, LOW);
       digitalWrite(yellowLED, LOW); // 초록색을 켜고 나머지를 끕니다.
        digitalWrite(greenLED, HIGH);
    }
}

소프트웨어 & 하드웨어 설명

1.사전 설명

Serial은 아두이노 보드와 컴퓨터가 시리얼 통신을 수행하기 위해 필요로 하는 클래스 입니다.
통신에 있어 물리적 연결방법은 수신은  RX핀(D0)핀 , 송신은 TX핀(D1)핀, 그리고 GND(그라운드)를 사용합니다.
아두이노 우노의 경우 0번과 1번 핀이나 usb연결을 통해 시리얼 통신을 할수 있는데 , 만약 시리얼 통신을 사용할 경우
0번과 1번핀은 다른 용도로 사용할 수 없게 됩니다.

2.스케치 설명

 

 

 

 

 Serial.begin(9600); // (9600)의 통신속도로 통신을 시작합니다.
    Serial.flush();// 초기화


Serial.begin은 통신을 위한 옵션을 설정하는 명령입니다.
따라서 () 안의 숫자는 통신 속도(보율)을 나타내며,
Serial.flush()의 경우 시리얼 상의 데이터가 남아있지 않도록 초기화 시키고 대기합니다.

 

 

 

 

String input = "";


String 클래스는 문자열을 다루기 위한 클래스로 ,  " " 안의 문자열을 입력 받습니다.

 

 

 

 

 input += (char) Serial.read(); // 한번에 한문자를 읽으면
        delay(5); // 5밀리초 동안 대기하고 다음 문자를 읽을 준비를 합니다.

 


입력받은 문자(char)를 읽고;
5밀리초 동안 대기합니다
지연 시간이 없을 경우 정상적인 값을 반환하지 않을 수 있기 때문입니다.

 

 

 

 

  if (input == "1") // 만약 1 이라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, HIGH);// 적색을 켜고
       digitalWrite(yellowLED, LOW); // 나머지를 끕니다.
        digitalWrite(greenLED, LOW); 
    }
    if (input == "2") // 만약 2라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, LOW);
       digitalWrite(yellowLED, HIGH); //황색을 켜고 나머지를 끕니다.
        digitalWrite(greenLED, LOW);
    }
    if (input == "3")//만약 3이라는 문자를 입력 받으면 
    {
        digitalWrite(redLED, LOW);
       digitalWrite(yellowLED, LOW); // 초록색을 켜고 나머지를 끕니다.
        digitalWrite(greenLED, HIGH);
    }
}


적색/노란색/초록색 을 각각 1,2,3 의 입력으로 켜고 꺼지도록 설정하였습니다.

아두이노 보드에 업로드후 시리얼 모니터를 통해 각각의 경우를 입력해보세요.

 

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

시리얼모니터, 아두이노, 오렌지보드