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;
}
'아두이노' 카테고리의 다른 글
| 파이썬으로 아두이노 RGB LED 제어하기 (0) | 2023.07.31 |
|---|---|
| 아두이노 종합 (0) | 2023.07.31 |
| 아두이노 시리얼통신으로 제어하기 (0) | 2023.07.25 |
| 아두이노 온도 습도 값을 읽어 불쾌지수 표시 (0) | 2023.07.24 |
| 아누이노 CDS조도센서 / 가변저항 + 전등 (0) | 2023.07.24 |