정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 블루투스를 통한 안드로이드폰 화면에 측정값 띄우기
정해종 | 2016-10-30

제가 하려고하는게 3축 가속도센서 asxl335를 이용하여 각도를 일정범위 지정하여 그 범위안에 들어갔을때 숫자가1씩 늘어나고

그숫자를 블루투스를 통한 앱인벤터를 이용하여 안드로이드폰 화면에 숫자가 1씩증가하는걸 만드려합니다

아두이노와 안드로이드간의 채팅기능을 이용해서 하려고하는데요


int speakerPin = 9;

int count;

float x,y,z;
#include

SoftwareSerial mySerial(2, 3); // RX, TX

 


void setup(){

count=0;

Serial.begin(9600);
mySerial.begin(9600); /// 블루투스 모듈 초기화

}

 


void loop(){

x = analogRead(0);

y = analogRead(1);

z = analogRead(2);

 


// 센서에서 읽은 값을 -1~1 사이의 범위가 좁은 값으로 변환하기 위해

// 실수형으로 변수 선언하고 스케치 맨 하단 mapinfloat 함수를 호출을 통해 변환

// 그리고-1~ 1사이를 벗어나지 않도록 constrain처리

float xsintheta =constrain(mapinfloat(x,268,406,-1,1),-1,1);

float ysintheta =constrain(mapinfloat(y,267,406,-1,1),-1,1);

float zsintheta =constrain(mapinfloat(z,275,412,-1,1),-1,1);

// -1~1 사이의 값을 각도 값으로변환

float xtheta = asin(xsintheta)*180/PI;

float ytheta = asin(ysintheta)*180/PI;

float ztheta = asin(zsintheta)*180/PI;

 

Serial.print("x: ");

Serial.print(xtheta );

Serial.print(" ");

Serial.print("y: ");

Serial.print(ytheta);

Serial.print(" ");

Serial.print("z: ");

Serial.println(ztheta);

 


if(xtheta>=-25&&xtheta<=-15)

{

tone(speakerPin, 440,1000);

count++;

Serial.println(count);

delay(3000);

};
if (mySerial.available())
Serial.write(mySerial.read());

///시리얼모니터-->아두이노-->블루투스 모듈 시리얼정보를 블루투스시리얼에 입력
if (Serial.available())
mySerial.write(Serial.read());

 


}

 


float mapinfloat(float x, float iMin, float iMax,float oMin, float oMax) {

return (x - iMin) * (oMax - oMin) / (iMax - iMin) + oMin;

}

제가 사용한 소스입니다. 블루투스부분을 어떻게 고쳐야 숫자카운트가 핸드폰화면에 나타날까요?

그리고 블루투스 코드쪽만 입력했을때는 아두이노와 안드로이드간의 대화하는데 있어 문제가 없었는데

가속도센서를 추가하니 위에보이는 xyz축의 각도데이터가 빠르게 진행되다보니 대화하는데있어 문제가 있는거같습니다

이부분도 어찌해야하는지 궁금합니다. 제발 답변 부탁드립니다.ㅜㅜ! 

앱인벤터를 이용한 안드로이드와 아두이노의 채팅되는것을 이용하여 데이터를 받으려합니다

이전글   |    라즈베리파이 기상청 LCD질문좀 하겠습니다.... 2016-10-28
다음글   |    런던시티 키트 회로 연결 2016-10-30