2주차 버튼 제어하기(블록코딩): 두 판 사이의 차이
27번째 줄: | 27번째 줄: | ||
[[파일:블록 크기비교2.png|왼쪽|프레임|왼쪽 값이 오른쪽 값보다 작다. | [[파일:블록 크기비교2.png|왼쪽|프레임|왼쪽 값이 오른쪽 값보다 작다.]] | ||
2024년 7월 12일 (금) 16:09 판
1. 아두이노 디지털 핀
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.
저번 시간에는 디지털 출력(digitalWrite)를 사용해보았습니다. 이번 시간에는 디지털 출력(digitalRead)를 사용해봅시다.
3. 버튼
택트 스위치(Tact Switch)는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.
3-1. 비교 연산자, 논리 연산자
비교 연산자(<, >, , =)는 두 개의 값을 비교하는 연산자입니다. 아두이노에서 결과는 [참] 또는 [거짓]으로 나타납니다.
논리 연산자(그리고, 또는, 부정)은 참과 거짓을 연산하기 위해 사용됩니다.
[참] 그리고 [참] | 참 |
[참] 그리고 [거짓] | 거짓 |
[거짓] 그리고 [참] | 거짓 |
[거짓] 그리고 [거짓] | 거짓 |
[참] 또는 [참] | 참 |
[참] 또는 [거짓] | 참 |
[거짓] 또는 [참] | 참 |
[거짓] 또는 [거짓] | 거짓 |
[참]의 부정 | 거짓 |
[거짓]의 부정 | 참 |
3-2. 조건 블록
조건 블록 "만약 [ ] 이(가) 참이면" 블록은 조건이 "참"인 경우 작성한 코드가 수행되고 "거짓"인 경우 수행되지 않습니다.
"아니면" 안에 작성한 코드는 만약 [ ] 블록의 조건이 "참"인 경우에는 실행되지 않고 "거짓"인 경우 수행됩니다.
3-3. 버튼 회로도
3-4. 코드
버튼을 이용해 버튼이 눌릴 때마다 시리얼 모니터에 "button push!"라는 문장을 출력하는 코드를 작성해봅시다.
int btn = 9;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
}
void loop() {
if(digitalRead(btn) == LOW) {
Serial.println("button push!");
}
delay(100);
}
아두이노에는 자체적으로 풀업 저항이 내장되어있습니다.
디지털 입력 핀 모드를 설정할 때 'INPUT_PULLUP'을 사용하면 외부에 저항을 추가하지 않아도 디지털 핀을 풀업 저항으로 사용할 수 있게 됩니다.
버튼이 눌리게 되면 digitalRead() 함수에서 [LOW]가, 버튼이 눌리지 않을 때는 [HIGH] 값이 반환됩니다.
실습1. 버튼이 눌릴 때마다 n을 1 증가시키기
변수 n을 생성하고 버튼이 눌릴 때마다 1 증가시켜 시리얼 모니터에 출력하는 코드를 작성해봅시다.
int btn = 9;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
}
int n = 1;
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
delay(100);
}
실습2. 버튼을 눌러 LED 켜기1
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
int btn = 9;
int led = 10;
void setup() {
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
int n = 1;
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
else {
// code..
}
delay(100);
}
실습3. 버튼을 눌러 LED 켜기2
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
int btn = 9;
int led = 10;
void setup() {
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
// code..
delay(100);
}
실습4. 버튼을 눌러 LED 여러개 제어하기
다양한 변수, 조건문을 사용하여 버튼을 누를 때마다 현재 LED는 꺼지고 다음 LED가 켜질 수 있도록 코드를 작성해봅시다.
int btn = 9;
int led1 = 10;
int led2 = 11;
int led3 = 12;
void setup() {
pinMode(btn, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
// code..
delay(100);
}
4. 실습 코드 참고하기
1. 실습 코드) 버튼이 눌릴 때마다 n을 1 증가시키기
int btn = 9;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
}
int n = 1;
void loop() {
if(digitalRead(btn) == LOW) {
Serial.println("### button push!!! ###");
Serial.println(n);
Serial.println("######################");
n+=1;
}
delay(100);
}
2. 실습 코드) 버튼을 눌러 LED 켜기1
int btn = 9;
int led = 10;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
int n = 1;
void loop() {
if(digitalRead(btn) == LOW) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
delay(100);
}
3. 실습 코드) 버튼을 눌러 LED 켜기2
int btn = 9;
int led = 10;
void setup() {
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
int flag = 0;
void loop() {
if(digitalRead(btn) == LOW) {
if (flag == 0) {
flag = 1;
}
else {
flag = 0;
}
}
if(flag == 0) {
digitalWrite(led, LOW);
}
else {
digitalWrite(led, HIGH);
}
delay(100);
}
4. 실습 코드) 버튼을 눌러 LED 여러개 제어하기
int btn = 9;
int led1 = 10;
int led2 = 11;
int led3 = 12;
void setup() {
pinMode(btn, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
int led_num = 1;
void loop() {
if(digitalRead(btn) == LOW) {
led_num += 1;
if (led_num >= 4) {
led_num = 1;
}
}
if (led_num == 1) {
digitalWrite(12, LOW);
digitalWrite(10, HIGH);
}
if (led_num == 2) {
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
}
if (led_num == 3) {
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
}
delay(100);
}