BASIC4MCU | 질문게시판 | dfplayer와 음성인식 모듈이 동시에 인식이 안되요
페이지 정보
작성자 tjqhd 작성일2022-12-09 12:40 조회216회 댓글3건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=22127
작성일
본문
#include <Arduino.h>#include "LedControl.h" // 도트 매트릭스 라이브러리#include <SoftwareSerial.h> // 소프트웨어 Serial 통신 라이브러리 사용#include <Mecha_VoiceRecognition.h> //음성인식 라이브러리#include "DFRobotDFPlayerMini.h"// 모듈과의 통신을 위한 SoftwareSerial 객체 생성.// 2번핀에 모듈의 Tx, 3번핀에 Rx가 연결됨.SoftwareSerial mySoftwareSerial(10, 11);SoftwareSerial mySerial(2, 3);DFRobotDFPlayerMini player;// voice 객체 생성// 이때 모듈의 UART 통신을 위해 앞서 생성한 uart_voice를 함께 전달Mecha_VoiceRecognition voice(&mySerial);// Din 핀을 12번, ClK핀을 11번 CS핀을 10번에 연결// 매트릭스는 1개를 사용 선언LedControl lc=LedControl(7,6,5,1);int voice_recogn=0;byte data[5][8]={// 무표정 이미지{B11111111,B10000001,B10100101,B10000001,B10000001,B10111101,B10000001,B11111111},// 웃는 표정 이미지{B11111111,B10000001,B10100101,B10000001,B10100101,B10111101,B10000001,B11111111},// 십자가 모양{B00011000,B00011000,B00011000,B11111111,B11111111,B00011000,B00011000,B00011000},// 하트 모양{B00000000,B01100110,B11111111,B11111111,B11111111,B01111110,B00111100,B00011000},// 동그란 웃는모양{B00111100,B01000010,B10100101,B10000001,B10100101,B10011001,B01000010,B00111100}};void setup() {// 디버그용 하드웨어 시리얼 통신 초기화Serial.begin(9600);mySoftwareSerial.begin(9600);mySerial.begin(9600); // 통신 속도 9600bps로 모듈과 시리얼 통신 시작lc.shutdown(0,false); // 0~3번까지 매트릭스 절전모드 해제lc.setIntensity(0,2); // 매트릭스의 밝기 선언 0~15의 수lc.clearDisplay(0); // 매트릭스 led를 초기화if (!player.begin(mySoftwareSerial)) { //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);}Serial.println(F("DFPlayer Mini online."));player.volume(30);// voice 객체 설정 및 초기화voice.setDebugOn(&Serial); // 디버깅 ON, 디버깅을 위한 통신 객체 전달voice.setGroup(VOICE_GROUP_1); // 인식에 사용할 그룹을 1로 설정voice.init(); // voice 객체 초기화voice.setMode(VOICE_MODE_RECOGNITION); // 모듈을 인식 모드로 설정}void loop() {// 모듈의 응답을 response 변수에 저장.// VOICE_InstructionTypeDef 자료형은 열거형으로, 아래 상태를 가짐.// VOICE_INSTRUCTION_1: 선택된 그룹의 1번 명령 인식됨// VOICE_INSTRUCTION_2: 선택된 그룹의 2번 명령 인식됨// VOICE_INSTRUCTION_3: 선택된 그룹의 3번 명령 인식됨// VOICE_INSTRUCTION_4: 선택된 그룹의 4번 명령 인식됨// VOICE_INSTRUCTION_5: 선택된 그룹의 5번 명령 인식됨// VOICE_INSTRUCTION_NOTHING: 아무 내용도 인식되지 않음// VOICE_INSTRUCTION_ERROR: 예외 발생VOICE_InstructionTypeDef response = voice.getInstruction();switch (response) {case VOICE_INSTRUCTION_1: // 1번 명령 인식됨.Serial.println("christmas");for(int j=0; j<8; j++){lc.setRow(0,j,data[0][j]); // 무표정 이미지 출력}player.playMp3Folder(1);player.enableLoop();break;case VOICE_INSTRUCTION_2: // 2번 명령 인식됨.Serial.println("santa");for(int j=0; j<8; j++){lc.setRow(0,j,data[1][j]); // 웃는 표정 이미지 출력}player.playMp3Folder(2);player.enableLoop();break;case VOICE_INSTRUCTION_3: // 3번 명령 인식됨.Serial.println("rodoulpu");for(int j=0; j<8; j++){lc.setRow(0,j,data[2][j]); // 십자가 모양 이미지 출력}player.playMp3Folder(3);player.enableLoop();break;case VOICE_INSTRUCTION_4: // 4번 명령 인식됨.Serial.println("goodnight");for(int j=0; j<8; j++){lc.setRow(0,j,B00000000); // 하트 모양 이미지 출력}player.sleep();break;case VOICE_INSTRUCTION_5: // 5번 명령 인식됨.Serial.println("wow");for(int j=0; j<8; j++){lc.setRow(0,j,data[4][j]); // 동그란 웃는 표정 이미지출력}player.playMp3Folder(player.readCurrentFileNumber()+3);player.enableLoop();break;case VOICE_INSTRUCTION_ERROR: // 에러 발생Serial.println("error");break;case VOICE_INSTRUCTION_NOTHING: // 명령 인식되지 않음// no data recievedbreak;}}현재 음성인식 모듈이랑 dfplayer를 동시에 사용중인데 dfplayer가 인식이 안되네요ㅜㅜdfplayer단독으로 사용할때는 잘 되는데 또 같이 사용하니 인식이 안됩니다ㅜㅜ저희가 음성인식을 사용해서 음성인식에 따른 음악을 재생하고자 하는것인데 잘 안되네요ㅜㅜ어떻게 해야 동시에 인식할 수 있을까요?
댓글 3
조회수 216master님의 댓글
master 작성일
SoftwareSerial mySoftwareSerial(10, 11);
SoftwareSerial mySerial(2, 3);
SoftwareSerial은 동시에 1개만 수신이 가능합니다. (송신은 모두 가능)
listen() 함수로 수신을 선택합니다.
mySerial.listen(); 을 실행하면 mySerial만 수신이 가능하게 되는 것이죠
master님의 댓글
master 작성일
둘 다 가능하려면
하나를 하드웨어 시리얼을 사용하는 방법도 있습니다.
시리얼모니터를 사용하지 않아야 하는데요
0(Rx)번핀에 1K옴을 사용해서 연결합니다.
아두이노 0(Rx)번핀 <----1K------- TX 외부모듈
아두이노 1(Tx)번핀 --------------> RX 외부모듈
둘 다 1K옴을 사용해도 됩니다.
tjqhd님의 댓글
tjqhd
답변 감사합니다 덕분에 해결했습니다!