提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
使用SU-03T,通过串口输入播放数字。
提示:以下是本篇文章正文内容,下面案例可供参考
一、网页端设置
第一步:先配置串口IO
第二步:配置触发方式串口输入
第三步:配置串口输入的参数,第一个参数选择int,可以最大播报0xFFFFFFFF,L1、L2、L3、L4,分别是小数部分。一般播报取四位小数足够日常使用。
第四步:点击添加控制,完成串口播放语音的配置。
二、使用
按照以上配置之后,对应要输入的数组格式为:
unsigned char VoiceCmd[13] = {0xAA, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA};
通过观察可以得到
该数组的 VoiceCmd[2] 为消息编号位,即是控制语音模块播放哪条语音指令的控制为
VoiceCmd[3],VoiceCmd[4],VoiceCmd[5],VoiceCmd[6],H1这个参数的位置,即我所定义的整数位。
VoiceCmd[7],VoiceCmd[8],VoiceCmd[9],VoiceCmd[10],对应的是 L1、L2、L3、L4,即我定义的小数位。
例如想播报 用电量为230.4523千万时,H1位串口传入的高位 H1 = 230,L1 = 4,L2 = 5,L3 = 2,L4 = 3,截图上的消息号是7,即VoiceCmd[2] = 0x07,把这些十进制转十六进制,发送VoiceCmd[13] = {0xAA, 0x55, 0x07, 0xE6, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x03, 0x55, 0xAA}; 发送这个数组即可播报“用电量为230.4523千万时”;
敲代码
本文提供Arduino 开发环境代码,其他单片机只需改串口配置即可
/*
接线
arduino SU03T
5V----------5V
GND---------GND
11----------TX
12----------RX
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 12);
/*
语音播报函数
Cmd 是控制语音模块念哪一条指令
data: 要念的数字
DecimalDigits: 小数位(最大支持小数点后四位)
*/
void VoicePlay(uint8_t Cmd, float data, uint8_t DecimalDigits)
{
//语音播报指令数组
unsigned char VoiceCmd[13] = {0xAA, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA};
uint32_t temp = 0;
VoiceCmd[2] = Cmd;
if (DecimalDigits == 0) //整数
{
temp = (uint32_t)data;
VoiceCmd[3] = temp & 0xFF;
VoiceCmd[4] = temp >> 8;
}
else if (DecimalDigits == 1) //一位小数
{
temp = (uint32_t)(data * 10);
VoiceCmd[3] = (temp / 10) & 0xFF;
VoiceCmd[4] = (temp / 10) >> 8;
VoiceCmd[7] = temp / 10 % 10;
}
else if (DecimalDigits == 2) //两位小数
{
temp = (uint32_t)(data * 100);
VoiceCmd[3] = (temp / 100) & 0xFF;
VoiceCmd[4] = (temp / 100) >> 8;
//小数位
VoiceCmd[7] = temp / 10 % 10;
VoiceCmd[8] = temp % 10;
}
else if (DecimalDigits == 3) //三位小数
{
temp = (uint32_t)(data * 1000);
VoiceCmd[3] = (temp / 1000) & 0xFF;
VoiceCmd[4] = (temp / 1000) >> 8;
//小数位
VoiceCmd[7] = temp / 100 % 10;
VoiceCmd[8] = temp / 10 % 10;
VoiceCmd[9] = temp % 10;
}
else if (DecimalDigits == 4)
{
temp = (uint32_t)(data * 10000);
VoiceCmd[3] = (temp / 10000) & 0xFF;
VoiceCmd[4] = (temp / 10000) >> 8;
//小数位
VoiceCmd[7] = temp / 1000 % 10;//2304523
VoiceCmd[8] = temp / 100 % 10;
VoiceCmd[9] = temp / 10 % 10;
VoiceCmd[10] = temp % 10;
}
mySerial.write(VoiceCmd, sizeof(VoiceCmd)); //发送播放指令
}
void setup()
{
mySerial.begin(9600); //
}
void loop()
{
VoicePlay(0x04, 230.4523, 4);
delay(5000);
}
要注意的是这个语音内容部分,如果在实际使用中你不需要播放小数点后四位这么多,在文本说明的(第四步)可以不添加这么多的串口参数,但是我个人建议在本文说明的(第三步)你还是添加1个int和4个unsigned char类型的数据,这么做的目的是当有多条串口输入数据需要播报的时候,统一串口输入的数组,简化编程。
例如,你要播报整数,本文的(第三步)配置不变,本文的(第四步)操作可改为下图所示,改该VoicePlay第三个参数为0。即可播报“用电量230千瓦时”的语音。
VoicePlay(0x07, 230.4523,0);
需要播放一位小数,本文的(第三步)配置不变,本文的(第四步),在添加H1串口参数之后,在添加L1,作为小数位,如下图所示。
改该VoicePlay第三个参数为1。文章来源:https://www.toymoban.com/news/detail-427414.html
VoicePlay(0x07, 230.4523,1);
文章来源地址https://www.toymoban.com/news/detail-427414.html
到了这里,关于SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!