tom 发表于 2013-8-5 12:12:52

Miscrodruino-OLED12864正弦余弦图形显示

本帖最后由 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 代码如下:
//使用mircoOLED绘制余弦图形
#include "U8glib.h"

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

#define u8g_logo_width 40
#define u8g_logo_height 24

void draw_rect(void)//绘制一个十字形,水平线居中,竖线靠左
{
//将坐标的原点定在屏幕的中央,为了方便看见,Y轴定在X=10位置上
//坐标的原点为(10,32)
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);
}
void aa(void) //描绘余弦函数图形,用点函数
{

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

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

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);
}
}

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

void setup(void) {

}

void loop(void) {
// picture loop
u8g.firstPage();
do {

    draw();
}
while( u8g.nextPage() );

// rebuild the picture after some delay
delay(500);
}


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

fangtaonj 发表于 2013-8-5 13:10:08

非常好的例程!谢谢!

ゞ從淚認識む 发表于 2013-8-24 17:18:27

求库文件与接线图。。。我的OLED是T2C的啊

tom 发表于 2013-8-24 20:44:47

ゞ從淚認識む 发表于 2013-8-24 17:18 static/image/common/back.gif
求库文件与接线图。。。我的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'

tom 发表于 2013-10-12 21:45:03

美貌与智慧齐飞 发表于 2013-10-11 23:48 static/image/common/back.gif
我运行时,老出现编译出错,觉得是U8glib这个库有问题,还望指教……\Work\arduino-1.0.4\libraries\U8glib ...

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

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

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

maxims 发表于 2013-11-15 09:47:04

好教程……

xz1992 发表于 2014-4-23 02:27:20

请问: switch (getRotation()) {
case 1:
    swap(x, y);
    x = WIDTH - x - 1;
    break;
}
中的getRotation()、swap(x, y);函数怎么找啊?

huayangshiboqi 发表于 2016-12-4 19:58:31

非常棒,请问楼主有没有用过msp430f5529写过相应的代码呢?求分享。

王云飞 发表于 2016-12-23 16:55:04

把超声波测距传感器测得数据以坐标点的形式表示在OLED上建立的坐标系上如何做呢?
页: [1]
查看完整版本: Miscrodruino-OLED12864正弦余弦图形显示