본문 바로가기
Arduino&RasberryPi/Arduino Uno

6. Arduino - 변수를 이용하여 LED 신호등 만들기

by Rosmary 2019. 10. 21.
728x90
반응형

필자는 Arduino를 이용해 신호등을 만들어보려고 한다. 차를 타고 가다보면 볼 수 있는 일반적인 3색 신호등을 모델로 삼아서 말이다. 물론, 신호등이라는 것이, 집에서는 하등 쓸 일이 없지만, 필자 나름대로 Arduino를 익히기 위한 과정이라고 생각하고 작업 내용을 기록하기 위함이다.

 

< 준비물 >

 

-  Arduino Uno

-  USB 케이블

-  220옴 저항 3개

-  전선 여러 개

-  발광 다이오드, R/G/B 각 1개.

 

 

위의 준비물을 토대로, 신호등 작동에 필요한 회로의 구성을 마쳤다. 8번부터 10번 핀까지, 3개의 핀을 각각, 빨강, 노랑, 초록색 발광 다이오드와 연결하여 전기를 공급하고, 발광 다이오드를 거친 전기가 모두 GND로 빠져나갈 수 있도록 전선을 추가로 연결해 주었다. 

 

 

1.  Arduino 신호등 동작을 위한 기본 코드

 

변수 사용 없이 코드를 작성하면 아래와 같은 모양을 띄게 될 것이다.

 

마지막 줄의 주석 코드를 제대로 수정하지 못했다. "Red On for 0.5 Secs"가 되어야 맞다.

 

코드를 Arduino에 밀어넣으니 작동도 잘 된다.

 

 

그런데, 만약 필자가 발광 다이오드와 연결된 핀을 모두 다른 번호의 핀으로 옮겨야하거나, 또는 각 신호의 점멸 시간을 변경해야할 경우가 발생했다고 가정해보자. 그렇다면, 필자는 모든 pinMode() 함수 내의 핀 번호는 물론, digitalWrite()함수와 delay() 함수 내의 인자까지도 일일이 수작업으로 변경하는 노가다를 진행해야 한다.

 

따라서 필자는 위의 코드에 변수를 추가하여 조금 더 편리하게 신호등을 제어하려고 한다. 이를 위해서, 우리는 Arduino 프로그래밍에서 사용하는 변수에 대해 조금 알아볼 필요가 있다.

 

 

 

2.   Arduino 변수의 종류

 

Arduino는 C와 C++ 언어를 기반으로 하는 언어로 프로그래밍을 진행한다. 따라서, 코딩에 사용하는 변수 또한 C언어와 상당히 유사하다. C 언어의 경우, Python과 달리, 변수 선언 시 변수의 종류가 무엇인지를 표시해 주어야한다. 즉, 변수라는 상자에 담을 수 있는 자료가 정수인지, 문자열인지, 아니면 실수인지를 반드시 표기해야한다는 말이다. 변수 선언 포맷은 다음과 같다

 

========================================

[변수의 자료형] [변수명] = [값];

========================================

 

변수의 자료형은 상당히 많다. 기본적으로 사용하는 것만 정리하자면 아래와 같다.

 

-  boolean:  참(true)과 거짓(false)를 나타내는 자료형

-  int, short, long       :  정수를 나타내는 자료형. 일반적으로 int를 많이 사용한다.

-  float, double         :  실수를 나타내는 자료형. 일반적으로 float을 많이 사용한다.

-  char                    :  문자 하나를 나타내는 자료형.

-  string                  :  문자열을 나타내는 자료형.

 

이 외에도 void, unsigned long, unsigned short, byte 등이 존재한다...

 

 

만약 필자가 A 라는 변수명을 사용하여 10이라는 정수 자료를 저장하고 싶다면, 코드의 가장 윗부분에 다음과 같이 변수 선언을 진행하면 된다.

 

====================

int A = 10;

====================

 

마찬가지로 실수, 문자, 문자열 등도 다음과 같이 변수 선언을 진행하면 된다.

=======================

float B = 1.1;

char C = 'A';

string TEXT = "Hello, World";

=======================

 

그럼, 위의 내용을 토대로, 코드를 일부 수정해보자.

 

 

 

3. 변수를 적용한 수정된 코드

 

구성한 회로를 살펴보면, 빨간 다이오드는 8번 핀으로부터, 노란 다이오드는 9번 핀, 그리고 초록색 다이오드는 10번 핀으로부터 전기 신호를 받는다. 따라서 각각의 핀 번호를 redPin, yellowPin, greenPin이라는 이름의 변수명에 저장하고, 이를 바탕으로 코드를 수정하려고 한다.

 

코드의 선언은 다음과 같이 진행될 것이다.

 

===========================

int redPin = 8;

int yellowPin = 9;

int greenPin = 10;

===========================

 

이렇게 변수 선언이 완료된다면, pinMode() 함수와 digitalWrite() 함수 내의 핀 번호도, 아래처럼 변수명으로 치환이 가능하다.

 

===========================

pinMode(redPin, OUTPUT);

pinMode(yellowPin, OUTPUT);

pinMode(greenPin, OUTPUT);

===========================

 

나머지 코드에도 이를 적용해 표현한다면 아래의 사진과 같이 표시된다.

 

즉, 코드 구성에 변화가 있기는 하지만, 전체적인 내용은 변화가 없다. 따라서 수정된 코드를 Arduino에 밀어넣더라도, 동작 과정에서는 차이가 전혀 없다.

 

 

만약, 어떤 원인에 의해, 녹색 발광 다이오드가 10번이 아닌 12번 핀으로부터 신호를 전달받아야 한다면, 코드의 변수 선언 부분에서 greenPin에 해당하는 변수의 값만 12로 변경하면 된다. 정리하자면, 코딩 과정에서 변수를 사용함으로써, 회로 구성 중 일어나는 변경 사항에 조금 더 효율적이고 유연하게 대처할 수 있게 된다.

 

 

FIN.

반응형

댓글