BASIC4MCU | 질문게시판 | 아두이노간 블루투스 질문 드립니다.
페이지 정보
작성자 흐규흐규 작성일2022-06-10 19:48 조회2,834회 댓글8건본문
마스터 측에서 DHT11센서와 MQ-4센서로 값을 읽어들여 일정 수치가 넘으면 블루투스로 데이터를 보내 슬레이브 측에서 팬을 돌리는것을 구현하고자 합니다. 블루투스 연결까지는 되었으나 블루투스로 보내는 값이 -1로 고정되어 진행을 못하고 있습니다. 코드에서 잘못된 부분이 있나 한번 도움을 요청해 봅니다.
센서값을 읽은후 데이터를 보내는 아두이노 측입니다.
#include <SoftwareSerial.h>
int BT_RXD = 9;
int BT_TXD = 10;
SoftwareSerial BTSerial(BT_TXD, BT_RXD);
int ENpin = 8;
int i ;
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define Gaspin A0
DHT dht (DHTPIN, DHTTYPE);
void setup() {
BTSerial.begin(38400);
Serial.begin(9600);
dht.begin();
pinMode(DHTPIN, INPUT);
pinMode(Gaspin, INPUT);
pinMode(ENpin, OUTPUT);
digitalWrite(ENpin, HIGH);
}
void loop() {
int value = analogRead(A0);
float humi, temp, gas;
temp = dht.readTemperature();
humi = dht.readHumidity();
gas = value;
Serial.println(temp);
Serial.println(humi);
Serial.println(gas);
if(humi>50){
int i = 0;
Serial.println(i);
if (Serial.available()){
BTSerial.write(Serial.read());
}
}
else if (humi<50){
int i = 1;
Serial.println(i);
if (Serial.available()){
BTSerial.write(Serial.read());
}
}
else if(gas>250){
int i = 2;
Serial.println(i);
if (Serial.available()){
BTSerial.write(Serial.read());
}
}
else if (gas<200){
int i = 3;
Serial.println(i);
if (Serial.available()){
BTSerial.write(i);
}
}
Serial.println(BTSerial.read());
delay(1000);
}
-------------------------------------------------------------------------------------------------------------------------------------
신호를 받아들여 팬을 돌리는 아두이노측 입니다.
#include <SoftwareSerial.h> // 소프트웨어 시리얼 라이브러리 불러옴
#define relay 7
int BT_RXD = 2;
int BT_TXD = 3;
SoftwareSerial BTSerial(BT_RXD, BT_TXD);
void setup(){
Serial.begin(9600);
BTSerial.begin(38400);
pinMode(relay,OUTPUT);
}
void loop(){
if(BTSerial.available()){
int data = BTSerial.read();
if(data =='0' || '2' ){
digitalWrite(relay,HIGH);
}
else if(data =='1' || '3'){
digitalWrite(relay,LOW);
}
}
Serial.println(BTSerial.read());
delay(1000);
}
댓글 8
조회수 2,834master님의 댓글
master 작성일
void loop() {
delay(1000);
int value = analogRead(A0);
float humi, temp, gas;
temp = dht.readTemperature();
humi = dht.readHumidity();
gas = value;
Serial.println(temp); Serial.println(humi); Serial.println(gas);
//
if(humi>50){ Serial.println(0); BTSerial.write('0'); }
else { Serial.println(1); BTSerial.write('1'); }
//
if(gas>250){ Serial.println(2); BTSerial.write('2'); }
if(gas<200){ Serial.println(3); BTSerial.write('3'); }
}
송신측 루프문
master님의 댓글
master 작성일
void loop(){
if(BTSerial.available()){
int data = BTSerial.read();
if(data=='0' || data=='2' ){ digitalWrite(relay,HIGH); Seria.write(data); Serial.println(); }
if(data=='1' || data=='3'){ digitalWrite(relay,LOW); Serial.write(data); Serial.println(); }
}
}
수신측 루프문
흐규흐규님의 댓글
흐규흐규 작성일동작이 안되서 Serial.println(BTSerial.read());를 루프문에 넣어보니 여전히 -1의 값만 받아들이는데 뭐가 문제일 수 있을까요?
master님의 댓글
master
습도로 키고, 가스로 끄고 <-- 이래도 안보일 수 있습니다.
보내는 곳이 0,2 둘 다 시리얼모니터에 나와야지 팬이가 켜지고
보내는 곳이 1,3 둘 다 시리얼모니터에 나와야지 팬이 꺼집니다.
보내는 곳에서 습도와 가스 두가지 조건으로 한꺼번에 조건식을 만드세요
master님의 댓글
master 작성일
void loop() {
delay(1000);
int value = analogRead(A0);
float humi, temp, gas;
temp = dht.readTemperature();
humi = dht.readHumidity();
gas = value;
Serial.println(temp); Serial.println(humi); Serial.println(gas);
//
if((humi>50)||(gas>250)){ Serial.println(1); BTSerial.print("1"); }
else { Serial.println(0); BTSerial.print("0"); }
}
송신측 루프문
//
void loop(){
if(BTSerial.available()){
int data = BTSerial.read(); Seria.write(data);
if(data=='1'){ digitalWrite(relay,HIGH); }
if(data=='0'){ digitalWrite(relay,LOW); }
}
}
수신측 루프문
흐규흐규님의 댓글
흐규흐규 작성일-1값이 계속 전송되고 읽어들이네요.. ㅜㅜ
흐규흐규님의 댓글
흐규흐규 작성일
수신측에
Serial.println(BTSerial.read())은 계속 -1값이 시리얼에 출력되고
Serial.println(BTSerial.println())은 2가 출력이 됩니다.
master님의 댓글
master
Serial.println(BTSerial.read())
이런 코드를 답변에서 작성해드린 적이 없습니다.