BASIC4MCU | 질문게시판 | hm-10 다중연결 질문있습니다.
페이지 정보
작성자 뉴비에오 작성일2023-03-14 17:38 조회2,972회 댓글1건첨부파일
본문
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=speedprinse&logNo=221226409238
여기의 코드를 보고 hm-10을 마스터, 슬레이브를 설정하고 비콘으로 사용하여 RSSI값을 구했는데요. 마스터1개에 슬레이브3개를 사용하여 자율주행로봇을 움직이려고 하고있습니다.
그런데 다중연결이 안되서 밑에 있는 코드를 사용해봤는데 RSSI값이 528로 고정되서 제대로 구해지지 않네요. 어째서 그런지 알려주실수있으신가요?
#include <SoftwareSerial.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySerial(4, 5); // RX, TX
DFRobotDFPlayerMini myDFPlayer; //DEFINE DFPLAYER CLASS
String temp = "TEST1"; //TEST STRING
byte data; //RECEIVE MYSERIAL'S DATA
byte Buffer[400]; //SAVE DATAS
int i = 0; //USING BUFFER'S INDEX
char beaconA[2]; //SAVE BEACON A RSSI IN CHAR
char beaconB[2]; //SAVE BEACON B RSSI IN CHAR
char beaconC[2]; //SAVE BEACON C RSSI IN CHAR
char beaconD[2]; //SAVE BEACON D RSSI IN CHAR
int rssi_final[4]; //SAVE BEACONS RSSI IN INT
int musicOneFlag = 0;
int musicTwoFlag = 0;
int musicThreeFlag = 0;
int musicFourFlag = 0;
void mySerialListen();
void SerialWrite();
void timeCheck();
unsigned long prev = 0; //FOR TIME CHECK
/*
void musicOne(){ //IF BEACON A IS BIGGER, MUSIC 1 START!
if(rssi_final[0] > 60){ //SAMPLE CODE
if(musicOneFlag == 0){
myDFPlayer.play(1);
musicOneFlag = 1;
}
}
else if(rssi_final[0] < 60 && rssi_final[0] > 0){
myDFPlayer.stop();
musicOneFlag = 0;
}
}//END OF MUSICONE()
void musicTwo(){ //IF BEACON B IS BIGGER, MUSIC 2 START!
if(rssi_final[1] > 60){ //SAMPLE CODE
if(musicTwoFlag == 0){
myDFPlayer.play(2);
musicTwoFlag = 1;
}
}
else if(rssi_final[1] < 60 && rssi_final[1] > 0){
myDFPlayer.stop();
musicTwoFlag = 0;
}
}//END OF MUSICTWO()
void musicThree(){ //IF BEACON C IS BIGGER, MUSIC 3 START!
if(rssi_final[2] > 60){ //SAMPLE CODE
if(musicThreeFlag == 0){
myDFPlayer.play(3);
musicThreeFlag = 1;
}
}
else if(rssi_final[2] < 60 && rssi_final[2] > 0){
myDFPlayer.stop();
musicThreeFlag = 0;
}
}//END OF MUSICTHREE()
void musicFour(){ //IF BEACON D IS BIGGER, MUSIC 4 START!
if(rssi_final[3] > 60){ //SAMPLE CODE
if(musicFourFlag == 0){
myDFPlayer.play(4);
musicFourFlag = 1;
}
}
else if(rssi_final[3] < 60 && rssi_final[3] > 0){
myDFPlayer.stop();
musicFourFlag = 0;
}
}//END OF MUSICFOUR()
*/
void printRssi(){ //CHECK AND PRINT RSSI ARRAY
Serial.print("BeaconA: ");
Serial.print(rssi_final[0]); //BEACON A
Serial.print(" BeaconB: ");
Serial.print(rssi_final[1]); //BEACON B
Serial.print(" BeaconC: ");
Serial.print(rssi_final[2]); //BEACON C
Serial.print(" BeaconD: ");
Serial.println(rssi_final[3]);//BEACON D
}//END OF PRINTRSSI()
void charToInt(){//TYPE CASTING CHAR TO INT
rssi_final[0] = (beaconA[0]-'0')*10 + (beaconA[1]-'0');
rssi_final[1] = (beaconB[0]-'0')*10 + (beaconB[1]-'0');
rssi_final[2] = (beaconC[0]-'0')*10 + (beaconC[1]-'0');
rssi_final[3] = (beaconD[0]-'0')*10 + (beaconD[1]-'0');
}//END OF CHARTOINT()
void runs(){ //START RUNS()
mySerial.write("AT+DISC?"); //수정해야됨
i = 0;
//SAVE BUFFER START MEMORY ADDRESS
int buffer_address = (int)Buffer;
//TYPE CASTING BYTE TO STRING
String test = String((char*)Buffer);
//GET MAC ADDRESS'S POSITION
int positions = strstr((char*)Buffer, "4C24985A30D5");
int positions2= strstr((char*)Buffer, "5051A9FD2072");
int positions3= strstr((char*)Buffer, "5051A97AF41E");
int positions4= strstr((char*)Buffer, "5051A9FEF618");
//GET RSSI'S POSITION
int rssi_A = (positions - buffer_address) + 22;
int rssi_B = (positions2 - buffer_address) + 22;
int rssi_C = (positions3 - buffer_address) + 22;
int rssi_D = (positions4 - buffer_address) + 22;
//ASSIGN CHAR ARRAY WITH RSSI
beaconA[0] = test[rssi_A];
beaconA[1] = test[rssi_A+1];
beaconB[0] = test[rssi_B];
beaconB[1] = test[rssi_B+1];
beaconC[0] = test[rssi_C];
beaconC[1] = test[rssi_C+1];
beaconD[0] = test[rssi_D];
beaconD[1] = test[rssi_D+1];
//TYPE CASTING CHAR TO INT
charToInt();
//PRINT RSSI_FINAL ARRAY
printRssi();
/*
//IF KOCOA IS BIGGER THAN 60, MUSIC START!
if(rssi_final[0] > 70 && rssi_final[1] < 70 && rssi_final[2] < 70 & rssi_final[3] < 70){
musicOneFlag++;
musicTwoFlag = 0;
musicThreeFlag = 0;
musicFourFlag = 0;
}
else if(rssi_final[0] < 70 && rssi_final[1] > 70 && rssi_final[2] < 70 & rssi_final[3] < 70){
musicOneFlag = 0;
musicTwoFlag++;
musicThreeFlag = 0;
musicFourFlag = 0;
}
else if(rssi_final[0] < 70 && rssi_final[1] < 70 && rssi_final[2] > 70 & rssi_final[3] < 70){
musicOneFlag = 0;
musicTwoFlag = 0;
musicThreeFlag++;
musicFourFlag = 0;
}
else if(rssi_final[0] < 70 && rssi_final[1] < 70 && rssi_final[2] < 70 & rssi_final[3] > 70){
musicOneFlag = 0;
musicTwoFlag = 0;
musicThreeFlag = 0;
musicFourFlag++;
}
else{
myDFPlayer.stop();
musicOneFlag = 0;
musicTwoFlag = 0;
musicThreeFlag = 0;
musicFourFlag = 0;
}
if(musicOneFlag == 2){
myDFPlayer.play(1);
}
else if(musicTwoFlag == 2){
myDFPlayer.play(2);
}
else if(musicThreeFlag == 2){
myDFPlayer.play(3);
}
else if(musicFourFlag == 2){
myDFPlayer.play(4);
}
else{
}
*/
//RESET BUFFER
}//END OF RUNS
void mySerialListen(){
//mySerial.listen();
if(mySerial.available()){
data = mySerial.read();
Buffer[i++] = data;
}
}
void SerialWrite(){
if(Serial.available()){
mySerial.write(Serial.read());
}
}
void timeCheck(){
unsigned long currents = millis();
if(currents - prev >= 2500){
prev = currents;
runs();
}
}
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
//mySoftwareSerial.begin(9600);
// myDFPlayer.begin(Serial);
/*
if (!myDFPlayer.begin(Serial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
myDFPlayer.volume(30); //VOLUME SETTING
*/
}
void loop() // START LOOP
{
timeCheck();
mySerialListen();
SerialWrite();
}//END OF LOOP
댓글 1
조회수 2,972master님의 댓글
master 작성일hm-10을 만져본 적이 없으니 디테일한 것을 제공해드리지 못합니다.