디지털 출력이 LOW(0V) 또는 HIGH(5V) 두 가지의 값만 출력할 수 있는 것에 비해 아날로그 출력은 연속적인 값을 출력해낼 수 있음.
analogWrite(핀 번호, HIGH/LOW)를 통해서 출력이 이루어짐.
아날로그 출력에서는 analogWrite()를 통해서 0V 또는 5V 값을 내보낼 수 있지만 디지털 출력에서는 digitalWrite()를 통해 0~255의 값을 내보낼 수 없음을 유의하자!
1번 과제를 수행해보자!
1초 간격으로 켜졌다, 꺼졌다를 반복하도록 LED 회로와 아두이노 프로그램을 작성하시오.
digitalWrite()함수와 analogWrite()함수는 토글(한번만 작동시켜도 작동 상태가 지속되는 방식)로 작동한다는 점과 delay(시간, 단위는 ms)함수에 유의하자!
1
2
3
4
5
6
7
8
9
10
11
// 1번 과제
voidsetup(){pinMode(11,OUTPUT);// 11번 핀을 출력으로 설정
}voidloop(){digitalWrite(11,HIGH);// 11번 핀에 5V 전압을 출력
delay(1000);// 1초 대기
digitalWrite(11,LOW);// 11번 핀에 0V 전압을 출력
delay(1000);// 1초 대기
}
2번 과제를 수행해보자!
1번 문제에서 LED가 다시 켜질 때마다 밝기가 약 10%씩 감소하도록 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
voidsetup(){pinMode(11,OUTPUT);// 11번 핀을 출력으로 설정
}inta=250;// a라는 정수형 변수를 선언한 뒤, 250이라는 값을 대입함
voidloop(){analogWrite(11,a);// 11번 핀에 a만큼의 전압을 출력
delay(1000);// 1초 대기
a=a-25;// a에서 25만큼을 뺌. 255(5V)의 약 10%는 250
}
3번 과제를 수행해보자!
1초 간격으로 LED 색이 변하도록 회로와 프로그램을 구현하시오. (RGB LED 모듈 사용)
voidsetup(){pinMode(9,OUTPUT);// 9번 핀을 출력으로 설정
pinMode(11,OUTPUT);// 11번 핀을 출력으로 설정
}voidloop(){// 빨간색 출력
digitalWrite(11,HIGH);// 11번 핀에 5V 전압을 출력
delay(1000);// 1초 대기
// 보라색 출력
digitalWrite(11,LOW);// 11번 핀에 0V 전압을 출력
digitalWrite(11,HIGH);// 11번 핀에 5V 전압을 출력
digitalWrite(9,HIGH);// 9번 핀에 5V 전압을 출력
delay(1000);// 1초 대기
// 파란색 출력
digitalWrite(11,LOW);// 11번 핀에 0V 전압을 출력
digitalWrite(9,LOW);// 9번 핀에 0V 전압을 출력
digitalWrite(9,HIGH);// 9번 핀에 5V 전압을 출력
delay(1000);// 1초 대기
// 모든 LED 끄기
digitalWrite(9,LOW);// 9번 핀에 0V 전압을 출력
}
Serial.print(내용), Serial.println(내용): 시리얼 통신을 통해 내용을 출력함.
Serial.available(): 버퍼에 있는 데이터의 길이를 바이트 단위로 확인함.
Serial.read(): 버퍼에서 문자를 하나 가져옴.
Serial.readString(): 버퍼에서 문자열을 가져옴.
1번 과제를 수행해보자!
구구단 중 하나를 시리얼로 출력하시오.
출력하는 구구단은 2단이다.
1
2
3
4
5
6
7
8
9
10
11
12
voidsetup(){Serial.begin(9600);// 9600의 속도로 시리얼 통신을 시작
}inta=1;// a라는 정수형 변수를 선언한 뒤, 1이라는 값을 대입함
voidloop(){while(a<10){// a가 10미만일 동안 (2*9 까지만 출력함)
Serial.println(2*a);// 2*a의 값을 출력함
a=a+1;// a에 1을 더해줌
}}
2번 과제를 수행해보자!
‘T’, ‘F’ 문자를 시리얼로 입력하면 LED가 켜지고 꺼지도록 회로와 프로그램을 작성하시오.
LED 모듈은 8번 핀에 연결했다고 가정하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
voidsetup(){pinMode(8,OUTPUT);// 8번 핀을 출력으로 설정
Serial.begin(9600);// 9600의 속도로 시리얼 통신을 시작
}voidloop(){if(Serial.available()>0){// 버퍼의 데이터 길이 > 0 이면 (=읽을 데이터가 있으면)
charc=Serial.read();// char 자료형의 변수 c를 선언하고 문자 하나를 읽음
if(c=='T'){// c가 'T'와 같다면
digitalWrite(8,HIGH);// 8번 핀에 5V 전압을 출력
}if(c=='F'){// C가 'F'와 같다면
digitalWrite(8,LOW);// 8번 핀에 0V 전압을 출력
}}}
1번 과제를 수행해보자!
어두워지면 LED가 켜지고, 밝아지면 LED가 꺼지도록 회로와 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
voidsetup(){Serial.begin(9600);// 9600의 속도로 시리얼 통신을 시작
pinMode(A0,INPUT);// A0 핀을 입력으로 설정
pinMode(7,OUTPUT);// 7번 핀을 입력으로 설정
}voidloop(){inta=analogRead(A0);// a라는 정수형 변수를 선언한 뒤 A0 핀을 통해 읽어온 값을 대입함
if(a>300){// 읽어온 값 a가 300보다 크다면(=어두우면)
digitalWrite(7,HIGH);// 7번 핀에 5V 전압을 출력
}if(a<300){// 읽어온 값 a가 300보다 작다면(=밝으면)
digitalWrite(7,LOW);// 7번 핀에 0V 전압을 출력
}}
문자를 숫자로 변경하거나 숫자를 문자로 변경할 수 있음 (반대도 가능함, ASCII 코드)
1번 과제를 수행해보자!
시리얼로 문자열을 입력받아, 문자 a의 개수를 세는 프로그램을 작성하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
voidsetup(){Serial.begin(9600);// 9600의 속도로 시리얼 통신을 시작
}voidloop(){intn=0;// a라는 정수형 변수를 선언한 뒤, 0이라는 값을 대입함
if(Serial.available()>0){// 버퍼의 데이터 길이 > 0 이면 (=읽을 데이터가 있으면)
chara=Serial.read();// char 자료형의 변수 c를 선언하고 문자 하나를 읽음
if(a=='a'){// a가 'a'와 같다면
n=n+1;// 변수 n에 1을 더함
}}Serial.println(n);// n의 값을 출력함
}
2번 과제를 수행해보자!
문자 ‘A’와 ‘a’를 숫자로 변환하여 출력하시오.
1
2
3
4
5
6
7
8
9
voidsetup(){Serial.begin(9600);// 9600의 속도로 시리얼 통신을 시작
}voidloop(){Serial.println('A');// 'A'를 출력함
Serial.println((int)'a');// 97을 출력함, 정수 변환값
Serial.println((int)'A');// 65을 출력함, 정수 변환값
}