0. 준비
앞서 아래 글을 통해 통신할 안드로이드를 개발하고
https://waytocse.tistory.com/73
그 다음 이 글의 과정을 진행해야한다.
그리고 이 글은 아두이노 우노를 기준으로 작성됐다.
아두이노 메가에서 작동하는 것은 아래 링크의 문제해결3번을 참고하면서 이 글을 따라하면 된다.
https://waytocse.tistory.com/77
1. 아두이노 블루투스 통신 회로도
RX를 5번, TX를 4번핀에 연결한다.
GND를 연결하고 VCC를 3.3V에 연결한다.
2. 아두이노 블루투스 통신 코드
각 코드에 대한 설명은 주석으로 달아놨다.
앞서 안드로이드 개발에서 값을 전송할때 값 앞에 "JACKPOT"을
꼭 붙여서 전송했던 것을 기억하면 코드를 이해하는 것이 쉬울 것이다.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(4,5); //TX, RX
String byteToString = "";
int inputValue[3] = {1,2,3};
bool commandActive = false;
int inputCount = 0;
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop() {
while(BTSerial.available()) {//안드로이드 앱에서 아두이노로 데이터 전송
byte data = BTSerial.read();//바이트 단위로 읽힘
//JACKPOT의 J가 들어오면 byteToString 값 초기화
if(data == 'J'){
byteToString = "";
}
byteToString += char(data); //char로 형변환 안하면 숫자만 저장됨
//커맨드 들어옴
if(byteToString == "JACKPOT"){
Serial.println(byteToString);
commandActive = true;
byteToString = "";
continue;
}
//JACKPOT 커맨드 받고 뒤 값 3개 받는 과정
if(commandActive){
inputValue[inputCount] = data - 48;//어차피 숫자라 형변환 필요 없음, 아스키코드 형태라서 -48이나 -'0'해야함
inputCount += 1;
}
//값 3개 다 받았으면 출력
if(inputCount == 3){
inputCount = 0;
commandActive = false;
for(int i=0; i<3; i++){
Serial.println(inputValue[i]);
}
}
}
}
3. 결과
안드로이드에서 블루투스 모듈을 scan하고 연결한 후 작동시켜
시리얼 모니터로 출력되는 결과를 보면
다음과 같이 통신된 값이 출력이 잘 되는 것을 확인 할 수 있다.
'컴퓨터 > 아두이노 라즈베리파이' 카테고리의 다른 글
[아두이노] Uno에서 Adafruit_SSD1306와 SoftwareSerial 동시 사용 불가(OLED와 Bluetooth) (0) | 2021.12.03 |
---|---|
[아두이노] 안드로이드와 BLE(Bluetooth4) 통신3 - 앱으로 데이터 전송 (0) | 2021.12.02 |
[아두이노] 안드로이드와 BLE(Bluetooth4) 통신1 - 안드로이드 개발 (0) | 2021.11.30 |
[아두이노] OLED에 온습도 센서값 출력하기 (0) | 2021.11.15 |
[아두이노] OLED (0) | 2021.11.15 |
댓글