SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报

这篇具有很好参考价值的文章主要介绍了SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

使用SU-03T,通过串口输入播放数字。


提示:以下是本篇文章正文内容,下面案例可供参考

一、网页端设置

第一步:先配置串口IO

SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报

第二步:配置触发方式串口输入
SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报
第三步:配置串口输入的参数,第一个参数选择int,可以最大播报0xFFFFFFFF,L1、L2、L3、L4,分别是小数部分。一般播报取四位小数足够日常使用。
SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报
第四步:点击添加控制,完成串口播放语音的配置。
SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报

二、使用

按照以上配置之后,对应要输入的数组格式为:
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千万时”;

SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报

敲代码

本文提供Arduino 开发环境代码,其他单片机只需改串口配置即可
SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报

/*
接线
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);

SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报
需要播放一位小数,本文的(第三步)配置不变,本文的(第四步),在添加H1串口参数之后,在添加L1,作为小数位,如下图所示。
改该VoicePlay第三个参数为1。

VoicePlay(0x07, 230.4523,1);

SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报文章来源地址https://www.toymoban.com/news/detail-427414.html

到了这里,关于SU-03T,通过串口输入播放数字,可以使用单片机读取传感器数据并播报的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 源码修改,使第三方应用可以直接使用su命令

        在android原生系统中,只有root权限和shell权限下才可以使用su命令,虽然在userdebug模式下编译的系统镜像有自带的su文件,但是第三方应用却无法使用。于是在这种场景下,有两种方式可以实现第三方应用使用su命令。     1.修改原来的su相关的源码(所有的应用都可以使用

    2024年02月09日
    浏览(56)
  • 电脑通过串口控制51单片机的LED

    在电脑端的串口助手通过串口对51单片机发送一个字节的16进制数控制LED的亮灭 单片机通过串口将接收到的数据发送回电脑 51 单片机内部自带 UART ( Universal Asynchronous Receiver Transmitter ,通用异步收发器),可实现单片机的串口通信 STC89C52有 1 个 UART,有四种通信模式: 模式

    2024年02月09日
    浏览(46)
  • 单片机通过串口向电脑端发送数据&&电脑端发送数据控制led

    上节课我们学习了串口的理论部分,这节课我们要来学习实操部分。 要想实现单片机通过串口向电脑端发送数据,我们首先要来配置寄存器。 1.配置SCON SCON寄存器中的SM0配置为0,SM1配置为1决定了串口工作在模式一,也就是 8位UART, 波特率可变的工作模式。REN置1表示能接收

    2023年04月21日
    浏览(36)
  • 51单片机的串口实验之数码管显示与按键实验(8位数字任意传输)

    目标效果: 1、电脑发送任意小于=8位数字( SUBF只有8位最大只能发送255,但是可以通过数组进行临时存储来实现传输多字节 )数字,在数码管上显示对应的数字且同时满足高位是0可以不显示  2、矩阵按键按下后,电脑接收所按下的按钮 实验器材: 1、普中51单片机。2、ST

    2024年02月02日
    浏览(48)
  • 基于STM32单片机BOOTLOADER通过串口升级程序IAP——APP方案

                            此方法前提是你得有一个EEPROM         我用的单片机是STM32F103ZET6 , 此单片机FLASH容量为512KB; 在此单片机里面FLASH的起始地址是0X8000000,BOOT作为引导加载程序一般都是从这个地址开始,单片机一上点默认会从这个地址开始运行,所以将自己

    2024年02月04日
    浏览(56)
  • STC8H系列单片机IAP实现不停电下载(通过串口)

    在使用串口往STC单片机烧录程序时,需要冷启动,先点击下载再上电。这样做有一定的缺点。首先,一些特殊的外围电路要求一直保持有电状态,有些客户需求我们能远程操控设备就可以升级程序,而不需要去现场断电设备。其次,频繁的断电上电操作也比较麻烦。 STC 单片

    2024年02月03日
    浏览(74)
  • 前端-element输入框-input的一些限制(只能输入正整数和0,或者只能输入数字不可以汉字字母)

    1、input输入框只能输入正整数和0 那你就用  οnkeyup=\\\"value=(value.replace(/D/g,\\\'\\\')==\\\'\\\'?\\\'\\\':parseInt(value))\\\" 2、如果是正数负数0,包括小数都可以 那就用这个οnkeyup=\\\"value=value.replace(/[^-?d.]/g,\\\'\\\')\\\",不能输入汉字和字母 3、不能输入中文,可以输入正数、负数、小数和字母  οnkeyup=\\\"value=v

    2024年02月13日
    浏览(42)
  • K210识别数字(0~9)并与单片机通信通过数字来控制小车移动

    前一段时间学习了K210的模型训练,又学会了K210的串口通信,于是冒出一个新奇的想法,用手势控制小车,手势识别可能比较难,于是想着先用数字控制小车。(懂得都懂)我相信有很多人再找这篇博客,希望大家可以看到这篇博客并帮助到你们。 方法也很简单,相信你看了

    2023年04月16日
    浏览(46)
  • Proteus基于51单片机通过PWM脉冲调制控制电机转速_按键与串口控制转速_电机转速可测

    临近期末,学校的单片机课程需要做课程设计,主要内容是基于51单片机的可调速电机,具体要求如下,在此记录一下具体的一个解题方案。 要求利用单片机输出PWM波形,通过改变占空比,改变电枢两端电压的平均值,从而改变电动机的转速 通过按键进行手动速度调整(速度

    2023年04月14日
    浏览(61)
  • AI智能语音识别模块(SU-03T)

    32位RISC内核,运行频率240 M 支持dsp指令集以及fpu浮点运算单元 FFT加速器:最大支持1024点复数FFT/IFFT运算,或者是2048点的实数FFT/IFFT运算 内置高速SRAM,内置2MB闪存内置2.4W、单声道AB类功放 支持1路驻极体麦 支持L2S输入/输出。 支持5V电源输入 内置5V转3.3V,3.3V外部负载不超过15

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包