ChunYong 发表于 2014-6-5 20:16:46

plotclock小贱钟 三个文字书写方式

本帖最后由 ChunYong 于 2014-7-25 22:50 编辑

最近迷上了这个小玩意,试着重新写了里面的一些代码,使它体积小些,也使得增加新的文字变的很方便。
先来张整体的样子吧!



第一种时间书写的方式:


第二种时间的书写方式:


写点英文字母也不错啊!



我的最终的目标是汉字,前提是解决它写的不稳的的问题。不知道是因为我没有调整好还是怎么的,写的不够整齐好看就对了,欢迎指教!

一部分字体:
//阿拉伯数字
char Num0 = "12,6,t,gzs,7,10,10,-0.8, 6.7, 0.5,u";
char Num1 = "3,15,t,10,20,10,0,u";
char Num2 = "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);
    }

沧海笑1122 发表于 2014-6-5 21:40:13

再往下做就是简易绘图仪了。关注、加油。

shihaipeng04 发表于 2014-6-6 00:07:27

哈哈,还有人也在玩呢。

我觉运行不稳主要还是因为水笔太重了。结构上台淡薄了。如果抬笔的机构有2支臂支撑就会稳定很多,现在这种中间一个轴的,怎么也是不稳定。

固定轴的螺丝拧的相对紧一点点就能好很多。

Super169 发表于 2014-6-6 11:58:48

本帖最后由 Super169 于 2014-6-6 12:01 编辑

看似书写板是垂直的, 这样的话书写时整支笔变成水平了, 只夹着前端, 重量都集中在後端, 不掉下来已经很好了.
如果改用短小轻一点的笔, 或许会有好处.

我也有兴趣搅, 想改了不用白板, 用一块触控板 , 用简单的触控笔书写, 不知会否有所改善.
这样就变成一台看似高科控的机械式小贱锺, 也不用考虑清洁的问题.

心在滴血 发表于 2014-6-8 18:19:23

公布代码啊

稻草 发表于 2014-6-9 17:32:41

这样就变成一台看似高科控的机械式小贱锺, 也不用考虑清洁的问题.

那一小撮人 发表于 2014-7-25 20:05:53

调整字体想让写好一点就是改下面的函数吗?

ChunYong 发表于 2014-7-25 22:45:24

那一小撮人 发表于 2014-7-25 20:05 static/image/common/back.gif
调整字体想让写好一点就是改下面的函数吗?

这个理解成文字的字库

那一小撮人 发表于 2014-7-26 08:17:15

ChunYong 发表于 2014-7-25 22:45 static/image/common/back.gif
这个理解成文字的字库

对,那想调整就是调整库里的函数吧

ChunYong 发表于 2014-7-26 09:57:43

心在滴血 发表于 2014-6-8 18:19 static/image/common/back.gif
公布代码啊

代码已公布,如果您在此基础上做的更好也请公布

weipiang 发表于 2015-9-19 17:25:24

我去研究一下
页: [1]
查看完整版本: plotclock小贱钟 三个文字书写方式