0

蓝牙模块 (HC-05) 和语音识别模块 (V 3.1) 单独与 Arduino Uno 一起工作得很好,但是当我尝试一起运行它们时,其中一个停止工作,即语音模块停止工作。我一直无法弄清楚为什么。我的代码如下:

# include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"

VR myVR(2,3);    // 2:RX 3:TX 
uint8_t buf[64];
SoftwareSerial bluetooth(4,5); //for Bluetooth module RX FOLLOWD BY TX

void printSignature(uint8_t *buf, int len) {
    int i;
    for (i = 0; i < len; i++) {
        if (buf[i] > 0x19 && buf[i] < 0x7F) {
            Serial.write(buf[i]);
        }
    } 
}

void setup() {
    pinMode(A4,OUTPUT);// for VCC of voice module
    digitalWrite(A4,HIGH);
    myVR.begin(9600);
    Serial.begin(9600);
    myVR.load((uint8_t)0);  //loading the data of voice module
    myVR.load((uint8_t)1);
    myVR.load((uint8_t)2); 
    myVR.load((uint8_t)3); 
    myVR.load((uint8_t)4); 
    bluetooth.begin(9600);       
}

String one;

void loop() {
    int ret = myVR.recognize(buf, 50);
    if (bluetooth.available() > 0) {
        one  = bluetooth.readString();
        Serial.println(one);
    }
    if (ret > 0) {
        Serial.print("Voice module said  ");
        printSignature(buf+4, buf[3]); //priting the signature of command
        Serial.println(""); //for new line
    }
}

1)问题在于通信,因为当我删除 myVR.begin(9600) 时,蓝牙工作,语音模块不工作。

2)当我删除 bluetooth.begin(9600) 时,语音模块工作,蓝牙不工作。

他们一起不工作,只有一个工作。

4

1 回答 1

1

VoiceRecognitionV3继承SoftwareSerial. 一个程序中可以有多个SoftwareSerial实例。但是,一次只能接收一个数据。因此,您想使用listen()( doc ) 在端口之间切换。

portOne.listen(); 
ret = portOne.read();

portTwo.listen(); 
ret = portTwo.read();

Arduino 网站有一个例子。https://www.arduino.cc/en/Tutorial/TwoPortReceive

于 2019-11-29T12:28:20.010 回答