오늘이라도

[Arduino] 6. LCD 글자 이동, 초 출력, 깜빡이기 / 입력한 글자 출력 / 초음파 센서 연동 / 블루투스 모듈 연결, 설정 / 블루투스로 LED 켜기 본문

취업성공패키지 SW 개발자 교육/사물 인터넷(IoT)

[Arduino] 6. LCD 글자 이동, 초 출력, 깜빡이기 / 입력한 글자 출력 / 초음파 센서 연동 / 블루투스 모듈 연결, 설정 / 블루투스로 LED 켜기

upcake_ 2020. 4. 27. 21:09
반응형

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


 - LCD : 글자 이동, 초 출력, 깜빡이기 -

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2); // 안되면 0x3F로 시도해본다.
//LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup()
{
	// initialize the LCD
	lcd.begin();

	// Turn on the blacklight and print a message.
	lcd.backlight();
  lcd.setCursor(0,0);
	lcd.print("Hello, world!");
}

void loop()
{
  // LCD 패널의 구성은 16x2의 테이블로 구성되어 있음, (0, 0) ~ (15, 1)
  // 글자 왼쪽 끝으로 이동
  for (int posCnt = 0; posCnt < 13; posCnt++) { // 움직일 글자 수 13
    lcd.scrollDisplayLeft();
    delay(150);
  }
  
  // 글자 오른쪽 끝으로 이동
  for (int posCnt = 0; posCnt < 29; posCnt++) { // 글자 수 13 + 칸 수 16
    lcd.scrollDisplayRight();
    delay(150);    
  }

  // 글자 원위치
  for (int posCnt = 0; posCnt < 16; posCnt++) { // 칸 수 16
    lcd.scrollDisplayLeft();
    delay(150);
  }

  // 초 출력
  lcd.setCursor(0, 0);
  lcd.print("Hello, world!");
  lcd.setCursor(0, 1);
  lcd.print(millis() / 1000);

  // 글자 깜빡이게 하기
  for(int i = 0; i < 10; i++) {
    lcd.clear();
    delay(100);
    lcd.setCursor(0, 0);
    lcd.print("Hello, world!");
    delay(100);
  }
}

▲1 - 1. LCD : 문자 이동, 초 출력, 깜빡이기 / 코드

 

 

▲1 - 2. LCD : 문자 왼쪽으로 이동

 

▲1 - 3. LCD : 문자 왕복 이동

 

▲1 - 4. LCD : 초 출력

 

▲1 - 5. LCD : 깜빡이기

 

 

 - LCD : 입력한 문자 출력 -

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2); // 안되면 0x3F로 시도해본다.
//LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0,0);
}

void loop()
{
  while(Serial.available()) {
    lcd.write(Serial.read());
//    lcd.print(Serial.read()); // 아스키 코드로 출력되므로 write 메서드를 쓴다.
  }
}

▲2 - 1. LCD : 입력한 문자 출 / 코드

 

▲2 - 2. LCD : 입력한 문자 출력 / 작동 영상

 

 

 - LCD : 초음파 센서 연동, 거리 출력 -

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

int trig = 12;
int echo = 13;

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2); // 안되면 0x3F로 시도해본다.
//LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup() {
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0,0);
  
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);

  int duration = pulseIn(echo, HIGH);
  int distance = (duration/2) / 29.1;

  Serial.print(distance);
  Serial.println("cm");
  delay(100);

  if(distance > 0 && distance <= 50) {
    lcd.print(distance);
    lcd.print("cm");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
  }
}

▲3 - 1. LCD : 초음파 센서 연동, 거리 출력 / 코드

 

▲3 - 2. LCD :  초음파 센서 연동, 거리 출력 / 작동 영상

 

 

 - 블루투스 : 모듈 연결, 설정 -

// 시리얼모니터 열고
// AT 엔터 -> 응답 OK
// AT+NAMEXXXXXX -> 응답 OKsetname : 이름변경
// AT+PIN1234 -> 응답 OKsetPIN : 비밀번호변경
// AT+BAUD4 ->   응답 OK9600 : 통신속도변경 
//               1 -> 1200  2 -> 2400  3 -> 4800  4 -> 9600  5 ->19200  6 -> 38400  7 -> 57600  8 -> 115200
// AT+ROLE=S ->  응답 OK+ROLE:S   =>   M: Master S: Slave (기본 SLAVE 변경안해줘도 됨)

#include <SoftwareSerial.h>

//우노보드의 RX TX 지정
SoftwareSerial bluetooth(10, 11);   // bluetooth(RX, TX)

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

void loop()
{
  if (bluetooth.available()) 
  {
    Serial.write(bluetooth.read());
  }

  if (Serial.available()) 
  {
    bluetooth.write(Serial.read());
  }
}

▲4 - 1. 블루투스 : 모듈 연결, 설정 / 코드

 

▲4 - 2 : 블루투스 : 모듈 연결 사진

 

▲4 - 3. 블루투스 :  모듈 연결, 설정 / 시리얼 모니터

 

▲4 - 4. 블루투스 : 스마트폰에서 검색된 모듈 ASDF

 

 

 - 블루투스 : 모듈 연결, 설정 -

#include <SoftwareSerial.h>    
SoftwareSerial BTSerial(10, 11);
 
int red = 7;
int green = 5;
 
void setup() {
  BTSerial.begin(9600);
  pinMode(red, OUTPUT); 
  pinMode(green, OUTPUT);

}
 
void loop() {
  if(BTSerial.available())  
  {
    char bt;                
    bt = BTSerial.read();   
    if(bt == 'a')              
      digitalWrite(red, HIGH); 
    if(bt == 'b')
      digitalWrite(green, HIGH);
    if(bt == 'c')
      digitalWrite(red, LOW);
    if(bt == 'd')
      digitalWrite(green, LOW);
  }
}

▲5 - 1. 블루투스 : 원격으로 LED 켜기 / 코드

 

▲5 - 2. 블루투스 :  원격으로 LED 켜기 / 모바일 터미널 화면

 - 플레이 스토어의 아두이노 - 블루투스 컨트롤 애플리케이션을 이용한다.

 

▲5 - 3. 블루투스 :  원격으로 LED 켜기 / 작동 사진

반응형