2주차 버튼 제어하기: 두 판 사이의 차이

아두위키 : Arduwiki
잔글편집 요약 없음
1번째 줄: 1번째 줄:
=== 1. 아두이노 디지털 핀 ===
=== 1. 아두이노 디지털 핀 ===
[[파일:아두이노 디지털핀.png|가운데|프레임없음|392x392픽셀]]
[[파일:아두이노_디지털핀.png|프레임없음|392x392픽셀]]
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.


9번째 줄: 9번째 줄:


아두이노에 연결된 센서를 이용해 측정된 값을 출력해서 확인해볼 수 있습니다.
아두이노에 연결된 센서를 이용해 측정된 값을 출력해서 확인해볼 수 있습니다.
[[파일:시리얼 모니터.png|가운데|프레임없음|482x482픽셀]]
 
[[파일:시리얼_모니터.png|프레임없음|590x590픽셀]]
 
아두이노 IDE의 오른쪽 위에 시리얼 모니터를 누르면 아래에 창이 보이게 됩니다.
아두이노 IDE의 오른쪽 위에 시리얼 모니터를 누르면 아래에 창이 보이게 됩니다.


35번째 줄: 37번째 줄:


'''Serial.print()''' 함수는 괄호 안의 문자를 출력하는 함수이며 '''Serial.println()''' 함수는 괄호 안의 문자를 출력하고 마지막에 줄바꿈을 해주는 함수입니다.
'''Serial.print()''' 함수는 괄호 안의 문자를 출력하는 함수이며 '''Serial.println()''' 함수는 괄호 안의 문자를 출력하고 마지막에 줄바꿈을 해주는 함수입니다.
[[파일:시리얼 모니터 실행.png|가운데|프레임없음|525x525픽셀]]
 
[[파일:시리얼_모니터_실행.png|프레임없음|615x615픽셀]]
 
코드를 실행시킨 후 시리얼 모니터 아이콘을 클릭하면 아두이노 IDE 아래 창에서 결과를 확인할 수 있습니다.
코드를 실행시킨 후 시리얼 모니터 아이콘을 클릭하면 아두이노 IDE 아래 창에서 결과를 확인할 수 있습니다.
=== 3. 버튼 ===
=== 3. 버튼 ===
[[파일:택트스위치 이미지.jpg|프레임없음|가운데]]
[[파일:택트스위치_이미지.jpg|프레임없음]]
 
[[택트 스위치(Tact Switch)]]는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.
[[택트 스위치(Tact Switch)]]는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.


146번째 줄: 149번째 줄:


==== 3-3. 버튼 회로도 ====
==== 3-3. 버튼 회로도 ====
[[파일:아두이노 스위치 회로2.png|가운데|프레임없음|543x543픽셀]]
[[파일:아두이노_스위치_회로2.png|프레임없음|543x543픽셀]]


==== 3-4. 코드 ====
==== 3-4. 코드 ====

2024년 8월 6일 (화) 14:13 판

1. 아두이노 디지털 핀

아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.

저번 시간에는 디지털 출력(digitalWrite)를 사용해보았습니다. 이번 시간에는 디지털 출력(digitalRead)를 사용해봅시다.

2. 시리얼 모니터(Sirial Monitor)

시리얼 모니터란 아두이노에서 보내주는 데이터를 아두이노 IDE에 포함되어 있는 창을 이용해 출력해 확인해볼 수 있는 것을 말합니다.

아두이노에 연결된 센서를 이용해 측정된 값을 출력해서 확인해볼 수 있습니다.

아두이노 IDE의 오른쪽 위에 시리얼 모니터를 누르면 아래에 창이 보이게 됩니다.

시리얼 모니터를 이용해 출력하는 방법을 알아봅시다.

2-1. 시리얼 모니터에 출력하기

void setup() {
  Serial.begin(9600);
}

int n = 1;
void loop() {
  Serial.print("n : ");
  Serial.println(n);
  delay(1000);
  n+=1;
}

위 코드를 작성해봅시다.

시리얼 모니터를 사용하기 위해서는 setup() 함수에 Serial.begin() 함수를 이용해 보드 레이트 기본값을 설정하고 시리얼 모니터를 사용하겠다고 코드를 작성합니다.

loop() 함수에서는 1초에 한 번씩 [n] 변수 값을 증가시키며 시리얼 모니터에 출력하는 코드입니다.

Serial.print() 함수는 괄호 안의 문자를 출력하는 함수이며 Serial.println() 함수는 괄호 안의 문자를 출력하고 마지막에 줄바꿈을 해주는 함수입니다.

코드를 실행시킨 후 시리얼 모니터 아이콘을 클릭하면 아두이노 IDE 아래 창에서 결과를 확인할 수 있습니다.

3. 버튼

택트 스위치(Tact Switch)는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.

3-1. 비교 연산자, 논리 연산자

비교 연산자(<, <=, >, >=, ==, !=)는 두 개의 값을 비교하는 연산자입니다. 아두이노에서 결과는 참(1) 또는 거짓(0)으로 나타납니다.

< 왼쪽 값이 오른쪽 값보다 작다. A < B
<= 왼쪽 값이 오른쪽 값보다 작거나 같다. A <= B
> 왼쪽 값이 오른쪽 값보다 크다. A > B
>= 왼쪽 값이 오른쪽 값보다 크거나 같다. A >= B
== 왼쪽 값과 오른쪽 값이 동일하다. A == B
!= 왼쪽 값과 오른쪽 값이 동일하지 않다. A != B


논리 연산자(&&, ||, !)은 참과 거짓을 연산하기 위해 사용됩니다.

and
참 && 참 1
참 && 거짓 0
거짓 && 참 0
거짓 && 거짓 0
or
참 || 참 1
참 || 거짓 1
거짓 || 참 1
거짓 || 거짓 0
not
!참 0
!거짓 1

3-2. 조건문 if, else if, else

조건문 if는 조건이 "참"인 경우 작성한 코드가 수행되고 "거짓"인 경우 수행되지 않습니다.

if (조건) {
    // code..
}


else문 안에 작성한 코드는 if문 조건이 "참"인 경우에는 실행되지 않고 "거짓"인 경우 수행됩니다.

if (조건) {
    // code..
}
else {
    // code..
}


else if는 else와 다르게 조건을 작성하여 세 개 이상의 조건을 연결하여 사용할 수 있습니다.

else와 else if를 이용해 다양한 조건을 확인하는 조건문을 작성할 수 있습니다.

if (조건) {
    // code..
}
else if(조건) {
    // code..
}
else if(조건) {
    // code..
}
else {
    // code..
}

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] 값이 반환됩니다.

3-5. [실습] 버튼이 눌릴 때마다 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);
}

3-6. [실습] 버튼을 눌러 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-7. [실습] 버튼을 눌러 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);
}

3-8. [실습] 버튼을 눌러 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. 실습 코드 참고하기

3-5. [실습] 버튼이 눌릴 때마다 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);
}

3-6. [실습] 버튼을 눌러 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-7. [실습] 버튼을 눌러 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);
}

3-8. [실습] 버튼을 눌러 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);
}