极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16752|回复: 9

Miscrodruino-OLED12864正弦余弦图形显示

[复制链接]
发表于 2013-8-5 12:12:52 | 显示全部楼层 |阅读模式
本帖最后由 tom 于 2013-8-6 22:45 编辑

/*
作者:tom
时间:2013年08月05日
IDE版本号:1.01
发表地址:www.geek-workshop.com
作用:使用OLED12864显示正弦余弦图形

*/

Miscrodruino-OLED12864正弦余弦图形显示
使用U8glib-V2.1
正弦表达式Y=A*sin(B*x)+C
其中A为正弦波的振幅,它的值越大,它波的最上点与最下点之间距离越大。
C 值越大,正弦波水平线越来越高。
Y Y轴的值

12864高度是64,一半是32,为了不至于看不见最高点,A值 选取31。

12864 屏幕显示128*64。
如是描绘一个水平轴在屏幕的中间线它的坐标是从(0,32)到 (128,32);竖直线是从(10,0)到 (10,64);为了能方便看到竖直轴,它的横坐标定位于10。

u8g.drawLine(0,32,128,32);//描绘坐标系X轴
  u8g.drawLine(10,0,10,64);//描绘坐标系Y轴
再给它再上小箭头
   //Y轴小箭头从(10,0)开始画线,X轴小箭头从(128,32)开始画线
  u8g.drawLine(10,0,7,4);//描绘小箭头
  u8g.drawLine(10,0,13,4);
  u8g.drawLine(128,32,124,28);//另一个小箭头
  u8g.drawLine(128,32,124,36);

这样看上去有点坐标的感觉了。
正弦函数程序段
为了能让起点落在绘出的坐标系的原点上 ,在使用drawPixel()正弦函数的横坐标值增加10
  for (u8g_uint_t x=0;x<128;x++)
  {
    u8g_uint_t y;
    y=32-31*sin(x*3.14/28);
    //正弦波显示
    u8g.drawPixel(x+10,y);
  }


Arduino 代码如下:
  1. //使用mircoOLED绘制余弦图形
  2. #include "U8glib.h"

  3. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)

  4. #define u8g_logo_width 40
  5. #define u8g_logo_height 24

  6. void draw_rect(void)//绘制一个十字形,水平线居中,竖线靠左
  7. {
  8.   //将坐标的原点定在屏幕的中央,为了方便看见,Y轴定在X=10位置上
  9.   //坐标的原点为(10,32)
  10.   u8g.drawLine(0,32,128,32);//描绘坐标系X轴
  11.   u8g.drawLine(10,0,10,64);//描绘坐标系Y轴
  12.   //Y轴小箭头从(10,0)开始画线,X轴小箭头从(128,32)开始画线
  13.   u8g.drawLine(10,0,7,4);//描绘小箭头
  14.   u8g.drawLine(10,0,13,4);
  15.   u8g.drawLine(128,32,124,28);//另一个小箭头
  16.   u8g.drawLine(128,32,124,36);
  17. }
  18. void aa(void) //描绘余弦函数图形,用点函数
  19. {

  20.   for (u8g_uint_t x=0;x<128;x++)
  21.   {
  22.     u8g_uint_t y;
  23.     y=32-31*cos(x*3.14/28);
  24.     //余弦波显示
  25.     u8g.drawPixel(x+10,y);//点的坐标X值+10这样起点就正好到了坐标的交叉点
  26.   }
  27. }

  28. void bb(void) //描绘正弦函数图形,用点函数
  29. {

  30.   for (u8g_uint_t x=0;x<128;x++)
  31.   {
  32.     u8g_uint_t y;
  33.     y=32-31*sin(x*3.14/28);
  34.     //正弦波显示
  35.     u8g.drawPixel(x+10,y);
  36.   }
  37. }

  38. void draw(void) {
  39.   draw_rect();//绘制坐标系----十字型
  40.   //  aa();//余弦图形
  41.   bb();
  42. }

  43. void setup(void) {

  44. }

  45. void loop(void) {
  46.   // picture loop
  47.   u8g.firstPage();  
  48.   do {

  49.     draw();
  50.   }
  51.   while( u8g.nextPage() );

  52.   // rebuild the picture after some delay
  53.   delay(500);
  54. }

复制代码

运行后的效果:
在屏幕在有一个由点组成的正弦/余弦图形在坐标上。

OLED_12864正弦图片.JPG

评分

参与人数 1 +3 收起 理由
Microduino + 3

查看全部评分

回复

使用道具 举报

发表于 2013-8-5 13:10:08 | 显示全部楼层
非常好的例程!谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-8-24 17:18:27 | 显示全部楼层
求库文件与接线图。。。我的OLED是T2C的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-24 20:44:47 | 显示全部楼层
ゞ從淚認識む 发表于 2013-8-24 17:18
求库文件与接线图。。。我的OLED是T2C的啊

http://www.geek-workshop.com/thread-5483-1-1.html

参考这个
回复 支持 反对

使用道具 举报

发表于 2013-10-11 23:48:19 | 显示全部楼层
我运行时,老出现编译出错,觉得是U8glib这个库有问题,还望指教……\Work\arduino-1.0.4\libraries\U8glib\utility\u8g_dev_ssd1351_128x128.c:494: warning: implicit declaration of function 'u8g_dev_pbxh16_base_fn'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-12 21:45:03 | 显示全部楼层
美貌与智慧齐飞 发表于 2013-10-11 23:48
我运行时,老出现编译出错,觉得是U8glib这个库有问题,还望指教……\Work\arduino-1.0.4\libraries\U8glib ...

是不是选错了驱动
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);   

还有这个硬件是要张老师的Microdruino-OLED

至于u8glib库,是V1.13版 还是1.12版 。
由于时间太长了,不得而知了。你多试一试吧
回复 支持 反对

使用道具 举报

发表于 2013-11-15 09:47:04 来自手机 | 显示全部楼层
好教程……
回复 支持 反对

使用道具 举报

发表于 2014-4-23 02:27:20 | 显示全部楼层
请问: switch (getRotation()) {
  case 1:
    swap(x, y);
    x = WIDTH - x - 1;
    break;
}
中的getRotation()、swap(x, y);函数怎么找啊?
回复 支持 反对

使用道具 举报

发表于 2016-12-4 19:58:31 | 显示全部楼层
非常棒,请问楼主有没有用过msp430f5529写过相应的代码呢?求分享。
回复 支持 反对

使用道具 举报

发表于 2016-12-23 16:55:04 | 显示全部楼层
把超声波测距传感器测得数据以坐标点的形式表示在OLED上建立的坐标系上如何做呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-9-28 22:10 , Processed in 0.053125 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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