查看: 5769|回复: 3

【Makeblock使用】OLED动画

[复制链接]
  • TA的每日心情
    开心
    2018-6-16 16:25
  • 签到天数: 777 天

    [LV.10]以坛为家III

    发表于 2016-7-2 11:30 | 显示全部楼层 |阅读模式
    接上一篇帖子【Makeblock使用】蓝牙调光-Arduino中文社区 http://www.arduino.cn/thread-21506-1-1.html
    OLED介绍及与mega pi接线可参考http://www.arduino.cn/thread-21423-1-1.html主要说一下,OLED驱动有多种方法
    SSD1306驱动方式.jpg
    相比上次,这次采用HW_SPI,
    U8GLIB_SSD1306_128X64 u8g(cs,A0 );来完成
    效果图 20160702_111804[1].jpg 20160702_111810[1].jpg
    手机不是很清晰
    视频http://v.youku.com/v_show/id_XMTYyODU0NjQyNA==.html
    程序

    kittenblock中小学创客名师推荐的图形化编程软件

    void u8g_prepare(void) {
      u8g.setFont(u8g_font_6x10);
      u8g.setFontRefHeightExtendedText();
      u8g.setDefaultForegroundColor();
      u8g.setFontPosTop();
    }
    
    void u8g_box_frame(uint8_t a) {
      u8g.drawStr( 0, 0, "drawBox");
      u8g.drawBox(5,10,20,10);
      u8g.drawBox(10+a,15,30,7);
      u8g.drawStr( 0, 30, "drawFrame");
      u8g.drawFrame(5,10+30,20,10);
      u8g.drawFrame(10+a,15+30,30,7);
    }
    
    void u8g_disc_circle(uint8_t a) {
      u8g.drawStr( 0, 0, "drawDisc");
      u8g.drawDisc(10,18,9);
      u8g.drawDisc(24+a,16,7);
      u8g.drawStr( 0, 30, "drawCircle");
      u8g.drawCircle(10,18+30,9);
      u8g.drawCircle(24+a,16+30,7);
    }
    
    void u8g_r_frame(uint8_t a) {
      u8g.drawStr( 0, 0, "drawRFrame/Box");
      u8g.drawRFrame(5, 10,40,30, a+1);
      u8g.drawRBox(50, 10,25,40, a+1);
    }
    
    void u8g_string(uint8_t a) {
      u8g.drawStr(30+a,31, " 0");
      u8g.drawStr90(30,31+a, " 90");
      u8g.drawStr180(30-a,31, " 180");
      u8g.drawStr270(30,31-a, " 270");
    }
    
    void u8g_line(uint8_t a) {
      u8g.drawStr( 0, 0, "drawLine");
      u8g.drawLine(7+a, 10, 40, 55);
      u8g.drawLine(7+a*2, 10, 60, 55);
      u8g.drawLine(7+a*3, 10, 80, 55);
      u8g.drawLine(7+a*4, 10, 100, 55);
    }
    
    void u8g_triangle(uint8_t a) {
      uint16_t offset = a;
      u8g.drawStr( 0, 0, "drawTriangle");
      u8g.drawTriangle(14,7, 45,30, 10,40);
      u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
      u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
      u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
    }
    
    void u8g_ascii_1() {
      char s[2] = " ";
      uint8_t x, y;
      u8g.drawStr( 0, 0, "ASCII page 1");
      for( y = 0; y < 6; y++ ) {
        for( x = 0; x < 16; x++ ) {
          s[0] = y*16 + x + 32;
          u8g.drawStr(x*7, y*10+10, s);
        }
      }
    }
    
    void u8g_ascii_2() {
      char s[2] = " ";
      uint8_t x, y;
      u8g.drawStr( 0, 0, "ASCII page 2");
      for( y = 0; y < 6; y++ ) {
        for( x = 0; x < 16; x++ ) {
          s[0] = y*16 + x + 160;
          u8g.drawStr(x*7, y*10+10, s);
        }
      }
    }
    
        u8g.setRGB(255,255,255);
        u8g.drawStr( 66, 0, "Color Page");
      }
      else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
      {
        u8g.drawStr( 66, 0, "Gray Level");
        u8g.setColorIndex(1);
        u8g.drawBox(0, 4, 64, 32);    
        u8g.drawBox(70, 20, 4, 12);
        u8g.setColorIndex(2);
        u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
        u8g.drawBox(74, 20, 4, 12);
        u8g.setColorIndex(3);
        u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
        u8g.drawBox(78, 20, 4, 12);
      }
      else
      {
        u8g.drawStr( 0, 12, "setScale2x2");
        u8g.setScale2x2();
        u8g.drawStr( 0, 6+a, "setScale2x2");
        u8g.undoScale();
      }
    }
    
    
    uint8_t draw_state = 0;
    void draw(void) {
      u8g_prepare();
      switch(draw_state >> 3) {
        case 0: u8g_box_frame(draw_state&7); break;
        case 1: u8g_disc_circle(draw_state&7); break;
        case 2: u8g_r_frame(draw_state&7); break;
        case 3: u8g_string(draw_state&7); break;
        case 4: u8g_line(draw_state&7); break;
        case 5: u8g_triangle(draw_state&7); break;
        case 6: u8g_ascii_1(); break;
        case 7: u8g_ascii_2(); break;
        case 8: u8g_extra_page(draw_state&7); break;
      }
    }
    
    void setup(void) {
    
    #if defined(ARDUINO)
      pinMode(13, OUTPUT);           
      digitalWrite(13, HIGH);  
    #endif
    }
    
    void loop(void) {
      u8g.firstPage();  
      do {
        draw();
      } while( u8g.nextPage() );
      
    
      draw_state++;
      if ( draw_state >= 9*8 )
        draw_state = 0;
    
    }
    



  • TA的每日心情
    开心
    2018-6-16 16:25
  • 签到天数: 777 天

    [LV.10]以坛为家III

     楼主| 发表于 2016-7-2 13:15 | 显示全部楼层

    很普通的手机,没有对焦的
  • TA的每日心情
    无聊
    2019-11-7 22:10
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    发表于 2018-9-27 23:31 | 显示全部楼层
    不错可以的
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    程序设计问题求大虾们帮帮忙
    程序设计问题求大虾们帮帮
    大家好,我是一个萌新想设计一个程序,现在遇到困难了。当运行按下按钮,电机会向end
    请问 3块 MCP 4725 ,能否同时接在一起使用?
    请问 3块 MCP 4725 ,能否
    买来时,ADDR是全开路的,使用代码中的所有地址,均无法使用。 // For Adafruit M
    打砖块游戏
    打砖块游戏
    **** 本内容被作者隐藏 ****
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表