本帖最后由 ChunYong 于 2014-7-25 22:50 编辑
最近迷上了这个小玩意,试着重新写了里面的一些代码,使它体积小些,也使得增加新的文字变的很方便。
先来张整体的样子吧!
第一种时间书写的方式:
第二种时间的书写方式:
写点英文字母也不错啊!
我的最终的目标是汉字,前提是解决它写的不稳的的问题。不知道是因为我没有调整好还是怎么的,写的不够整齐好看就对了,欢迎指教!
一部分字体:
//阿拉伯数字
char Num0[36] = "12,6,t,gzs,7,10,10,-0.8, 6.7, 0.5,u";
char Num1[20] = "3,15,t,10,20,10,0,u";
char Num2[36] = "2,12,t,uzs,8,14,6,3,-0.8,1,1,0,12,0";
char Num3[]="2,17,t,uzs,5,15,5,3, -2, 1,uzs,5,5,5,1.57, -3, 1,u";
char Num4[]="10,0,t,10,20,2,6,12,6,u";
char Num5[]="2,5,t,gzs,5,6,6,-2.5,2,1,5,20,12,20,u";
char Num6[]="2,10,t,uzs,7,6,6,2,-4.4,1,11,20,u";
char Num7[]="2,20,t,12,20,2,0,u";
char Num8[]="5,10,t,uzs,5,15,5,4.7, -1.6, 1,gzs,5,5,5, -4.7, 2, 1,u";
char Num9[]="9,11,t,uzs,7,15,5,4, -0.5, 1,5,0,u";
//液晶格式的数字
char LC_Num0[]="2,18,t,2,2,10,2,10,18,2,18,u";
char LC_Num1[]="10,18,t,10,2,u";
char LC_Num2[]="2,18,t,10,18,10,9,2,9,2,2,10,2,u";
char LC_Num3[]="2,18,t,10,18,10,2,2,2,u,2,9,t,10,9,u";
char LC_Num4[]="2,18,t,2,9,10,9,u,10,18,t,10,2,u";
char LC_Num5[]="10,18,t,2,18,2,9,10,9,10,2,2,2,u";
char LC_Num6[]="10,18,t,2,18,2,2,10,2,10,9,2,9,u";
char LC_Num7[]="2,18,t,10,18,10,2,u";
char LC_Num8[]="2,18,t,2,2,10,2,10,18,2,18,u,2,9,t,10,9,u";
char LC_Num9[]="10,9,t,2,9,2,18,10,18,10,2,2,2,u";
//英文字母大写
char C_A[]="2,4,t,7,18,12,4,u,4,10,t,10,10,u";
char C_B[]="0,2,t,0,18,uzs,2,18,5,2,-2,1.3,uzs,2,8,5,2,-2,1.3,u";
char C_C[]="12,16,t,gzs,7,10,10,1,6,0.6,u";
char C_D[]="0,2,t,0,18,uzs,2,18,10,2,-2,0.5,u";
char C_E[]="12,18,t,2,18,2,2,12,2,u,2,10,t,10,10,u";
char C_F[]="12,18,t,2,18,2,2,u,2,10,t,10,10,u";
char C_G[]="";
char C_H[]="2,18,t,2,2,u,12,18,t,12,2,u,2,9,t,12,9,u";
char C_I[]="5,18,t,10,18,u,8,18,t,8,2,u,5,2,t,10,2,u";
char C_J[]="";
char C_K[]="2,18,t,2,2,u,11,18,t,2,9,u,3,10,t,14,3,u";
char C_L[]="2,18,t,2,2,12,2,u";
char C_M[]="0,2,t,4,18,7,2,8,18,13,2,u";
char C_N[]="2,2,t,2,18,12,2,12,18,u";
char C_O[]="12,6,t,gzs,7,10,10,-0.8, 6.7, 0.5,u";
char C_P[]="0,2,t,0,18,uzs,2,18,5,2,-2,1.3,u";
char C_Q[]="12,6,t,gzs,7,10,10,-0.8, 6.7, 0.5,u,10,5,t,14,1,u";
char C_R[]="0,2,t,0,18,uzs,2,18,5,2,-2,1.3,12,2,u";
char C_S[]="";
char C_T[]="2,18,t,12,18,u,7,18,t,7,2,u";
char C_U[]="";
char C_V[]="2,18,t,6,2,12,18,u";
char C_W[]="0,18,t,4,2,7,18,8,2,14,18,u";
char C_X[]="2,18,t,12,2,u,12,18,t,2,2,u";
char C_Y[]="2,18,t,7,10,7,2,u,7,10,t,12,18,u";
char C_Z[]="2,18,t,12,18,2,2,12,2,u";
解释字体的程序函数:
/*
字库编辑方式:
以字的左下角为原点标记出各个点的坐标。
DRAW TO命令 需要紧跟两个参数 TX,TY
GZS和UZS需要紧跟6个参数 tx ty radius start ende sqee
碰到画板 T 提笔 U 高于板擦位置 H
国字库:char guo[]="1,3,t,12,3,12,18,1,18,1,3,u,3,14,t,10,14,u,7,14,t,7,7,u,5,10,t,10,10,u,3,7,t,11,7,u";
*/
void drawStr(char *str,float bx, float by, float scale) { //从字库中书写文字 bx,by是指文字的左下角原点
float tx;
float ty;
float radius;
int start;
int ende;
float sqee;
char *p;
p = strtok(str, ","); //从传过来的字符串中读取指定的代码或数据
while (p) {
String s(p); //把char* 转换成STRING
if (s == "t") //放笔碰到画板
{
//调用lift(0)
lift(0);
// Serial.println("thoch broad");
}
else if (s == "u") //抬笔离开画板
{
//调用lift(1)
lift(1);
// Serial.println("up board");
}
else if (s=="h") //提高到高于板擦
{
//调用 lift(2)
lift(2);
//Serial.println("HIGE OVER ERASE");
}
else if (s=="gzs" || s=="uzs" ) //GZS命令 一共要取出6个参数
{
p = strtok(NULL, ","); //读取下一个数据
tx = atof(p); //取X坐标
p = strtok(NULL, ","); //读取下一个数据
ty = atof(p); //取Y坐标
p = strtok(NULL, ","); //读取下一个数据
radius =atof(p);
p = strtok(NULL, ","); //读取下一个数据
start =atof(p);
p = strtok(NULL, ","); //读取下一个数据
ende = atof(p);
p = strtok(NULL, ","); //读取下一个数据
sqee = atof(p);
if (s=="gzs"){ //调用GZS
//Serial.println("gzs");
bogenGZS(bx + tx * scale, by + ty * scale, radius * scale, start, ende, sqee);
}
else { //调用 UZS
//Serial.println("uzs");
bogenUZS(bx + tx * scale, by + ty * scale, radius * scale, start, ende, sqee);
}
}
else //DRAW TO 命令
{
tx = atoi(p); //取X坐标
p = strtok(NULL, ","); //读取下一个数据
ty = atoi(p); //取Y坐标
//Serial.println("draw to");
//调用DRAW TO函数
drawTo(bx + tx * scale, by + ty * scale);
}
p = strtok(NULL, ","); //读取下一个数据
//Serial.println(p);
} |