不说废话,简单直接,上教程,包会的,看不会,后台私我
一、接线图
STM32F103C8T6 | ASR-01 | OLED屏 |
PA10(RX接收串口) | TX(发送串口) | |
PB8 | SCL | |
PB9 | SDA | |
VCC | VCC | |
GND | GND |
二、天问软件Block图形编程
大家不要问我软件哪里来,大家哪里买的的,就去哪里要,淘宝客服一定有,没有你就换一家。
图形化编程
原理:通过接收相匹配语音,赋值给ID,然后通过switch语句,判断ID值,执行通过串口发送相关信息的语句。然后在核心板方面通过判断发送的信息实现开关灯。
代码形式
#include "asr.h"
#include "setup.h"
#include "myLib/asr_event.h"
#include "HardwareSerial.h"
uint32_t snid;
void ASR_CODE();
//{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
//{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
//{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
//{speak:丫丫-可爱女童,vol:2,speed:10,platform:baidu}
//{playid:10001,voice:欢迎使用智能管家,用智能管家唤醒我。}
//{playid:10002,voice:我退下了,用智能管家唤醒我}
/*描述该功能...
*/
void ASR_CODE(){
switch (snid) {
case 4:
Serial.print('1');
break;
case 6:
Serial.write('0');
break;
}
}
void setup()
{
Serial.begin(9600);
//{ID:2,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
//{ID:4,keyword:"命令词",ASR:"打开红灯",ASRTO:"好的,马上打开红灯"}
//{ID:6,keyword:"命令词",ASR:"关闭红灯",ASRTO:"好的,马上关闭红灯"}
}
三、keil源码
这段代码中进行接收字符判断的时候,因为发送的是字符1,所以在进行比较的时候,应该用十六进制表示。
字符1对应着十六进制的0x31,字符0对应着0x30
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include "LED.h"
uint8_t RxData;
int main(void)
{
OLED_Init();
OLED_ShowString(1, 1, "RxData:");
Serial_Init();
LED_Init();
while (1)
{
if (Serial_GetRxFlag() == 1)//判断是否有信息发送
{
RxData = Serial_GetRxData();//将信息存储到RxDate中
OLED_ShowHexNum(1, 8, RxData, 2);//OLED屏显示接收信息
if(RxData == 0x31) //判断:发送过来的时字符‘1’,因此这里应该用十六进制的0x31表示
{
LED1_ON();
Delay_ms(100);
}
if(RxData == 0x30)
{
LED1_OFF();
Delay_ms(100);
}
}
}
}