본문 바로가기
아두이노

아두이노 피에조부저/LCD/버튼 시리얼통신과 제어하기

by ADELA_J 2023. 7. 26.

1. 

<시리얼 통신으로 부저 주파수 입력받아서 소수점형으로 변환하기>

더보기
void setup(){
  Serial.begin(9600);
}
 
void loop(){
  if (Serial.available()>0)
  {
    String strRead = Serial.readStringUntil('\n');
    if (strRead.indexOf("BUZZER=") != -1 )
    {
      float bzFreq = strRead.substring(7, strRead.length()).toFloat();
      Serial.print("Freq:");
      Serial.println(bzFreq);
    }
  }
}

▶ 시리얼모니터에서 입력을 받고 소수점 형태로 변환됨.

 

2.

<시리얼통신에서 부저 주파수 입력받아서 피에조부저에 주파수 출력하기>

더보기
#define PIEZO_BUZZER 3
 
void setup(){
  Serial.begin(9600);
}
 
void loop(){
  if (Serial.available()>0)
  {
    String strRead = Serial.readStringUntil('\n');
    if (strRead.indexOf("BUZZER=") != -1 )
    {
      float bzFreq = strRead.substring(7, strRead.length()).toFloat();
 
      setBuzzer(bzFreq);
    }
  }
}
 
void setBuzzer(int freq)
{
  if (freq > 31)
  {
    tone(PIEZO_BUZZER, freq);
    Serial.println("OKBUZZER");
  }
  else
  {
    noTone(PIEZO_BUZZER);
    Serial.println("OKBUZZER");
  }
}

▶ 31이하가 들어오면 피에조부저음을 멈추고 그 이상이 들어오면 부저음이 울리게함.

15행 : setBuzzer 함수 이용해 주파수를 출력. (if문이 True일때)

20~32행 : setBuzzer 함수를 정의함(31이 넘으면 True)아니면 false 

 

<LCD에 숫자 출력하기>

 

1. 

시리얼통신으로 LCD 명령어 입력받아 소수점형으로 변환하기

더보기
void setup(){
  Serial.begin(9600);
}
 
void loop(){
  if (Serial.available()>0)
  {
    String strRead = Serial.readStringUntil('\n');
    if (strRead.indexOf("LCD=") != -1 )
    {
      float fndValue = strRead.substring(4, strRead.length()).toFloat();
 
      Serial.print("LCD:");
      Serial.println(fndValue);
    }
  }
}

 

 

 

2. 시리얼 통신으로 명령어 입력받아 LCD에 표시하기

 

더보기

 

#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup(){
  Serial.begin(9600);
  lcd.begin();    //LCD 사용시작
  lcd.setCursor(0,0);   //텍스트가 LCD에 나타날 위치
  lcd.print("Hello, world");
  delay(2000);
  lcd.clear();
}
 
void loop(){
  if (Serial.available()>0)
  {
    String strRead = Serial.readStringUntil('\n');
    if (strRead.indexOf("LCD=") != -1 )
    {
      float lcdValue = strRead.substring(4, strRead.length()).toFloat();
 
      lcd.setCursor(2,0);   //커서를 5열 0행에 가져다놓기
      lcd.print("LCD value is");
      lcd.setCursor(5,1);
      lcd.print(lcdValue);
      Serial.println("OKLCD");
    }
  }
}

 

<버튼이 눌리면 값 전송하기>

1. 버튼이 눌리면 시리얼 통신으로 버튼 값 전송하기

더보기
#define BUTTON_1 4
#define BUTTON_2 7
 
void setup(){
  Serial.begin(9600);
  pinMode(BUTTON_1, INPUT);
  pinMode(BUTTON_2, INPUT);
}
 
void loop(){
  if (btn1() == 1) Serial.println("BUTTON1=CLICK");
  if (btn2() == 1) Serial.println("BUTTON2=CLICK");
}
 
int btn1()
{
  static int currBtn = 0;
  static int prevBtn = 0;
 
  currBtn = digitalRead(BUTTON_1);
 
  if (currBtn != prevBtn)
  {
    prevBtn = currBtn;
    if (currBtn == 1)
    {
      return 1;
    }
    delay(50);
  }
  return 0;
}
 
int btn2()
{
  static int currBtn = 0;
  static int prevBtn = 0;
 
  currBtn = digitalRead(BUTTON_2);
 
  if(currBtn != prevBtn)
  {
    prevBtn = currBtn;
    if (currBtn == 1)
    {
      return 1;
    }
    delay(50);
  }
  return 0;
}

<버튼 눌러서 결과가 LCD에도 뜨게 하기>

더보기
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
#define BUTTON_1 4
#define BUTTON_2 7
 
void setup(){
  Serial.begin(9600);
  pinMode(BUTTON_1, INPUT);
  pinMode(BUTTON_2, INPUT);
  lcd.begin();    //LCD 사용시작
  lcd.setCursor(0,0);   //텍스트가 LCD에 나타날 위치
  lcd.print("Hello, world");
  delay(2000);
  lcd.clear();
}
 
void loop(){
  if (btn1() == 1) {
    Serial.println("BUTTON1=CLICK");
    lcd.setCursor(1,1);
    lcd.print("BUTTON1=CLICK");
  }
  if (btn2() == 1) {
    Serial.println("BUTTON2=CLICK");
        lcd.setCursor(1,1);
    lcd.print("BUTTON2=CLICK");
  }
}
 
int btn1()
{
  static int currBtn = 0;
  static int prevBtn = 0;
 
  currBtn = digitalRead(BUTTON_1);
 
  if (currBtn != prevBtn)
  {
    prevBtn = currBtn;
    if (currBtn == 1)
    {
      return 1;
    }
    delay(50);
  }
  return 0;
}
 
int btn2()
{
  static int currBtn = 0;
  static int prevBtn = 0;
 
  currBtn = digitalRead(BUTTON_2);
 
  if(currBtn != prevBtn)
  {
    prevBtn = currBtn;
    if (currBtn == 1)
    {
      return 1;
    }
    delay(50);
  }
  return 0;
}