【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(hz[k+i][row*2+1])); //SPI
SendByte(
}
if(offset<8) //偏移量移动,1个汉字是2个字节需要判断是前半部分还是后半部分。
SendByte2((hz[k+4][row*2]),offset) ;(hz[k+4][row*2]),8) ;
else
{
SendByte2(
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(); //调用显示函数
}
}
}