LED를 다양한 방법으로 제어하는 예제들을 통하여 아두이노 스케치를 작성하는 방법을 배운다.
베이스보드 + Uno 보드, 전원연결선 1개, 연결선 4개
베이스 보드 구성
전원 및 LED 연결
디지털핀 10번에 연결된 LED를 1초 동안 켜고 1초 동안 끄기를 반복하는 스케치 코드
void setup() {
pinMode(10,OUTPUT);
}
void loop() {
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(10,LOW);
delay(1000);
}
문제점
변수를 사용하기 전에 모든 변수를 선언해야 함.
int inputVariable1;
int inputVariable2 = 0;
참고자료: https://www.arduino.cc/en/Reference/VariableDeclaration
변수 k의 초기값을 원하는 디지털입출력 핀의 번호로 설정
정수형 변수 dTime 를 사용하여 지연시간 쉽게 변경
결과 코드
/*
변수를 사용하여 디지털 핀 출력과 지연 시간을 설정
*/
int k=10;
int dTime=500;
void setup() {
pinMode(k,OUTPUT);
}
void loop() {
digitalWrite(k,HIGH);
delay(dTime);
digitalWrite(k,LOW);
delay(dTime);
}
#define은 특정 값에 이름을 붙일 수 있는 매크로 정의 구문이다.
사용 방법
#define 매크로이름 값
앞의 변수 사용 예제를 아래와 같이 #define 문을 이용하여 변경할 수 있다.
/*
#define 매크로를 사용하여 디지털 핀 출력과 지연 시간을 설정
*/
#define k 10
#define dTime 500
void setup() {
pinMode(k,OUTPUT);
}
void loop() {
digitalWrite(k,HIGH);
delay(dTime);
digitalWrite(k,LOW);
delay(dTime);
}
변수사용과의 차이점
디지털입출력 핀 4개를 사용하여 LED 4개를 연결
DigitalPin 8~11에 연결된 LED를 1초씩 번갈아가면서 켜고 끄는코드
/*
DigitalPin 8~11에 연결된 LED를 1초씩 번갈아가면서 켜고 끄는코드
*/
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
digitalWrite(8,HIGH);
delay(1000);
digitalWrite(8,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(10,LOW);
delay(1000);
digitalWrite(11,HIGH);
delay(1000);
digitalWrite(11,LOW);
delay(1000);
}
문제점
모듈화된 코드 블록
형식
반환타입 함수이름(파라미터,...)
예
참고자료: https://www.arduino.cc/en/Reference/FunctionDeclaration
blink_ft() 함수를 loop() 에서 호출
결과 코드
/*
함수를 사용하여 4개의 LED를 순차적으로 깜박이기
*/
void setup() { // 디지털입출력 핀 8, 9, 10, 11번을 출력으로 설정
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() { // 내부의 명령이 무한 반복
blink_ft(8); // blink_ft( ) 함수를 호출, 변수 pin의 값으로 8 전달
blink_ft(9);
blink_ft(10);
blink_ft(11);
}
void blink_ft(int pin) { // 디지털입출력 핀 pin번을 1초 간격으로 on/off
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
같은 구조의 스케치가 반복적으로 사용됨
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
...
void loop() {
blink_ft(8);
blink_ft(9);
blink_ft(10);
blink_ft(11);
}
for 문은 초기값을 증가(또는 감소) 시키면서 조건이 만족하는 동안 지정된 블록의 코드를 반복하는 명령문
/*
for 문과 함수를 사용하여 4개의 LED를 순차적으로 깜박이기
*/
int k;
void setup() {
for (k=8; k<12; k++) {
pinMode(k, OUTPUT);
}
}
void loop() {
for (k=8; k<12; k++) {
blink_ft(k);
}
}
void blink_ft(int pin) { // 디지털입출력 핀 pin번을 1초 간격으로 on/off
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
for문의 인텍스 변수 k가 디지털입출력 핀의 번호를 직접 나타냄
int k;
void setup() {
for (k=8; k<12; k++) { // k는 디지털 핀 번호를 나타냄
pinMode(k, OUTPUT);
}
}
...
연속적이지 않은 디지털입출력 핀을 LED에 연결한 경우에는 for문을 사용하기 힘듦
배열은 여러 개의 변수를 묶어서 하나의 이름을 부여하고, 배열 내의 각 변수를 번호(인덱스)를 통해 접근
/*
배열, for 문, 함수를 사용하여 4개의 LED를 순차적으로 깜박이기
*/
int pinLED[] = {6,9,11,12};
int k;
void setup() {
for (k=0; k<4; k++) {
pinMode(pinLED[k], OUTPUT);
}
}
void loop() {
for (k=0; k<4; k++) {
blink_ft(pinLED[k]);
}
}
void blink_ft(int pin) { // 디지털입출력 핀 pin번을 1초 간격으로 on/off
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
int pinLED[] = {6,9,11,12};
int k;
void setup() {
for (k=0; k<4; k++) {
pinMode(pinLED[k], OUTPUT);
}
}
void loop() {
// 이 부분에 코드를 추가 하세요.
}
앞에서 제시된 기본 시작 코드를 바탕으로 다음 4 개의 문제를 각각 구현하시오.
LED 4개가 모두에 켜졌다가 1초 후에 4개가 모두 꺼지도록 구성
LED가 1개씩 오른쪽에서 왼쪽으로 순차적으로 켜지다가 4개가 다 켜지면, 오른쪽에서 왼쪽으로 순차적으로 1개씩 꺼지도록 구성
LED가 1개씩 왼쪽에서 오른쪽으로 순차적으로 켜지다가 4개가 다 켜지면, 오른쪽에서 왼쪽으로 순차적으로 1개씩 꺼지도록 구성
LED가 1개씩 오른쪽에서 왼쪽으로 순차적으로 1초 간격으로 켜졌다 꺼지도록 구성
4개의 LED가 다음 그림과 같이 2개씩 번갈아가며 on/off 되는 스케치를 작성하여 보자
4개의 LED가 다음 그림과 같이 오른쪽에서 왼쪽으로 순차적으로 2개씩 on되는 스케치를 작성하여 보자.