BASIC4MCU | 질문게시판 | 아두이노 간 블루투스
페이지 정보
작성자 비공개 작성일2018-06-25 15:23 조회7,679회 댓글0건본문
아두이노 간 블루투스 무선 통신으로 PC쪽 아두이노에서 제어 문자를 보내면 센서부쪽 아두이노에서 그에 맞는 데이터를 받아서, 다시 PC쪽 아두이노 시리얼모니터에서 확인하려고 합니다.
(PC)아두이노1 -----BT----- 아두이노2(센서)
아두이노 1에서 q (start) 를 아두이노 2로 보내면
각 센서에서 받아들이는 데이터값을 다시 받고
w (stop) 를 아두이노 2로 보내면
0 값을 받으려고 합니다.
목적))
q를 한번 보내면 (w 를 누르기 전까지) 계속 데이터 값을 받다가
마찬가지로, w를 한번 누르면 (q를 누르기 전까지) 0 을 계속 받았으면 좋겠는데..
현재))
지금 상태는 q와 w를 한번 누를때마다 한번씩만 값이 보내져요 ㅠㅠ
혹시 방법이 없을까요..? ㅠ_ㅠ
<<아두이노 2 코드>>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);
int lm35Pin=A0;
const int FSR_PIN=A1; // 압력센서
//
const float VCC=4.98;
const float R_DIV=3230.0;
//
int temperature,reading;
int fsrADC,yn=0,yn_1=0; // 온도센서 필터코드
unsigned long prev_time=0,current_time;
float fsrV,fsrR,force,fsrG;
//
void setup(){
Serial.begin(9600);
BTSerial.begin(9600);
}
//
void loop(){
TEMP(); // LM35(온도센서)
FSR(); // MFSR-R18(압력센서)
byte data;
data = BTSerial.read();
if(data=='q'){
BTSerial.print("s"); BTSerial.print(temperature+19);
BTSerial.print("a"); BTSerial.println(int(force/100));
delay(250);
}
if(data=='w'){
BTSerial.print("s"); BTSerial.print(0);
BTSerial.print("a"); BTSerial.println(0);
delay(250);
}
}
//
void TEMP(){
current_time=millis();
//
if((current_time-prev_time)>1000){ prev_time=current_time;
analogReference(INTERNAL); delay(1);
reading=analogRead(lm35Pin); reading=analogRead(lm35Pin);
temperature=reading/9.31;
yn=0.99*yn_1+0.01*temperature;
yn_1=yn;
}
}
//
void FSR(){
analogReference(DEFAULT); delay(1);
fsrADC=analogRead(FSR_PIN); fsrADC=analogRead(FSR_PIN);
fsrV=fsrADC*VCC/1023.0;
fsrR=R_DIV*(VCC/fsrV-1.0);
fsrG=1.0/fsrR;
//
if(fsrR<=600){ force=(fsrG-0.00075)/0.00000032639; }
else { force=fsrG/0.000000642857; }
}
<<아두이노 1>>
#include <SoftwareSerial.h>
SoftwareSerial sendSerial(2, 3);
void setup()
{
Serial.begin(9600);
sendSerial.begin(9600);
}
void loop()
{
if (Serial.available()) {
sendSerial.write(Serial.read());
}
if (sendSerial.available()) {
Serial.write(sendSerial.read());
}
}
댓글 0
조회수 7,679등록된 댓글이 없습니다.