现在所使用的WTN型语音芯片,应用还是挺广泛的,为方便对其操作,创建一个yuyin类,其数据成员部分包括语句数据、命令数据和音量数据,其中语句数据是事先已经烧录进语音芯片中的。类中成员函数可进行的操作是:1、指定播放第几个语句数据 2、调节音量的大小 3,、改变语句的播放模式。
class yuyin
{
}
Yuyin.h文件
#ifndef YUYIN_H_#define YUYIN_H_
#include <stdio.h>
#define YUYIN_xunhuandangqiang 0xF2
#define YUYIN_lianmabofang 0xF3
#define YUYIN_charujinyin 0xF8
#define YUYIN_tingzhidangqian 0xFE
class Yuyin
{
private:
int yuju_n;
int yinliang_n ;
byte P_DATA;
char yuju[225];
char yinliang[16];
public:
Yuyin(int n ,byte pin , byte PinMode);
~Yuyin();
void writedata( char SB_DATA) ;
void tiaodayinliang();
void tiaoxiaoyinliang();
void bofangyuju(int yuju_i);
void bofangmoshi(int moshi_i);
};
#endif
Yuyin.cpp文件
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "Yuyin.h"
Yuyin::Yuyin(int n, byte m)
{
pinMode(pin, PinMode);
yuju_n=n;
P_DATA=m;
yinliang_n=15;
yuju[ 225]={0X00,0X01,0X02};
mingling[4]={0XF2,0XFE,0XF3,0XF8};
yinliang[16]={0XE0,0XE1,0XE2,0XE3,0XE4,0XE5,0XE6,0XE7,0XE8,0XE9,0XEa,0XEb,0XEc,0XEd,0XEe,0XEf};
}
Yuyin::~Yuyin()
Yuyin:: writedata( char SB_DATA)
{
unsigned char S_DATA;
boolean B_DATA;
S_DATA = SB_DATA;
digitalWrite(P_DATA,LOW);
delay(5);
B_DATA = S_DATA&0X01;
for(int j=0;j<8;j++)
{
if(B_DATA == true)
{
digitalWrite(P_DATA,HIGH);
delayMicroseconds(600);
digitalWrite(P_DATA,LOW);
delayMicroseconds(200);
}
else
{
digitalWrite(P_DATA,HIGH);
delayMicroseconds(200);
digitalWrite(P_DATA,LOW);
delayMicroseconds(600);
}
S_DATA = (S_DATA>>1);
B_DATA = S_DATA&0X01;
}
digitalWrite(P_DATA,HIGH);
}
Yuyin::tiaoxiaoyinliang()
{
if(yinliang_n>0)
{
yinliang_n --;
writedata(yinliang[yinliang_n]);
}
else
yinliang_n=0;
}
Yuyin::tiaodayinliang()
{
if(yinliang_n<15)
{
yinliang_n++;
writedata(yinliang[yinliang_n]);
}
else
yinliang_n=15;
}
Yuyin::bofangyuju(int yuju_i)
{
if(0<=yuju_i<=yuju_n)
writedata(yuju[yuju_i]);
else if(yuju_i<0)
writedata(yuju[0]);
else (yuju_i>yuju_n)
writedata(yuju[yuju_n]);
}
Yuyin::bofangmoshi(int moshi_i)
{
if(moshi_i==YUYIN_xunhuandangqiang)
writedata(YUYIN_xunhuandangqiang);
else if(moshi_i==YUYIN_lianmabofang)
writedata(YUYIN_lianmabofang);
else if(moshi_i==YUYIN_charujinyin)
writedata(YUYIN_charujinyin);
else (moshi_i==YUYIN_tingzhidangqian)
writedata(YUYIN_tingzhidangqian);
}