程序猿好圆 2022-03-09 11:10 采纳率: 40%
浏览 89
已结题

arduino编译出现以下问题

【1】arduino编译出现以下问题:
In function 'void setup()':
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

【代码如下】
#include <VoiceRecognition.h> //引入语音识别库文件
VoiceRecognition Voice; //实例化一个语音识别对象

#define RowA 3 //行信号,驱动138
#define RowB 5
#define RowC 6
#define RowD 7

boolean O;
volatile long lastTime;
byte offset=0; //应用流动显示变量
byte k=1,j=0; //k选择显示字体 j流动显示速度
byte HzNum; //总字节数

int chr; //存储语音识别模块返回的标签
int hc138en=8; //138 使能

int i,a;
#define STB 14 //595 刷新显示 SS

int latch = 14; //信号锁存
int srclk = 15; //信号时钟
int ser = 16; //信号输入

byte row=0; //扫描点阵屏16行

};
//刷新每一行
void hc138sacn(byte r){ //输出行线状态ABCD (A低,D高)
digitalWrite(RowA,(r & 0x01));
digitalWrite(RowB,(r & 0x02));
digitalWrite(RowC,(r & 0x04));
digitalWrite(RowD,(r & 0x08));
}

//把数据用串行转并行输出到595
void SendByte(unsigned char dat)//输出一个字节到595
{
static unsigned char i;

for(i=0;i<8;i++) //一个汉字两个字节
{
digitalWrite(ser,bitRead(dat,7-i));//这里也可以用arduino自带的函数操作,主用于595类型的输出。
digitalWrite(srclk,0);
digitalWrite(srclk,1);
}
}

//把数据用串行转并行输出到595
void SendByte2(unsigned char dat,byte offset)//输出小于1个字节的数据到595,应用流动显示
{
static unsigned char i;

for(i=0;i<offset;i++)
{
digitalWrite(ser,bitRead(dat,7-i));//这里也可以用arduino自带的函数操作,主用于595类型的输出。
digitalWrite(srclk,0);
digitalWrite(srclk,1);
}

}

void flow_xs(){
k=0;
lastTime = millis();
while (O){ //pgm_read_byte(&hz[k+4][row*2+1])
for ( int i=0;i<4;i++){//8片595
SendByte((hz[k+i][row*2])); //SPI
SendByte(
(hz[k+i][row*2+1])); //SPI
}
if(offset<8) //偏移量移动,1个汉字是2个字节需要判断是前半部分还是后半部分。
SendByte2((hz[k+4][row*2]),offset) ;
else
{
SendByte2(
(hz[k+4][row*2]),8) ;
SendByte2(~(hz[k+4][row*2+1]),offset-8) ;
}
j++;
if(j==30)//更改流动速度
{
j=0;
offset++;
if(offset==16)
{
offset=0;
k++;
if(k==HzNum)
k=0;
}
}
digitalWrite(hc138en, 1); //关闭显示
hc138sacn(row); //换行
digitalWrite(STB, 0); //595刷新
digitalWrite(STB, 1);
digitalWrite(hc138en, 0); //开启显示
row++;
if(row == 16){
row = 0;
}
if (millis() - lastTime > 7500){ //显示时间到了就熄灭
O=false;
}

}
}
//初始化函数
void setup () {
Serial.begin(9600); //串口波特率
HzNum=sizeof(hz)/32-4; //显示的字数
pinMode(RowA, OUTPUT);
pinMode(RowB, OUTPUT);
pinMode(RowC, OUTPUT);
pinMode(RowD, OUTPUT); //138片选
pinMode(hc138en, OUTPUT); //138 使能
pinMode(latch, OUTPUT);
pinMode(ser, OUTPUT);
pinMode(srclk, OUTPUT);
Voice.init();//初始化VoiceRecognition模块
Voice.addCommand("xing yun xin neng",1); //添加指令,参数1:指令内容,参数2:指令标签(可重复)
Voice.start();//开始识别
}
//loop循环函数
void loop () {
chr = Voice.read(); //读取语音识别返回的标签并保存在chr中
if(chr != -1){ //当chr不是-1时
if (chr = 1){ //当chr等于1时
O = true; //O赋值为true
flow_xs(); //调用显示函数
}
}
}

  • 写回答

2条回答 默认 最新

  • 关注

    Voice.addCommand("xing yun xin neng",1);这里修改一下:

    char* p=(char*)"xing yun xin neng";
    Voice.addCommand(p,1);
    

    或者:

    const char* p="xing yun xin neng";
    Voice.addCommand(p,1);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵