极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24206|回复: 10

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

[复制链接]
发表于 2014-6-5 20:16:46 | 显示全部楼层 |阅读模式
本帖最后由 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);
    }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-6-5 21:40:13 | 显示全部楼层
再往下做就是简易绘图仪了。关注、加油。
回复 支持 反对

使用道具 举报

发表于 2014-6-6 00:07:27 | 显示全部楼层
哈哈,还有人也在玩呢。

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

固定轴的螺丝拧的相对紧一点点就能好很多。
回复 支持 反对

使用道具 举报

发表于 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 | 显示全部楼层
调整字体想让写好一点就是改下面的函数吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-25 22:45:24 | 显示全部楼层
那一小撮人 发表于 2014-7-25 20:05
调整字体想让写好一点就是改下面的函数吗?

这个理解成文字的字库
回复 支持 反对

使用道具 举报

发表于 2014-7-26 08:17:15 | 显示全部楼层
ChunYong 发表于 2014-7-25 22:45
这个理解成文字的字库

对,那想调整就是调整库里的函数吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-26 09:57:43 | 显示全部楼层
心在滴血 发表于 2014-6-8 18:19
公布代码啊

代码已公布,如果您在此基础上做的更好也请公布
回复 支持 反对

使用道具 举报

发表于 2015-9-19 17:25:24 | 显示全部楼层
我去研究一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 01:50 , Processed in 0.062145 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表