4078| 2
|
[求助] 蓝牙模块、语音识别、语音合成使用问题 |
本帖最后由 缘在自然 于 2021-4-6 08:42 编辑 各位大能们好!我用Arduino uno R3,我在使用DFRobot蓝牙(BluetoothV3)(用于手机APP控制)、离线语音识别、语音合成模块做个小设计时,发现一旦在setup()函数中加载ss.begin()、asr.begin(loop),蓝牙就不好使了,接收不到手机发来的指令字符'a',用//屏蔽掉ss.begin()、asr.begin(loop)蓝牙就能正常工作了。不知道是什么原因,语音识别和语音合成接的I2C口(用的DFRobot的Arduino Uno R3-EDU主控板),蓝牙模块接的是硬串口(换软串口也不行)。 不知哪位哪位大侠能指点迷津?我这先行谢谢了。 |
Forgotten 发表于 2021-4-6 14:29 #include "DFRobot_ASR.h"//加载语音识别库 #include "DFRobot_SpeechSynthesis.h"//加载语音合成播报库 //#include<SoftwareSerial.h>//加载软串口库 DFRobot_ASR asr;//Automatic Speech Recognition,0x4F //SoftwareSerial ssSerial1(2,3);//指定蓝牙软串口2为rx,3为tx DFRobot_SpeechSynthesis_I2C ss;//0x80 char Instructions_val;//定义接收手机通过蓝牙发来的指令码变量 int Temperature_val;//定义温度传感器输入变量 int Temperature_dat;//定义计算得温度值变量 const int Power=4;// const int Lock_relay=5;// const int PTC_relay=6;// const int Ultraviolet_relay=7;// const int Fans_relay=8;// const int Ill_detect=9;// int Ill_State=0;// const int Temperature_Pin = 0; //定义模拟接口A0连接LM35温度传感器 unsigned long t=10800000;// unsigned long t_start;//开始计时时刻 unsigned long t_now;//当前时刻 unsigned long t_remain;//剩余时间 unsigned long hour_remain;//剩余小时 unsigned long minute_remain;//剩余分钟 unsigned long second_remain;//剩余秒 int result=0;//识别词条 int work_flag=0;//工作标识 void setup() { Serial.begin(9600); //ssSerial1.begin(9600); //ss.begin(ssSerial1); pinMode(Power,OUTPUT); digitalWrite(Power,HIGH); pinMode(Lock_relay,OUTPUT); digitalWrite(Lock_relay,LOW); pinMode(PTC_relay,OUTPUT); digitalWrite(PTC_relay,LOW); pinMode(Ultraviolet_relay,OUTPUT); digitalWrite(Ultraviolet_relay,LOW); pinMode(Fans_relay,OUTPUT); digitalWrite(Fans_relay,LOW); pinMode(Ill_detect,INPUT); ss.begin(); asr.begin(PASSWORD);//语音识别模式:指令模式 asr.addCommand("xiao ke",0);//识别唤醒指令“小可” asr.addCommand("hai xu yao duo chang shi jian",1);//询问“还需要多长时间” asr.start();//开始识别 } void loop() { //接收手机指令 if(Serial.available()>0){ char Instructions_val=Serial.read(); if(Instructions_val=='a'){ digitalWrite(Power,LOW);// digitalWrite(Lock_relay,HIGH);// delay(1000); digitalWrite(PTC_relay,HIGH);// delay(1000); digitalWrite(Ultraviolet_relay,HIGH);// delay(1000); work_flag=1;//工作开始 t_start=millis();//开始计时 } else if(Instructions_val=='b'){ Close_set(); } } if(work_flag==1) { //监测温度 Temperature_val=analogRead(0);// 读取传感器的模拟值并赋值给Temperature_val Temperature_dat=(125*Temperature_val)>>8;//计算出摄氏温度 //Serial.println(Temperature_dat); if (Temperature_dat>80){ digitalWrite(Fans_relay,HIGH);// delay(500); } else if(Temperature_dat<50){ digitalWrite(Fans_relay,LOW);// delay(500); } //语音识别及播报 result=asr.read();//读取识别到的词条. if(result==1) { t_now=millis(); Serial.println(t_now); t_remain=t-(t_now-t_start);//剩余毫秒 Serial.println(t_remain); second_remain=(t_remain/1000)%60;//剩余秒 minute_remain=(t_remain/60000)%60;//剩余分钟 hour_remain=t_remain/3600000;//剩余小时 String reHour=String(hour_remain); String reMinute=String(second_remain); String reSecond=String(minute_remain); ss.speak(F("您好,小可还需要工作")); ss.speak(reHour); ss.speak(F("小时")); ss.speak(reMinute); ss.speak(F("分钟")); ss.speak(reSecond); ss.speak(F("秒")); } //检测非法状态 Ill_State=digitalRead(Ill_detect); if(Ill_State==HIGH){ //ss.speak(F("对不起,小可正在工作中,敬请谅解")); delay(5000); } } } void Close_set(){ digitalWrite(Lock_relay,LOW); digitalWrite(PTC_relay,LOW); digitalWrite(Ultraviolet_relay,LOW); digitalWrite(Fans_relay,LOW); digitalWrite(Power,HIGH); work_flag=0; } 只要用//把 ss.begin(); asr.begin(PASSWORD);//语音识别模式:指令模式 屏蔽掉蓝牙控制就正常 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed