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

아두위키 : Arduwiki
잔글편집 요약 없음
 
(같은 사용자의 중간 판 17개는 보이지 않습니다)
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번째 줄: 10번째 줄:


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


35번째 줄: 38번째 줄:


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


146번째 줄: 150번째 줄:


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


==== 3-4. 코드 ====
==== 3-4. 코드 ====
170번째 줄: 174번째 줄:
버튼이 눌리게 되면 digitalRead() 함수에서 [LOW]가, 버튼이 눌리지 않을 때는 [HIGH] 값이 반환됩니다.
버튼이 눌리게 되면 digitalRead() 함수에서 [LOW]가, 버튼이 눌리지 않을 때는 [HIGH] 값이 반환됩니다.


==== 실습1. 버튼이 눌릴 때마다 n을 1 증가시키기 ====
==== 3-5. [실습] 버튼이 눌릴 때마다 n을 1 증가시키기 ====
<div class="coders70">
<div class="coders70">
<youtube>0ZIF59rua3U</youtube>
<youtube>0ZIF59rua3U</youtube>
192번째 줄: 196번째 줄:
</syntaxhighlight>
</syntaxhighlight>


==== 실습2. 버튼을 눌러 LED 켜기1 ====
==== 3-6. [실습] 버튼을 눌러 LED 켜기1 ====
 
<div class="coders70">
<youtube>XoEXZ7I-jQ4</youtube>
</div>
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
버튼이 눌리는 동안 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
int btn = 9;
int btn = 9;
199번째 줄: 205번째 줄:


void setup() {
void setup() {
  Serial.begin(9600);
   pinMode(btn, INPUT_PULLUP);
   pinMode(btn, INPUT_PULLUP);
   pinMode(led, OUTPUT);
   pinMode(led, OUTPUT);
214번째 줄: 219번째 줄:
   delay(100);
   delay(100);
}
}
</syntaxhighlight>
</syntaxhighlight>


==== 실습3. 버튼을 눌러 LED 켜기2 ====
==== 3-7. [실습] 버튼을 눌러 LED 켜기2(스위치) ====
 
<div class="coders70">
<youtube>EjwfY51onl8</youtube>
</div>
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
다양한 변수, 조건문을 사용하여 버튼을 한 번 누르면 LED가 켜지고 다시 누르면 LED가 꺼질 수 있도록 코드를 작성해봅시다.<syntaxhighlight lang="arduino" line="1">
int btn = 9;
int btn = 9;
224번째 줄: 230번째 줄:


void setup() {
void setup() {
  Serial.begin(9600);
   pinMode(btn, INPUT_PULLUP);
   pinMode(btn, INPUT_PULLUP);
   pinMode(led, OUTPUT);
   pinMode(led, OUTPUT);
233번째 줄: 238번째 줄:
     // code..
     // code..
   }
   }
  // code..
   delay(100);
   delay(100);
}
</syntaxhighlight>
==== 3-8. [실습] 버튼을 눌러 LED 여러개 제어하기 ====
<div class="coders70">
<youtube>OS93IM3tzDQ</youtube>
</div>
다양한 변수, 조건문을 사용하여 버튼을 누를 때마다 현재 LED는 꺼지고 다음 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);
}
void loop() {
  if(digitalRead(btn) == LOW) {
    // code..
  }
  // code..
  delay(100);
}
</syntaxhighlight>
=== 4. 아두이노 아날로그 핀 ===
[[파일:아날로그read.png|프레임없음|414x414픽셀]]
아두이노 디지털 아날로그 입력 pin은 보드의 A0 ~ A5 를 사용할 수 있습니다.
아날로그 입력(analogRead)를 사용해 센서의 값을 읽어와 출력해 봅시다.
==== 4-1. 조도 센서 회로도 ====
주변 환경의 빛 강도를 측정하기 위해 설계된 센서 모듈입니다. 이 센서 모듈은 자동 조명 시스템, 식물을 위한 성장등, 빛 조건의 변화를 감지해야 하는 모든 애플리케이션에서 빛 수준을 모니터링하거나 제어해야 할 때 자주 사용됩니다.
[[파일:조도센서.png|프레임없음]]
==== 4-2. 코드 ====
<div class="coders70">
<youtube>w15j1EjFnxo</youtube>
</div><syntaxhighlight lang="arduino" line="1">
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  int data = analogRead(A0);
  Serial.println(data);   
 
  delay(300);
}
</syntaxhighlight>cds 센서를 이용해 빛의 세기를 읽어와 출력해 봅시다.
센서를 손가락으로 가리면 값이 커집니다.
스마트폰 플래쉬를 켜고 cds 센서에 비추면 값이 작아집니다.
cds 센서값은 0~1023 사잇값으로 표현됩니다.
==== 4-3. [실습] cds를 이용해 어두워지면 LED 켜기 ====
실생활의 가로등을 생각해 보세요!
어두워지면 자동으로 LED가 켜질 수 있도록 코드를 작성하세요.
<div class="coders70">
<youtube>n5euIczo0U4</youtube>
</div><syntaxhighlight lang="arduino" line="1">
int led = 3;
void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  int data = analogRead(A0);
  Serial.println(data);   
 
  // code ..
  delay(300);
}
</syntaxhighlight>
=== 5. LCD ===
[[파일:LCD.png|프레임없음|529x529픽셀]]
아두이노 LCD 모듈은 문자나 숫자를 디스플레이하기 위해 사용하는 모듈입니다.
[[파일:LCD 2.png|프레임없음]]
뒷 면에 가변저항이 있어 글자 밝기 조절이 가능합니다. 글자가 잘 안보이면 조절해보세요!
==== 5-1. LCD 회로도 ====
{| class="wikitable"
!I2C LCD 모듈 핀
!아두이노 우노 핀
|-
|VCC
|5V
|-
|GND
|GND
|-
|SDA
|A4
|-
|SCL
|A5
|}
[[파일:LCD 회로도.png|프레임없음|625x625픽셀]]
==== 5-2. 라이브러리 추가 ====
먼저 아두이노 IDE 에서 LCD을 사용하기 위해 라이브러리를 설치합니다.
[스케치] - [라이브러리 포함] - [라이브러리 관리] 에서 "LiquidCrystal I2C"을 검색합니다. [LiquidCrystal I2C by Frank de Brabander]을 찾아 설치해주세요.
[[파일:LCD lib.png|프레임없음|702x702픽셀]]
==== 5-3. 코드 ====
[[파일:Lcd 글자.png|프레임없음|439x439픽셀]]
LCD에 "CODERSIT", "2025"를 출력해 봅시다.
<syntaxhighlight lang="arduino" line="1">
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
  lcd.init();
  lcd.backlight();
 
  //lcd의 위치를 (0,0)으로 지정합니다.(좌상단 기준)
  lcd.setCursor(0, 0);
  //출력할 문구를 작성합니다.
  lcd.print("CODERSIT");
  //lcd의 위치를 (0,1)로 지정합니다.
  lcd.setCursor(0, 1);
  //val 값을 출력합니다.
  int val = 2025;
  lcd.print(val);
}
}


void loop()
{
 
}
</syntaxhighlight>
</syntaxhighlight>


=== 4. 실습 코드 참고하기 ===
* LCD의 커서 좌표
 
[[파일:Lcd 좌표.png|프레임없음|961x961픽셀]]
 
==== 5-4. [실습] LCD에 물결 출력하기 ====
영상을 보고 문자를 출력하여 물결 모양으로 출력해 봅시다.


==== 1. 실습 코드) 버튼이 눌릴 때마다 n을 1 증가시키기 ====
'''★ lcd.clear()''' 함수를 사용하면 lcd에 나타냈던 문자를 모두 지울 수 있습니다.
<div class="coders70">
<youtube>xs7sHnCpjNg</youtube>
</div>
 
==== 5-5. [실습] 조도 센서의 값 LCD에 나타내기 ====
<div class="coders70">
<youtube>pC1EdyVV4uQ</youtube>
</div>
 
위에서 배운 조도 센서와 LCD를 함께 사용해 봅시다.
 
조도 센서의 값을 읽어와 LCD에 나타내 봅시다.<syntaxhighlight lang="arduino" line="1">
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup()
  lcd.init();
  lcd.backlight();
}
 
void loop()
{
  // code..
 
  lcd.setCursor(0, 0);
  lcd.print();
}
</syntaxhighlight>
 
=== 6. 실습 코드 참고하기 ===
 
==== 3-5. [실습] 버튼이 눌릴 때마다 n을 1 증가시키기 ====
<syntaxhighlight lang="arduino" line="1">
<syntaxhighlight lang="arduino" line="1">
int btn = 9;
int btn = 9;
261번째 줄: 465번째 줄:
</syntaxhighlight>
</syntaxhighlight>


==== 2. 실습 코드) 버튼을 눌러 LED 켜기1 ====
==== 3-6. [실습] 버튼을 눌러 LED 켜기1 ====
<syntaxhighlight lang="arduino" line="1">
<syntaxhighlight lang="arduino" line="1">
int btn = 9;
int btn = 9;
281번째 줄: 485번째 줄:
   }
   }
   delay(100);
   delay(100);
}
</syntaxhighlight>
==== 3-7. [실습] 버튼을 눌러 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>
==== 3-8. [실습] 버튼을 눌러 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() {
  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);
}
</syntaxhighlight>
==== 4-3. [실습] cds를 이용해 어두워지면 LED 켜기 ====
<syntaxhighlight lang="arduino" line="1">
int led = 2;
void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
  int data = analogRead(A0);
  if(data>500){
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
  Serial.println(data);
  delay(300);
}
</syntaxhighlight>
==== 5-5. [실습] 조도 센서의 값 LCD에 나타내기 ====
<syntaxhighlight lang="arduino" line="1">
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
  lcd.init();
  lcd.backlight();
}
void loop()
{
  int data = analogRead(A0);
  lcd.setCursor(0, 0);
  lcd.print("LED!!");
  lcd.setCursor(0, 1);
  lcd.print(data);
  delay(500);
}
}
</syntaxhighlight>
</syntaxhighlight>

2024년 12월 21일 (토) 19:37 기준 최신판

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. 아두이노 아날로그 핀

아두이노 디지털 아날로그 입력 pin은 보드의 A0 ~ A5 를 사용할 수 있습니다.

아날로그 입력(analogRead)를 사용해 센서의 값을 읽어와 출력해 봅시다.

4-1. 조도 센서 회로도

주변 환경의 빛 강도를 측정하기 위해 설계된 센서 모듈입니다. 이 센서 모듈은 자동 조명 시스템, 식물을 위한 성장등, 빛 조건의 변화를 감지해야 하는 모든 애플리케이션에서 빛 수준을 모니터링하거나 제어해야 할 때 자주 사용됩니다.

4-2. 코드

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

void loop()
{
  int data = analogRead(A0);
  Serial.println(data);    
   
  delay(300);
}

cds 센서를 이용해 빛의 세기를 읽어와 출력해 봅시다.

센서를 손가락으로 가리면 값이 커집니다.

스마트폰 플래쉬를 켜고 cds 센서에 비추면 값이 작아집니다.

cds 센서값은 0~1023 사잇값으로 표현됩니다.

4-3. [실습] cds를 이용해 어두워지면 LED 켜기

실생활의 가로등을 생각해 보세요!

어두워지면 자동으로 LED가 켜질 수 있도록 코드를 작성하세요.

int led = 3;

void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int data = analogRead(A0);
  Serial.println(data);    
   
  // code ..

  delay(300);
}

5. LCD

아두이노 LCD 모듈은 문자나 숫자를 디스플레이하기 위해 사용하는 모듈입니다.

뒷 면에 가변저항이 있어 글자 밝기 조절이 가능합니다. 글자가 잘 안보이면 조절해보세요!

5-1. LCD 회로도

I2C LCD 모듈 핀 아두이노 우노 핀
VCC 5V
GND GND
SDA A4
SCL A5

5-2. 라이브러리 추가

먼저 아두이노 IDE 에서 LCD을 사용하기 위해 라이브러리를 설치합니다.

[스케치] - [라이브러리 포함] - [라이브러리 관리] 에서 "LiquidCrystal I2C"을 검색합니다. [LiquidCrystal I2C by Frank de Brabander]을 찾아 설치해주세요.

5-3. 코드


LCD에 "CODERSIT", "2025"를 출력해 봅시다.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{  
  lcd.init();
  lcd.backlight();
  
  //lcd의 위치를 (0,0)으로 지정합니다.(좌상단 기준)
  lcd.setCursor(0, 0);

  //출력할 문구를 작성합니다.
  lcd.print("CODERSIT");

  //lcd의 위치를 (0,1)로 지정합니다.
  lcd.setCursor(0, 1);

  //val 값을 출력합니다.
  int val = 2025;
  lcd.print(val);
}

void loop()
{
  
}
  • LCD의 커서 좌표

5-4. [실습] LCD에 물결 출력하기

영상을 보고 문자를 출력하여 물결 모양으로 출력해 봅시다.

★ lcd.clear() 함수를 사용하면 lcd에 나타냈던 문자를 모두 지울 수 있습니다.

5-5. [실습] 조도 센서의 값 LCD에 나타내기

위에서 배운 조도 센서와 LCD를 함께 사용해 봅시다.

조도 센서의 값을 읽어와 LCD에 나타내 봅시다.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{  
  lcd.init();
  lcd.backlight();
}

void loop()
{
  // code..
  
  lcd.setCursor(0, 0);
  lcd.print();
}

6. 실습 코드 참고하기

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);
}

4-3. [실습] cds를 이용해 어두워지면 LED 켜기

int led = 2;

void setup()
{
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  int data = analogRead(A0);
  if(data>500){
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  } 
  Serial.println(data);
  delay(300);
}


5-5. [실습] 조도 센서의 값 LCD에 나타내기

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{  
  lcd.init();
  lcd.backlight();
}

void loop()
{
  int data = analogRead(A0);
  lcd.setCursor(0, 0);
  lcd.print("LED!!");
  lcd.setCursor(0, 1);
  lcd.print(data);
  delay(500);
}