新手玩oled,打算做个模拟时钟表,可是指针转不起来,求助
本帖最后由 0406445 于 2015-3-29 12:03 编辑#include "U8glib.h"
U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
int center_w=u8g.getWidth()/2-1,
center_h=u8g.getHeight()/2-1;//定下手表的中心点
void watch_ui()
{
u8g.drawDisc(center_w,center_h,2);//画一个实心圆
u8g.drawCircle(center_w,center_h,center_h);//一个以屏幕高度为直径的整圆
u8g.setFont(u8g_font_ncenB08);//调用库中一种宽度为8的字体
u8g.setFontPosTop();
u8g.drawStr(73,5,"1");
u8g.drawStr(82,13,"2");
u8g.drawStr(88,26,"3");
u8g.drawStr(82,40,"4");
u8g.drawStr(73,48,"5");
u8g.drawStr(61,53,"6");
u8g.drawStr(48,48,"7");
u8g.drawStr(38,38,"8");
u8g.drawStr(33,27,"9");
u8g.drawStr(36,15,"10");
u8g.drawStr(46,6,"11");
u8g.drawStr(58,0,"12");
}
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*30)*5+63,hour_y=sin(hour*30)*5+15; //时针长度5
minute_x=cos(minute*30)*10+63,minute_y=sin(minute*30)*10+15; //分针长度10
sencond_x=cos(sencond*30)*17+63,sencond_y=sin(sencond*30)*17+15; //秒针长度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);//秒针
}
void watch(int h,int m,int s)
{
u8g.firstPage();
do {
watch_ui();
clock(h,m,s);
//u8g.setColorIndex(1);
} while( u8g.nextPage() );
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
for(int h=0;h<12;h++)
for(int m=0;m<60;m++)
for(int s=0;s<60;s++)
{
Serial.println(h);
Serial.println(m);
Serial.println(s);
watch(h,m,s);
delay(1000);
}
}
这是程序,我用的是中景的OLED1.3寸屏
还有几个问题,时针,分针,秒针怎么计算比较好,还有时钟内12个数字的摆放位置,我是不断调试才摆出这样位置,但是没用到算法,后期一些制作肯定没用,有没有好的算法推荐下 设置了打印输出,循环中的h,m,s没问题啊,为什么指针转不起来 我觉得数字时钟更容易 suoma 发表于 2015-3-29 16:34 static/image/common/back.gif
我觉得数字时钟更容易
模拟的比较酷~~~但是就是不能转啊 请问关于u8g库有没有不翻墙也可以看的详细资料? butOn 发表于 2015-3-30 12:50 static/image/common/back.gif
请问关于u8g库有没有不翻墙也可以看的详细资料?
直接看库自带的例子就可以了吧 0406445 发表于 2015-4-3 14:33 static/image/common/back.gif
直接看库自带的例子就可以了吧
模拟时钟的指针是画出来的,每一秒钟需要重画一次,画的过程清屏,重画.类是动画.:D butOn 发表于 2015-3-30 12:50 static/image/common/back.gif
请问关于u8g库有没有不翻墙也可以看的详细资料?
U8glib 在 google code 上的文档,下载打包,避免翻墙~ fatfox 发表于 2015-4-4 14:28 static/image/common/back.gif
U8glib 在 google code 上的文档,下载打包,避免翻墙~
谢谢!! 😊 把 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);//秒针
}
我的悲催了.刚收到,点亮完好,手一拿杯子喝水勾到USB线了.掉地上就成这样了.:Q 我也用的是中景的 OLED1.3寸屏,可是主控是 QT1106 P07A ,由于没有相应驱动库文件,使用SSD1306驱动库只有上方1/4显示正常,下方乱码,请问您用的什么库文件。能帮我解决吗? 把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); //时钟程序
页:
[1]