基于esp32单片机+SYN6288语音模块

//要输出的字符串
char zifuchuan[] = "七点五十一分";
//实际汉字长度
#define changdu (sizeof(zifuchuan)/3)
//存放转化后的汉字 Unicode值
char zifu[changdu * 2];

//根据字符串计算计算出来的送到串口的值
char chuli[changdu*2+6];

void setup() {
  Serial2.begin(115200);
  Serial1.begin(9600);
  delay(5000);
}

void loop() {
  //首先输出一次Arduino 原始字符串 UTF8 的值
  for (int i = 0; i < changdu * 3; i++) {
    Serial.print(zifuchuan[i] & 0xFF, HEX);
    Serial.print(' ');
  }
  Serial.println(' ');
  
  //将 UTF8 转化为 Unicode
  for (int i = 0; i < changdu; i = i + 1) {
    zifu[i * 2] = ((zifuchuan[i * 3] & 0xF) << 4) + ((zifuchuan[i * 3 + 1] >> 2) & 0xF);
    zifu[i * 2 + 1] = ((zifuchuan[i * 3 + 1] & 0x3) << 6) + (zifuchuan[i * 3 + 2] & 0x3F);
    Serial.print(zifu[i * 2] & 0xFF, HEX);
    Serial.print(' ');
    Serial.print(zifu[i * 2 + 1] & 0xFF, HEX);
    Serial.print(' ');      
  }
  Serial.println(""); 
  
  chuli[0] = 0xFD;
  chuli[1] = (changdu * 2 + 3) >> 8;
  chuli[2] = ((changdu * 2 + 3) & 0xFF);
  chuli[3] = 0x01;
  chuli[4] = 0x03;
  
  //把字符串定义搬过去
  for (int i = 0; i < changdu * 2; i++) {
    chuli[i + 5] = zifu[i];
  }
  
  //计算一个校验和  
  chuli[changdu * 2 + 5] = chuli[0];
  for (int i = 1; i < changdu * 2 + 5; i++) {
    chuli[changdu * 2 + 5] = chuli[changdu * 2 + 5] ^ chuli[i];
  }   
   
  for (int i = 0; i < changdu * 2 + 6; i++) {
    Serial.print(chuli[i] & 0xFF, HEX);
    Serial.print(' ');
    Serial2.write(chuli[i]);
  }     
   
  Serial.println(' ');
 
  delay(3000);
}

上述代码用于arduino编译器,下面的代码用于阿拉伯数字转中文

#include <Arduino.h>

String arabicToChinese(int number)
{
  if (number == 0)
  {
    return "零";
  }

  static String chineseDigits[] = {"", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
  static String chineseUnits[] = {"", "十", "百", "千", "万"};

  String result = "";

  int unitIndex = 0;
  while (number > 0)
  {
    int digit = number % 10;
    if (digit > 0)
    {
      result = chineseDigits[digit] + chineseUnits[unitIndex] + result;
    }
    else if (unitIndex == 0 || result.isEmpty() || result.charAt(0) != '零')
    {
      result = "零" + result;
    }

    number /= 10;
    unitIndex++;
  }

  return result;
}

void setup()
{
  Serial.begin(9600); // 初始化串口通信,波特率设置为9600

  int number = 19; // 要转换的数字
  String chineseNumber = arabicToChinese(number);
  
  Serial.println("阿拉伯数字: " + String(number));
  Serial.println("中文数字: " + chineseNumber);
}

void loop()
{
  // Do something here if needed
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值