蓝牙模块、语音识别、语音合成使用问题
本帖最后由 缘在自然 于 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_ASRasr;//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);//语音识别模式:指令模式
屏蔽掉蓝牙控制就正常
页:
[1]