//要输出的字符串
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
}