极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 44451|回复: 12

新手玩oled,打算做个模拟时钟表,可是指针转不起来,求助

[复制链接]
发表于 2015-3-29 11:56:37 | 显示全部楼层 |阅读模式
本帖最后由 0406445 于 2015-3-29 12:03 编辑
  1. #include "U8glib.h"
  2. U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9);        // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

  3. int center_w=u8g.getWidth()/2-1,
  4.     center_h=u8g.getHeight()/2-1;  //定下手表的中心点

  5.    


  6. void watch_ui()
  7. {
  8.   u8g.drawDisc(center_w,center_h,2);//画一个实心圆
  9.   u8g.drawCircle(center_w,center_h,center_h);//一个以屏幕高度为直径的整圆
  10.   u8g.setFont(u8g_font_ncenB08);//调用库中一种宽度为8的字体
  11.   u8g.setFontPosTop();
  12.   u8g.drawStr(73,5,"1");
  13.   u8g.drawStr(82,13,"2");   
  14.   u8g.drawStr(88,26,"3");
  15.   u8g.drawStr(82,40,"4");
  16.   u8g.drawStr(73,48,"5");
  17.   u8g.drawStr(61,53,"6");
  18.   u8g.drawStr(48,48,"7");
  19.   u8g.drawStr(38,38,"8");
  20.   u8g.drawStr(33,27,"9");
  21.   u8g.drawStr(36,15,"10");
  22.   u8g.drawStr(46,6,"11");
  23.   u8g.drawStr(58,0,"12");
  24. }

  25. void clock(int hour,int minute,int sencond)
  26. {
  27.   int hour_x,hour_y,minute_x,minute_y,sencond_x,sencond_y;
  28.   hour_x=cos(hour*30)*5+63,hour_y=sin(hour*30)*5+15;        //时针长度5
  29.   minute_x=cos(minute*30)*10+63,minute_y=sin(minute*30)*10+15;        //分针长度10
  30.   sencond_x=cos(sencond*30)*17+63,sencond_y=sin(sencond*30)*17+15;         //秒针长度17
  31.   u8g.drawLine(center_w,center_h,hour_x,hour_y);// 时针
  32.   u8g.drawLine(center_w,center_h,minute_x,minute_y);// 分针
  33.   u8g.drawLine(center_w,center_h,sencond_x,sencond_y);//秒针
  34. }



  35. void watch(int h,int m,int s)
  36. {
  37.   u8g.firstPage();
  38.   do {
  39.       watch_ui();
  40.       clock(h,m,s);
  41.       //u8g.setColorIndex(1);
  42.   } while( u8g.nextPage() );
  43. }

  44. void setup() {
  45.   // put your setup code here, to run once:
  46.   Serial.begin(9600);
  47. }

  48. void loop() {
  49.         for(int h=0;h<12;h++)
  50.           for(int m=0;m<60;m++)
  51.             for(int s=0;s<60;s++)
  52.             {
  53.               Serial.println(h);
  54.               Serial.println(m);
  55.               Serial.println(s);
  56.               watch(h,m,s);
  57.               delay(1000);
  58.             }
  59.             
  60. }
复制代码



这是程序,我用的是中景的OLED1.3寸屏
还有几个问题,时针,分针,秒针怎么计算比较好,还有时钟内12个数字的摆放位置,我是不断调试才摆出这样位置,但是没用到算法,后期一些制作肯定没用,有没有好的算法推荐下
回复

使用道具 举报

 楼主| 发表于 2015-3-29 11:58:04 | 显示全部楼层
设置了打印输出,循环中的h,m,s没问题啊,为什么指针转不起来
回复 支持 反对

使用道具 举报

发表于 2015-3-29 16:34:59 | 显示全部楼层
我觉得数字时钟更容易
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 18:02:49 | 显示全部楼层
suoma 发表于 2015-3-29 16:34
我觉得数字时钟更容易

模拟的比较酷~~~但是就是不能转啊
回复 支持 反对

使用道具 举报

发表于 2015-3-30 12:50:37 | 显示全部楼层
请问关于u8g库有没有不翻墙也可以看的详细资料?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 14:33:21 | 显示全部楼层
butOn 发表于 2015-3-30 12:50
请问关于u8g库有没有不翻墙也可以看的详细资料?

直接看库自带的例子就可以了吧
回复 支持 反对

使用道具 举报

发表于 2015-4-3 17:20:40 | 显示全部楼层
0406445 发表于 2015-4-3 14:33
直接看库自带的例子就可以了吧

模拟时钟的指针是画出来的,每一秒钟需要重画一次,画的过程清屏,重画.类是动画.
回复 支持 反对

使用道具 举报

发表于 2015-4-4 14:28:40 | 显示全部楼层
butOn 发表于 2015-3-30 12:50
请问关于u8g库有没有不翻墙也可以看的详细资料?

U8glib 在 google code 上的文档,下载打包,避免翻墙~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2015-4-8 00:39:56 | 显示全部楼层
fatfox 发表于 2015-4-4 14:28
U8glib 在 google code 上的文档,下载打包,避免翻墙~

谢谢!!           &#128522;
回复 支持 反对

使用道具 举报

发表于 2015-4-10 14:54:00 | 显示全部楼层
把 clock 改成這樣看看

void clock(int hour,int minute,int sencond)
{
  int hour_x,hour_y,minute_x,minute_y,sencond_x,sencond_y;
  hour_x=cos(hour*3.1412/30-3.1412/2)*8 + center_w;
  hour_y=sin(hour*3.1412/30-3.1412/2)*8 + center_h;        //时针长度5
  minute_x=cos(minute*3.1412/30-3.1412/2)*12+center_w ;
  minute_y=sin(minute*3.1412/30-3.1412/2)*12+center_h;        //分针长度10
  sencond_x=cos(sencond*3.1412/30-3.1412/2)*17+center_w;
  sencond_y=sin(sencond*3.1412/30-3.1412/2)*17+center_h;         //秒针长度17
  u8g.drawLine(center_w,center_h,hour_x,hour_y);// 时针
  u8g.drawLine(center_w,center_h,minute_x,minute_y);// 分针
  u8g.drawLine(center_w,center_h,sencond_x,sencond_y);//秒针
}
回复 支持 反对

使用道具 举报

发表于 2015-4-10 15:35:31 | 显示全部楼层
我的悲催了.刚收到,点亮完好,手一拿杯子喝水勾到USB线了.掉地上就成这样了.

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2015-5-3 19:24:01 | 显示全部楼层
我也用的是中景的 OLED1.3寸屏,可是主控是 QT1106 P07A ,由于没有相应驱动库文件,使用SSD1306驱动库只有上方1/4显示正常,下方乱码,请问您用的什么库文件。能帮我解决吗?
回复 支持 反对

使用道具 举报

发表于 2020-10-29 15:32:15 | 显示全部楼层
把DO while 放loop里
{

for(k=0;k<12;k++)

{

  for(j=0;j<60;j++)

  {

    for(i=0;i<60;i++)

    {

      u8g.firstPage();

      do {

           draw();

         } while( u8g.nextPage());

       delay(1000);     //时钟程序
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 00:56 , Processed in 0.075152 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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