BASIC4MCU | 질문게시판 | 답변 : 아두이노 블루투스 관련 질문입니다.
페이지 정보
작성자 master 작성일2023-02-21 18:41 조회2,045회 댓글0건본문
소프트웨어시리얼은 동시 수신은 1개만 가능합니다.
동시 수신해야 한다면 아두이노 메가를 사용하세요
//
#include <SoftwareSerial.h>
SoftwareSerial BTSerial( 4, 5);
SoftwareSerial mySerial(13,11);
//
unsigned char Send_data[4]={0x11,0x01,0x01,0xED};
unsigned char Receive_Buff[50];
unsigned char recv_cnt = 0;
unsigned int PPM_Value;
unsigned long t,t1;
//
void Send_CMD(void){
unsigned int i;
for(i=0;i<4;i++){ mySerial.write(Send_data[i]); delay(1); }
}
//
unsigned char Checksum_cal(void){
unsigned char count, SUM=0;
for(count=0;count<7;count++){ SUM+=Receive_Buff[count]; }
return 256-SUM;
}
//
void setup(){
pinMode(13,INPUT); pinMode(11,OUTPUT);
Serial.begin(9600);
BTSerial.begin(9600);
mySerial.begin(9600);
BTSerial.listen(); // 소프트웨어시리얼을 블루투스로 지정
}
//
void loop(){
if(BTSerial.available()){ byte data = BTSerial.read(); Serial.write(data); }
//
if(Serial.available()){ byte data = Serial.read(); BTSerial.write(data); }
//------------------
t=millis();
if(t-t1>=10000){ t1=t; // 10초마다 센서를 읽음
mySerial.listen(); // 소프트웨어시리얼을 센서로 변경
delay(100);
BTSerial.listen();
Send_CMD(); Serial.print("Sending...");
delay(1000); // 1초 이내에 응답이 온다고 가정
recv_cnt=0;
while(mySerial.available()){ Receive_Buff[recv_cnt++] = mySerial.read(); }
if(Checksum_cal()== Receive_Buff[7]){
PPM_Value = Receive_Buff[3]<<8 | Receive_Buff[4];
Serial.write(" PPM : "); Serial.println(PPM_Value);
}
else{ Serial.write("CHECKSUM Error"); }
//
BTSerial.listen(); // 소프트웨어시리얼을 블루투스로 재지정
}
}
댓글 0
조회수 2,045등록된 댓글이 없습니다.