func LED_MuiltLineDisAndPlayVoice(TextContext *[]TEXT_CONTEXT, VoiceText string) {
    BuffPos := 0
    Buff := make([]byte, 255) //分配缓冲数组
    var CRC uint16
    TextContextNum := byte(len(*TextContext))

    /*0.填充命令参数*/
    Buff[BuffPos] = 0x00  //显示屏地址
    BuffPos++
    Buff[BuffPos] = 0x64  //固定参数
    BuffPos++
    Buff[BuffPos] = 0xFF  //包序列
    BuffPos++
    Buff[BuffPos] = 0xFF  //包序列
    BuffPos++
    Buff[BuffPos] = 0x6E  //指令
    BuffPos++
    Buff[BuffPos] = 0x00  //数据长度
    BuffPos++

    /*1.填充文本参数*/
    Buff[BuffPos] = 0x00      //文本类型,1为广告语,0为临时信息
    BuffPos++
    Buff[BuffPos] = TextContextNum //文本数量
    BuffPos++
    for i := 0; i < int(TextContextNum); i++ {
        Buff[BuffPos] = (*TextContext)[i].LID      //行号
        BuffPos++
        Buff[BuffPos] = (*TextContext)[i].DisMode   //显示模式
        BuffPos++
        Buff[BuffPos] = 0x01     //显示速度
        BuffPos++
        Buff[BuffPos] = (*TextContext)[i].DelayTime //停留时间
        BuffPos++
        Buff[BuffPos] = 0x00     //显示次数
        BuffPos++
        Buff[BuffPos] = 0xFF     //32位字体颜色 红色分量
        BuffPos++
        Buff[BuffPos] = 0x00     //32位字体颜色 绿色分量
        BuffPos++
        Buff[BuffPos] = 0x00     //32位字体颜色 蓝色分量
        BuffPos++
        Buff[BuffPos] = 0x00     //32位字体颜色 保留字节

        TextBuff := []byte((*TextContext)[i].Text) //把string 类型字符串 读取到字节数组里面.注意字符串编码必须是GB2312 WINDOWS代码页为936
        if (BuffPos + len(TextBuff)) >= 255 { //整包长度不能大于255
            return
        }
        Buff[BuffPos] = byte(len(TextBuff)) //文本长度
        BuffPos++
        for z := 0; z < len(TextBuff); z++ { //复制文本到缓冲
            Buff[BuffPos] = TextBuff[z]
            BuffPos++
        }

        if i == (int(TextContextNum) - 1) { //添加文本分隔符
            Buff[BuffPos] = 0x00
        } else {
            Buff[BuffPos] = 0x0D
        }
        BuffPos++
    }

    /*2.填充语音参数*/
    VoiceTextBuff := []byte(VoiceText) //把string 类型字符串 读取到字节数组里面.注意字符串编码必须是GB2312 WINDOWS代码页为936
    if len(VoiceTextBuff) > 0 {
        Buff[BuffPos] = 0x0A //语音分隔符
        BuffPos++
        Buff[BuffPos] = byte(len(VoiceTextBuff)) //语音文本长度
        BuffPos++
        if (BuffPos + len(VoiceTextBuff)) >= 255 { //长度检查
            return
        }
        for z := 0; z < len(VoiceTextBuff); z++ { //复制文本到缓冲
            Buff[BuffPos] = VoiceTextBuff[z]
            BuffPos++
        }
    } else {
        Buff[BuffPos] = 0x00
        BuffPos++
    }
    Buff[BuffPos] = 0x00
    BuffPos++
    Buff[5] = byte(BuffPos - 6) //重新修改数据长度

    /*3.计算校验码*/
    CRC = MB_CRC16(&Buff, BuffPos)
    Buff[BuffPos] = byte(CRC & 0xff) //校验码低字节
    BuffPos++
    Buff[BuffPos] = byte((CRC >> 8) & 0xff) //校验码高字节
    BuffPos++

    /*4.最后在这里把Buff的内容发送出去,长度为BuffPos */
    //....
}

该函数用于控制 LED 显示屏,实现多行文本显示和语音播放功能。函数接收文本内容和语音文本作为参数,并生成一个包含所有必要信息的字节数组,该数组可用于与 LED 显示屏进行通信。

参数:

  • TextContext: 包含文本信息的数组,每个元素代表一行文本。
  • VoiceText: 语音文本,如果为空则不播放语音。

返回值:

函数流程:

  1. 填充命令参数:包括显示屏地址、固定参数、包序列、指令和数据长度。
  2. 填充文本参数:包括文本类型、文本数量、文本内容、显示模式、显示速度、停留时间、显示次数和字体颜色。
  3. 填充语音参数:包括语音分隔符、语音文本长度和语音文本内容。
  4. 计算校验码:使用 MB_CRC16 函数计算校验码,并将其添加到字节数组中。
  5. 发送数据:将生成好的字节数组发送到 LED 显示屏,实现文本显示和语音播放。

注意:

  • 文本编码必须是 GB2312,WINDOWS 代码页为 936。
  • 字节数组长度不能超过 255。
  • MB_CRC16 函数是一个用于计算 CRC 校验码的函数,需要根据实际情况进行实现。

应用场景:

  • LED 显示屏广告播放
  • LED 显示屏信息发布
  • LED 显示屏语音提示

代码示例:

// 假设已经定义了 TEXT_CONTEXT 结构体和 MB_CRC16 函数

var TextContext []TEXT_CONTEXT

// 初始化文本内容
TextContext = append(TextContext, TEXT_CONTEXT{
    LID: 1,
    DisMode: 0,
    DelayTime: 5,
    Text: "欢迎光临!",
})
TextContext = append(TextContext, TEXT_CONTEXT{
    LID: 2,
    DisMode: 1,
    DelayTime: 3,
    Text: "本店今日特价!",
})

// 设置语音文本
VoiceText := "欢迎光临!"

// 调用 LED_MuiltLineDisAndPlayVoice 函数
LED_MuiltLineDisAndPlayVoice(&TextContext, VoiceText)

原文地址: https://www.cveoy.top/t/topic/nlWU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录