BASIC4MCU | 질문게시판 | MEGA보드와 LiDAR, BT 오류 질문입니다.
페이지 정보
작성자 맹균 작성일2023-10-30 22:45 조회527회 댓글1건본문
#include <TFMPlus.h> // TFMini Plus 라이브러리 v1.5.0 포함
#include <SoftwareSerial.h> // 블루투스
TFMPlus tfmP; // TFMini Plus 객체 생성
#include "printf.h" // Intel 기반 아두이노를 지원하도록 수정됨
SoftwareSerial bluetoothSerial(10, 11); // 블루투스 모듈의 RX와 TX 핀을 정의
int16_t tfDist = 0; // 물체까지의 거리 (센티미터)
int16_t tfFlux = 0; // 반환 신호의 강도 또는 품질
int16_t tfTemp = 0; // 리다 센서 칩의 내부 온도
void setup()
{
bluetoothSerial.begin(9600);
Serial.begin(115200); // 터미널 시리얼 포트 초기화
delay(20); // 포트가 초기화되기 위한 시간 제공
printf_begin(); // printf 초기화.
printf("\r\nTFMPlus on"); // '안녕하세요' 출력
Serial2.begin(115200); // TFMPlus 장치 시리얼 포트 초기화
delay(20); // 포트가 초기화되기 위한 시간 제공
tfmP.begin(&Serial2); // 장치 라이브러리 객체 초기화 및...
// 장치 시리얼 포트를 객체로 전달.
// pinMode(ledPin, OUTPUT); // 31번 핀을 출력 핀으로 설정합니다.
printf("소프트 리셋: "); // 시리얼 포트 리셋
if (tfmP.sendCommand(SOFT_RESET, 0))
{
printf("성공.\r\n");
}
else
tfmP.printReply();
delay(500); // 시스템 리셋이 완료될 충분한 시간을 줄 수 있도록 추가
printf("펌웨어 버전: ");
if (tfmP.sendCommand(GET_FIRMWARE_VERSION, 0))
{
printf("%1u.", tfmP.version[0]); // 세 개의 숫자를 '.'로 구분하여 출력
printf("%1u.", tfmP.version[1]);
printf("%1u\r\n", tfmP.version[2]);
}
else
tfmP.printReply();
printf("데이터 프레임 속도: ");// - - 데이터 프레임 속도를 20Hz로 설정 - - - - - - - -
if (tfmP.sendCommand(SET_FRAME_RATE, FRAME_20))
{
printf("%2uHz.\r\n", FRAME_20);
}
else
tfmP.printReply();
delay(500);
}
// 변수 초기화
// 'getData' 함수를 사용하여 장치 데이터를 전달합니다.
void loop()
{
delay(50); // 20Hz 데이터 프레임 속도와 일치하는 루프 지연
if (tfmP.getData(tfDist, tfFlux, tfTemp)) // 장치에서 데이터 가져오기
{
printf("거리:%04icm ", tfDist); // 거리 출력,
printf("강도:%05i ", tfFlux); // 신호 강도/품질 출력,
printf("온도:%2i%s", tfTemp, "C"); // 온도 출력,
printf("\r\n"); // 줄 바꿈.
// 30cm 이하에서 블루투스 송신
if (tfDist <= 30)
{
bluetoothSerial.print("R");
}
else
{
bluetoothSerial.print("G");
}
}
else // 명령이 실패하면...
{
tfmP.printFrame(); // 오류 및 HEX 데이터 출력
}
}
찾아주신 라이다 예제 코드에 일정 조건에 만족할때 블루투스로 문자 R, G를 전송하는 코드입니다.. 블루투스와 다른 기기끼리 페어링도 되는데
조건에 따른 "R", "G"가 전송되질 않습니다...
댓글 1
조회수 527master님의 댓글
master 작성일
// 30cm 이하에서 블루투스 송신
if (tfDist <= 30){
bluetoothSerial.print("R");
printf("R");
}
else{
bluetoothSerial.print("G");
printf("G");
}
}
else{ // 명령이 실패하면...
tfmP.printFrame(); // 오류 및 HEX 데이터 출력
printf("Err");
}
}
시리얼모니터에 출력해서 어느 조건이 실행 되는지 체크해보세요