硬件接线
Arduino | xfs5152ce |
---|---|
3.3V | 3.3V |
GND | GND |
TX | RX |
RX | TX |
耳机 |
Ardiuno代码:
/*语音编码数据,每个汉字对应两个16进制的编码*/
char huanyingshiyong[]={0xFD,0x00,0x18,0x01,0x00,0xBB,0xB6,0xD3,0xAD,0xCA,0xB9,0xD3,0xC3,0xD6,0xC7,0xC4,0xDC,0xC9,0xA8,0xB5,0xD8,0xBB,0xFA,0xC6,0xF7,0xC8,0xCB};//欢迎语
char houtui[]={0xFD,0x00,0x18,0x01,0x00,0xC7,0xB0,0xB7,0xBD,0xD3,0xD0,0xD5,0xCF,0xB0,0xAD,0xCE,0xEF,0xA3,0xAC,0xBF,0xAA,0xCA,0xBC,0xBA,0xF3,0xCD,0xCB};//不能后退时播放
char qianjin[]={0xFD,0x00,0x18,0x01,0x00,0xBA,0xF3,0xB7,0xBD,0xD3,0xD0,0xD5,0xCF,0xB0,0xAD,0xCE,0xEF,0xA3,0xAC,0xBF,0xAA,0xCA,0xBC,0xC7,0xB0,0xBD,0xF8};//不能前进时播放
char moshi[]={0xFD,0x00,0x0E,0x01,0x00,0xBF,0xAA,0xCA,0xBC,0xD7,0xD4,0xB6,0xAF,0xC4,0xA3,0xCA,0xBD};//模式切换时播放
/*
指令翻译:
欢迎使用智能扫地机器人
fd 00 18 01 00 bb b6 d3 ad ca b9 d3 c3 d6 c7 c4 dc c9 a8 b5 d8 bb fa c6 f7 c8 cb
前方有障碍物
fd 00 18 01 00 c7 b0 b7 bd d3 d0 d5 cf b0 ad ce ef a3 ac bf aa ca bc ba f3 cd cb
后方有障碍物
fd 00 18 01 00 ba f3 b7 bd d3 d0 d5 cf b0 ad ce ef a3 ac bf aa ca bc c7 b0 bd f8
开启自动模式
fd 00 0e 01 00 bf aa ca bc d7 d4 b6 af c4 a3 ca bd
*/
#define Trig1 5
#define Echo1 4
float cm1;
float temp1;
#define Trig2 3
#define Echo2 2
float cm2;
float temp2;
/*3前4后超声波
* 5 6 7
* 000静止代码
* 001前进
* 010后退
* 100左转
* 011右转
* 101无法前进
* 110无法后退
* 111模式转换
* 10 11 12
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//模块默认的波特率为9600bps,该波特率可以根据芯片手册通过芯片的波特率设置两个引脚接不同电阻值来进行设置,默认时如果改成其它波特率可能造成无法通讯的情况
pinMode(Trig1, OUTPUT);
pinMode(Echo1, INPUT);
pinMode(Trig2, OUTPUT);
pinMode(Echo2, INPUT);
//上边时超声波的引脚
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
//这是超声波信号输出引脚
pinMode(10, INPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);
//这是接收信号的针脚
// put your main code here, to run repeatedly:
Serial.write(huanyingshiyong,sizeof(huanyingshiyong));
//这一句是欢迎语
//送出语音编码数据进行合成
delay(3000);
//延时3秒,差不多是上面的内容朗读完的时间。
//以后不再播放这句话
}
void loop() {
//static int hello=0;
//这是接收信号板的信号引脚
digitalWrite(Trig1, LOW);
delayMicroseconds(2);
digitalWrite(Trig1,HIGH);
delayMicroseconds(10);
digitalWrite(Trig1, LOW);
temp1 = float(pulseIn(Echo1, HIGH));
cm1 = (temp1 * 17 )/1000;
Serial.print("Echo1 =");
Serial.print(temp1);
Serial.print(" | | Distance1 = ");
Serial.print(cm1);
Serial.println("cm1");
//delay(100);
digitalWrite(Trig2, LOW);
delayMicroseconds(2);
digitalWrite(Trig2,HIGH);
delayMicroseconds(10);
digitalWrite(Trig2, LOW);
temp2 = float(pulseIn(Echo2, HIGH));
cm2 = (temp2 * 17 )/1000;
Serial.print("Echo2 =");
Serial.print(temp2);
Serial.print(" | | Distance2 = ");
Serial.print(cm2);
Serial.println("cm2");
//delay(100);
/*
if(hello==0){
// put your main code here, to run repeatedly:
Serial.write(huanyingshiyong,sizeof(huanyingshiyong));
//这一句是欢迎语
//送出语音编码数据进行合成
delay(3000);
//延时90秒,差不多是上面的内容朗读完的时间。
hello = hello+1;
//以后不再播放这句话
}
*/
//发送信号给2号板
if(cm1>10){
//可以前进
//发送信号给信号板高电平
digitalWrite(8,HIGH);
}
else{
//不可以前进
digitalWrite(8,LOW);
}
if(cm2>10){
//可以后退
digitalWrite(9,HIGH);
}
else{
//不可以前进
digitalWrite(9,LOW);
}
/*3前4后超声波
* 5 6 7
* 000静止代码
* 001前进
* 010后退
* 100左转
* 011右转
* 101无法前进
* 110无法后退
* 111模式转换
* 10 11 12
*/
//接收2号板的指令
if(digitalRead(10)==HIGH&&digitalRead(11)==LOW&&digitalRead(12)==HIGH){
//无法前进
Serial.write(qianjin,sizeof(qianjin));
//这一句是无法前进
//送出语音编码数据进行合成
delay(3000);
}
if(digitalRead(10)==HIGH&&digitalRead(11)==HIGH&&digitalRead(12)==LOW){
//无法后退
Serial.write(houtui,sizeof(houtui));
//这一句是无法后退
//送出语音编码数据进行合成
delay(3000);
}
if(digitalRead(10)==HIGH&&digitalRead(11)==HIGH&&digitalRead(12)==HIGH){
//模式转换
Serial.write(moshi,sizeof(moshi));
//这一句是模式转换
//送出语音编码数据进行合成
delay(3000);
}
else{
//delay(100);
}
}
语音读的汉字需要转换为16进制,可用Python或者Arduino代码转换。
完整源码请在微信公众号“修电脑的杂货店”后台回复“代码”获取!!!
对这篇内容对你有帮助,或者对本公众号内容有兴趣的同学可以加入官方QQ群详细交流探讨,互相学习共同进步,源码和具体操作流程,也会放到群里,如果有不懂得细节,群里也会有人回答。快加入我们的大家庭QQ群号:559369389 欢迎新成员的到来!