(같은 사용자의 중간 판 16개는 보이지 않습니다) 5번째 줄:
5번째 줄:
저번 시간에는 디지털 출력(digitalWrite)를 사용해보았습니다. 이번 시간에는 디지털 출력(digitalRead)를 사용해봅시다.
저번 시간에는 디지털 출력(digitalWrite)를 사용해보았습니다. 이번 시간에는 디지털 출력(digitalRead)를 사용해봅시다.
=== 2. 시리얼 모니터(Sirial Monitor) ===
=== 3 . 버튼 ===
시리얼 모니터란 아두이노에서 보내주는 데이터를 아두이노 IDE에 포함되어 있는 창을 이용해 출력해 확인해볼 수 있는 것을 말합니다.
[[파일:택트스위치 이미지 .jpg|프레임없음|가운데]]
아두이노에 연결된 센서를 이용해 측정된 값을 출력해서 확인해볼 수 있습니다.
[[택트 스위치(Tact Switch) ]]는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다 .
[[파일:시리얼 모니터.png|가운데|프레임없음|482x482픽셀]]
아두이노 IDE의 오른쪽 위에 시리얼 모니터를 누르면 아래에 창이 보이게 됩니다.
시리얼 모니터를 이용해 출력하는 방법을 알아봅시다.
==== 3-1 . 비교 연산자 ====
비교 연산자(<, >, , =)는 두 개의 값을 비교하는 연산자입니다. 아두이노에서 결과는 [참] 또는 [거짓]으로 나타납니다.
[[파일:블록 같다 .png|프레임|왼쪽 값과 오른쪽 값이 동일하다.|없음]]
==== 2-1. 시리얼 모니터에 출력하기 ====
[[파일:블록 크기비교1 .png|프레임|왼쪽 값이 오른쪽 값보다 크다 .|없음]]
<syntaxhighlight lang="arduino" line="1">
void setup() {
Serial.begin(9600);
}
int n = 1;
[[파일:블록 크기비교2 .png|프레임|왼쪽 값이 오른쪽 값보다 작다 .|없음]]
void loop() {
Serial.print("n : ");
Serial.println(n);
delay(1000);
n+=1;
}
</syntaxhighlight>위 코드를 작성해봅시다.
시리얼 모니터를 사용하기 위해서는 setup() 함수에 '''Serial.begin()''' 함수를 이용해 보드 레이트 기본값을 설정하고 시리얼 모니터를 사용하겠다고 코드를 작성합니다.
loop() 함수에서는 1초에 한 번씩 [n] 변수 값을 증가시키며 시리얼 모니터에 출력하는 코드입니다.
==== 3-2 . 논리 연산자 ====
'''Serial.print()''' 함수는 괄호 안의 문자를 출력하는 함수이며 '''Serial.println()''' 함수는 괄호 안의 문자를 출력하고 마지막에 줄바꿈을 해주는 함수입니다.
논리 연산자 (그리고, 또는, 부정 )은 참과 거짓을 연산하기 위해 사용됩니다 .
[[파일:시리얼 모니터 실행.png|가운데|프레임없음|525x525픽셀]]
코드를 실행시킨 후 시리얼 모니터 아이콘을 클릭하면 아두이노 IDE 아래 창에서 결과를 확인할 수 있습니다.
=== 3. 버튼 ===
[[파일:택트스위치 이미지.jpg|프레임없음|가운데]]
[[택트 스위치(Tact Switch)]]는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.
[[파일:블록_그리고.png|프레임없음 ]]
==== 3-1. 비교 연산자, 논리 연산자 ====
비교 연산자(<, <=, >, >=, ==, !=)는 두 개의 값을 비교하는 연산자입니다. 아두이노에서 결과는 참(1) 또는 거짓(0)으로 나타납니다.
{| class="wikitable"
{| class="wikitable"
|+
|+[ ] 그리고 [ ]
|<
|[참] 그리고 [참]
|왼쪽 값이 오른쪽 값보다 작다.
|참
|A < B
|-
|<=
|왼쪽 값이 오른쪽 값보다 작거나 같다.
|A <= B
|-
|-
|>
|[참] 그리고 [거짓]
|왼쪽 값이 오른쪽 값보다 크다.
|거짓
|A > B
|-
|-
|>=
|[거짓] 그리고 [참]
|왼쪽 값이 오른쪽 값보다 크거나 같다.
|거짓
|A >= B
|-
|-
|==
|[거짓] 그리고 [거짓]
|왼쪽 값과 오른쪽 값이 동일하다.
|거짓
|A == B
|-
|!=
|왼쪽 값과 오른쪽 값이 동일하지 않다.
|A != B
|}
|}
논리 연산자(&&, ||, !)은 참과 거짓을 연산하기 위해 사용됩니다.
[[파일:블록_또는.png |프레임없음]]
{| class="wikitable"
{| class="wikitable"
|+and
|+[ ] 또는 [ ]
|참 && 참
|[ 참] 또는 [ 참]
|1
|참
|-
|-
|참 && 거짓
|[ 참] 또는 [ 거짓]
|0
|참
|-
|-
|거짓 && 참
|[ 거짓] 또는 [ 참]
|0
|참
|-
|-
|거짓 && 거짓
|[ 거짓] 또는 [ 거짓]
|0
|거짓
|}
|}
[[파일:블록_부정.png|프레임없음]]
{| class="wikitable"
{| class="wikitable"
|+or
|+[ ] 의 부정
|<nowiki>참 || 참</nowiki>
|[ 참]의 부정
|1
|거짓
|-
|<nowiki>참 || 거짓</nowiki>
|1
|-
|<nowiki>거짓 || 참</nowiki>
|1
|-
|-
|<nowiki>거짓 || 거짓</nowiki>
|[ 거짓]의 부정
|0
|참
|}
{| class="wikitable"
|+not
|!참
|0
|-
|!거짓
|1
|}
|}
==== 3-2. 조건문 if, else if, else ====
조건문 if는 조건이 "참"인 경우 작성한 코드가 수행되고 "거짓"인 경우 수행되지 않습니다.<syntaxhighlight lang="arduino" line="1">
if (조건) {
// code..
}
</syntaxhighlight>
==== 3-3. 조건 블록 ====
조건 블록 "만약 [ ] 이(가) 참이면" 블록은 조건이 "참"인 경우 작성한 코드가 수행되고 "거짓"인 경우 수행되지 않습니다.
[[파일:블록_조건1.png|프레임없음]]
"아니면" 안에 작성한 코드는 만약 [ ] 블록의 '''조건'''이 "참"인 경우에는 실행되지 않고 "거짓"인 경우 수행됩니다.
else문 안에 작성한 코드는 '''if문 조건'''이 "참"인 경우에는 실행되지 않고 "거짓"인 경우 수행됩니다.<syntaxhighlight lang="arduino" line="1">
[[파일:블록_조건2 .png|프레임없음]]
if (조건) {
// code..
}
else {
// code..
}
</syntaxhighlight>
else if는 else와 다르게 조건을 작성하여 세 개 이상의 조건을 연결하여 사용할 수 있습니다.
else와 else if를 이용해 다양한 조건을 확인하는 조건문을 작성할 수 있습니다.<syntaxhighlight lang="arduino" line="1">
if (조건) {
// code..
}
else if(조건) {
// code..
}
else if(조건) {
// code..
}
else {
// code..
}
</syntaxhighlight>
==== 3-3. 버튼 회로도 ====
==== 3-4 . 버튼 회로도 ====
[[파일:아두이노 스위치 회로2.png|가운데|프레임없음|543x543픽셀]]
[[파일:아두이노 스위치 회로2.png|가운데|프레임없음|543x543픽셀]]
==== 3-4. 코드 ====
==== 3-5 . 확장 기능 사용하기 ====
버튼을 이용해 버튼이 눌릴 때마다 시리얼 모니터에 "button push!"라는 문장을 출력하는 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
int btn = 9;
void setup() {
[[파일:블록 확장 .png|프레임없음|662x662픽셀]]
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
}
void loop() {
먼저 버튼을 이용하기 위해 아래의 "확장 "을 눌러봅시다.
if(digitalRead(btn) == LOW) {
Serial.println("button push!");
}
delay(100);
}
</syntaxhighlight>아두이노에는 자체적으로 풀업 저항이 내장되어있습니다.
[[파일:블록 inputpullup .png|프레임없음|926x926픽셀]]
디지털 입력 핀 모드를 설정할 때 'INPUT_PULLUP'을 사용하면 외부에 저항을 추가하지 않아도 디지털 핀을 풀업 저항으로 사용할 수 있게 됩니다.
검색창에 "input"라고 작성하여 [ INPUT_PULLUP]라고 하는 확장 기능을 추가해봅시다 .
[[파일:블록 PULLUP.png|없음|프레임|버튼이 눌리게 되면 digital port 함수에서 [거짓]의 값이, 버튼이 눌리지 않을 때는 "참"의 값이 반환됩니다.]]
버튼이 눌리게 되면 digitalRead() 함수에서 [LOW]가, 버튼이 눌리지 않을 때는 [HIGH] 값이 반환됩니다.
==== 3-6. 코드 작성 ====
버튼을 이용해 버튼이 눌리면 아두이노의 LED가 켜지고 버튼이 눌리지 않으면 아두이노의 LED가 꺼지는 코드를 작성해봅시다 .
==== 실습1. 버튼이 눌릴 때마다 n을 1 증가시키기 ====
TIP) 아두이노에는 [L]라고 하는 알파벳이 적힌 LED가 있습니다 . 이 LED는 디지털 13번핀을 제어하면 켜고 끌 수 있습니다. 그래서 LED를 연결하지 않고도 버튼이 작동하는지 확인할 수 있답니다!
<div class="coders70">
<youtube>0ZIF59rua3U</youtube>
</div>
변수 n을 생성하고 버튼이 눌릴 때마다 1 증가시켜 시리얼 모니터에 출력하는 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
int btn = 9;
void setup() {
단, [L]의 위치는 아두이노마다 조금씩 다를 수 있습니다 .
Serial.begin(9600);
pinMode(btn, INPUT_PULLUP);
}
int n = 1;
[[파일:블록 13번핀 .png|프레임없음|643x643픽셀]]
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
delay(100);
}
</syntaxhighlight>
[[파일:블록 버튼눌러LED켜기.png|프레임없음|642x642픽셀]]
==== 실습2. 버튼을 눌러 LED 켜기1 ====
<div class ="coders70">
<youtube>LU5j2LB7KbQ</youtube>
</div>
==== 실습1 . 버튼을 눌러 LED 켜기1 ====
<div class="coders70">
<div class="coders70">
<youtube>XoEXZ7I-jQ4</youtube>
<youtube>XoEXZ7I-jQ4</youtube>
</div>
</div>
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
int btn = 9;
==== 실습2 . 버튼을 눌러 LED 켜기2 ====
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);
}
</syntaxhighlight>
==== 실습3. 버튼을 눌러 LED 켜기2 ====
<div class="coders70">
<div class="coders70">
<youtube>EjwfY51onl8</youtube>
<youtube>EjwfY51onl8</youtube>
</div>
</div>
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
int btn = 9;
==== 실습3 . 버튼을 눌러 LED 여러개 제어하기 ====
int led = 10;
void setup() {
pinMode(btn, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if(digitalRead(btn) == LOW) {
// code..
}
// code..
delay(100);
}
</syntaxhighlight>
==== 실습4. 버튼을 눌러 LED 여러개 제어하기 ====
<div class="coders70">
<div class="coders70">
<youtube>OS93IM3tzDQ</youtube>
<youtube>OS93IM3tzDQ</youtube>
</div>
</div>
다양한 변수, 조건문을 사용하여 버튼을 누를 때마다 현재 LED는 꺼지고 다음 LED가 켜질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
다양한 변수, 조건문을 사용하여 버튼을 누를 때마다 현재 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);
}
</syntaxhighlight>
=== 4. 실습 코드 참고하기 ===
=== 4. 실습 코드 참고하기 ===
==== 1. 실습 코드) 버튼이 눌릴 때마다 n을 1 증가시키기 ====
==== 1. 실습 코드) 버튼을 눌러 LED 켜기1 ====
<syntaxhighlight lang="arduino" line="1">
[[파일:블록 버튼눌러LED켜기 .png|프레임없음|402x402px]]
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);
}
</syntaxhighlight>
==== 2. 실습 코드) 버튼을 눌러 LED 켜기1 ====
<syntaxhighlight lang="arduino" line="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);
}
</syntaxhighlight>
===== 3. 실습 코드) 버튼을 눌러 LED 켜기2 =====
<syntaxhighlight lang="arduino" line="1">
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);
}
</syntaxhighlight>
==== 4. 실습 코드) 버튼을 눌러 LED 여러개 제어하기 ====
<syntaxhighlight lang="arduino" line="1">
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() {
===== 2. 실습 코드 ) 버튼을 눌러 LED 켜기2 =====
if(digitalRead(btn) == LOW) {
[[파일:블록 2주차실습2.png|프레임없음|709x709픽셀]]
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);
}
</syntaxhighlight>
==== 3. 실습 코드) 버튼을 눌러 LED 여러개 제어하기 ====
[[파일:블록 2주차실습3.png|프레임없음|937x937픽셀]]
1. 아두이노 디지털 핀
아두이노 디지털 입출력 pin은 보드의 digital pin 0 ~ 13을 사용할 수 있습니다. 0, 1번 pin은 컴퓨터와 아두이노가 통신할 때 주로 사용하기 때문에 우리는 2 ~ 13 핀을 사용하여 디지털 입출력을 사용할 수 있습니다.
저번 시간에는 디지털 출력(digitalWrite)를 사용해보았습니다. 이번 시간에는 디지털 출력(digitalRead)를 사용해봅시다.
3. 버튼
택트 스위치(Tact Switch) 는 디지털 핀에 연결하여 입력 신호로 활용 가능합니다.
3-1. 비교 연산자
비교 연산자(<, >, , =)는 두 개의 값을 비교하는 연산자입니다. 아두이노에서 결과는 [참] 또는 [거짓]으로 나타납니다.
왼쪽 값과 오른쪽 값이 동일하다.
왼쪽 값이 오른쪽 값보다 크다.
왼쪽 값이 오른쪽 값보다 작다.
3-2. 논리 연산자
논리 연산자(그리고, 또는, 부정)은 참과 거짓을 연산하기 위해 사용됩니다.
[ ] 그리고 [ ]
[참] 그리고 [참]
참
[참] 그리고 [거짓]
거짓
[거짓] 그리고 [참]
거짓
[거짓] 그리고 [거짓]
거짓
[ ] 또는 [ ]
[참] 또는 [참]
참
[참] 또는 [거짓]
참
[거짓] 또는 [참]
참
[거짓] 또는 [거짓]
거짓
[ ] 의 부정
[참]의 부정
거짓
[거짓]의 부정
참
3-3. 조건 블록
조건 블록 "만약 [ ] 이(가) 참이면" 블록은 조건이 "참"인 경우 작성한 코드가 수행되고 "거짓"인 경우 수행되지 않습니다.
"아니면" 안에 작성한 코드는 만약 [ ] 블록의 조건 이 "참"인 경우에는 실행되지 않고 "거짓"인 경우 수행됩니다.
3-4. 버튼 회로도
3-5. 확장 기능 사용하기
먼저 버튼을 이용하기 위해 아래의 "확장"을 눌러봅시다.
검색창에 "input"라고 작성하여 [INPUT_PULLUP]라고 하는 확장 기능을 추가해봅시다.
버튼이 눌리게 되면 digital port 함수에서 [거짓]의 값이, 버튼이 눌리지 않을 때는 "참"의 값이 반환됩니다.
3-6. 코드 작성
버튼을 이용해 버튼이 눌리면 아두이노의 LED가 켜지고 버튼이 눌리지 않으면 아두이노의 LED가 꺼지는 코드를 작성해봅시다.
TIP) 아두이노에는 [L]라고 하는 알파벳이 적힌 LED가 있습니다. 이 LED는 디지털 13번핀을 제어하면 켜고 끌 수 있습니다. 그래서 LED를 연결하지 않고도 버튼이 작동하는지 확인할 수 있답니다!
단, [L]의 위치는 아두이노마다 조금씩 다를 수 있습니다.
실습1. 버튼을 눌러 LED 켜기1
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
실습2. 버튼을 눌러 LED 켜기2
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.
실습3. 버튼을 눌러 LED 여러개 제어하기
다양한 변수, 조건문을 사용하여 버튼을 누를 때마다 현재 LED는 꺼지고 다음 LED가 켜질 수 있도록 코드를 작성해봅시다.
4. 실습 코드 참고하기
1. 실습 코드) 버튼을 눌러 LED 켜기1
2. 실습 코드) 버튼을 눌러 LED 켜기2
3. 실습 코드) 버튼을 눌러 LED 여러개 제어하기