查看: 243|回复: 2

[基础] [Arduino STM32] 03:OLED 驱动

[复制链接]

33

主题

2

好友

5287

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 1294 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 在线之王勋章

    发表于 2016-11-20 16:25:36 |显示全部楼层
    本帖最后由 slotg 于 2016-11-20 16:27 编辑

    并不是每一个 Arduino AVR 的程序都可以直接使用在 Arduino STM32 板上的,点完了 LCD 之后接下来也要试一下 OLED 的驱动,找了一个使用 Adafruit 库在 Arduino AVR 板上可以运行的例程直接在 STM32 下编译,结果却产生了错误!这貌似是库的支持不兼容,问题目前还在确认中,不过在 Arduino 官网论坛看到了这一篇帖子:

    http://forum.arduino.cc/index.php?topic=265904.2115

    有人改写了 Adafruit_SSD1306 库,让这个库可以在 Arduino STM32 底下运行,程序中对于 SPI 接口方式的 OLED 管脚是这么声明的:

    #define OLED_DC   22   //   D/C   6
    #define OLED_RST  21   //   RST   5
    #define OLED_MOSI 20   //   SDA   4
    #define OLED_CLK  19   //   SCL   3
    #define OLED_CS   14   //   ---   x Not Connected

    对应于 Arduino STM32 板的管脚为:

    22  ->  B6
    21  ->  B5
    20  ->  B4
    19  ->  B3
    14  ->  A14

    主程序:
    1. /*
    2.    Using Display: http://www.ebay.com/itm/301504841805
    3.    Compiled Arduino GUI 1.6.1 on 2015-04-01 by M. Ray Burnette
    4.      Sketch uses 27,912 bytes (25%) of program storage space. Maximum is 108,000 bytes.
    5.      Global variables use 5,616 bytes of dynamic memory.
    6.    THIS VERSION OF SSD1306 IS SOFTWARE SPI ONLY!!!
    7.    https://github.com/hwiguna/g33k/blob/master/ArduinoProjects/128x64_OLED/HariChord/HariChord.ino
    8. */

    9.   #include ".\Adafruit_GFX.h"
    10.   #include ".\Adafruit_SSD1306.h"

    11. // software SPI works on Maple Mini ARM 32-bit
    12.   // use these settings for the OLED display...
    13.   // These pin #'s are for Maple Mini/UNO/Nano/Mini328
    14.   //     __Signal__Maple_//__OLED 128x64___
    15.   #define OLED_DC   22   //   D/C   6
    16.   #define OLED_RST  21   //   RST   5
    17.   #define OLED_MOSI 20   //   SDA   4
    18.   #define OLED_CLK  19   //   SCL   3
    19.   #define OLED_CS   14   //   ---   x Not Connected
    20.   Adafruit_SSD1306 OLED(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RST, OLED_CS);

    21. int nFrames = 36;

    22. void setup()   {
    23.   pinMode(17, OUTPUT);
    24.   pinMode(18, OUTPUT);
    25.   digitalWrite(17, LOW);
    26.   digitalWrite(18, HIGH);
    27.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
    28.   OLED.begin(SSD1306_SWITCHCAPVCC);
    29.   // init done
    30.   
    31.   // Show image buffer on the display hardware.
    32.   // Since the buffer is intialized with an Adafruit splashscreen
    33.   // internally, this will display the splashscreen.
    34.   // NOTE: You _must_ call display after making any drawing commands
    35.   // to make them visible on the display hardware!
    36.   OLED.display();                // Adafruit Splash
    37.   OLED.clearDisplay();           // Clear the buffer.
    38.   // Y = 15 is the Blank Line between yellow / blue
    39. }

    40. void loop() {
    41.   for (int frame=0; frame < nFrames; frame++)
    42.   {
    43.     HariChord(frame);
    44.   }

    45.   for (int frame=(nFrames-1); frame >= 0; frame--)
    46.   {
    47.     HariChord(frame);
    48.   }
    49. }

    50. void HariChord(int frame)
    51. {
    52.   OLED.clearDisplay();
    53.   int n = 7;
    54.   int r = frame * 64 / nFrames;
    55.   float rot = frame * 2*PI / nFrames;
    56.   for (int i=0; i<(n-1); i++)
    57.   {
    58.     float a = rot + i * 2*PI / n;
    59.     int x1 = 64 + cos(a) * r;
    60.     int y1 = 32 + sin(a) * r;
    61.     for (int j=i+1; j<n; j++)
    62.     {
    63.       a = rot + j * 2*PI / n;
    64.       int x2 = 64 + cos(a) * r;
    65.       int y2 = 32 + sin(a) * r;
    66.       OLED.drawLine(x1,y1, x2,y2, WHITE);
    67.     }
    68.   }
    69.   OLED.display();
    70. }
    复制代码
    运行结果:
    20161117223121.gif


    包括库与例程的压缩文件:
    SSD1306-HariChord_swSPI.zip (15.93 KB, 下载次数: 8)


    [Arduino STM32] 02:LCD5110 驱动
    [Arduino STM32] 01:管脚编号 PIN_MAP
    Arduino STM32 编程体验





    回复

    使用道具 举报

    8

    主题

    0

    好友

    1085

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    11 小时前
  • 签到天数: 237 天

    [LV.7]常住居民III

    发表于 2016-11-21 09:27:09 |显示全部楼层
    这个图像变化搞得很溜啊。
    回复

    使用道具 举报

    33

    主题

    2

    好友

    5287

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 1294 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 在线之王勋章

    发表于 2016-11-21 09:48:34 |显示全部楼层
    yanhaijian 发表于 2016-11-21 09:27
    这个图像变化搞得很溜啊。

    32位的M3跑起来当然是比8位的AVR来的快。
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-6 20:27 , Processed in 0.092130 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部