查看: 165|回复: 2

[经验] gokit_2 arduino底板添加oled显示程序

[复制链接]
  • TA的每日心情
    开心
    2020-1-26 10:20
  • 签到天数: 450 天

    [LV.9]以坛为家II

    发表于 2019-12-3 21:32 | 显示全部楼层 |阅读模式
    几年前就入手一块gokit_2开发板.后来自己想添加oled显示温湿度.但在网上搜了很多相关资料.都没有提供具体程序.随后便在机智云上下载了arduino底板程序.
    由于程序中用的是ssd1306.h库,该库没有提供示例程序,所以一直写不出怎样输出变量的语句.无奈之下想用Adafruit_SSD1306.h库来更换ssd1306.h库.但其占用
    动态内存太大而没能成功.现在我用U8glib.h来替换ssd1306.h改写了gokit_2程序五部分(gokit_2, gokit.cpp, gokit.h, protocol.cpp, protocol.h)中的
    gokit_2程序.程序如下:
    #include <DHT.h>
    #include <I2Cdev.h>
    #include <MemoryFree.h>
    #include <MsTimer2.h>
    //#include <SSD1306.h>
    #include <U8glib.h>
    #include <ChainableLED.h>
    #include <Arduino.h>
    #include <SoftwareSerial.h>
    #include "Wire.h"
    #include "GoKit.h"
    int c;

    #define OLED_DC 9
    #define OLED_CS 10
    #define OLED_CLK 13
    #define OLED_MOSI 11
    #define OLED_RESET 8
    U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9, 8);
    //SSD1306 oled(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
    void tube_impulse() {      //自加
    c++;
    }
    void setup()
    {

      GoKit_Init();
    //  oled.ssd1306_init(SSD1306_SWITCHCAPVCC);
      //oled.drawstring(0,3,"     Hello World!   ");
    // oled.display();
      #if (DEBUG==1)
      Serial.println("GoKit init  OK!");
      Serial.print("freeMemory()=");
      Serial.println(freeMemory());
      #endif
       attachInterrupt(0, tube_impulse, FALLING);
      delay(4000);

    }

      
    void loop() {
      u8g.firstPage();  
      do {
        draw();
      } while( u8g.nextPage() );


      GoKit_Handle();
    }
    void draw()  
    {
    u8g.setFont(u8g_font_10x20);  
    u8g.drawStr(0,16,"COUT:");
    u8g.drawStr(0,40,"TEMP:");
    u8g.drawStr(0,63,"HUMI:");
    u8g.drawStr(120,16,"P");
    u8g.drawStr(120,40,"C");
    u8g.drawStr(120,63,"%");
    u8g.setPrintPos( 110,40);
    u8g.print(char(176));      

    u8g.setPrintPos( 70,16);
    u8g.print(c);      

    u8g.setPrintPos( 70, 40);
    u8g.print((unsigned char)dht.readTemperature());

    u8g.setPrintPos( 70, 63);
    u8g.print((unsigned char)dht.readHumidity());
      
    }  
    其中还增加了一段计数中断程序来计算来自pin2脚的触发脉冲数.在开发板上也可通过用手遮挡红外收发管来看计数效果.
    不知何故实际效果图片上传不了,再说吧.
       .

  • TA的每日心情
    开心
    2020-1-26 10:20
  • 签到天数: 450 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-12-3 22:31 | 显示全部楼层
    本帖最后由 lwq1947 于 2019-12-4 04:48 编辑

    图片链接:https://pan.baidu.com/s/1gSHbDzucv8baZBH3ny1PXg
    提取码:e8mv
    复制这段内容后打开百度网盘手机App,操作更方便哦
  • TA的每日心情
    开心
    2020-1-26 10:20
  • 签到天数: 450 天

    [LV.9]以坛为家II

     楼主| 发表于 2019-12-5 06:11 | 显示全部楼层
    又修改了程序使得oled显示屏可已直接插到开发板上.
    #include <DHT.h>
    #include <I2Cdev.h>
    #include <MemoryFree.h>
    #include <MsTimer2.h>
    //#include <SSD1306.h>
    #include <U8glib.h>
    #include <ChainableLED.h>
    #include <Arduino.h>
    #include <SoftwareSerial.h>
    #include "Wire.h"
    #include "GoKit.h"
    int c;

      #define OLED_DC 9
    #define OLED_CS 8
    #define OLED_CLK 11
    #define OLED_MOSI 13
    #define OLED_RESET 10

    U8GLIB_SSD1306_128X64 u8g(11, 13, 8, 9, 10);

    void tube_impulse() {      //自加
    c++;
    }
    void setup()
    {

      GoKit_Init();
    u8g.firstPage();  
      do {
        u8g.setFont(u8g_font_osb21);
      u8g.drawStr( 10, 50, "GoKit_2");
      } while( u8g.nextPage() );
      #if (DEBUG==1)
      Serial.println("GoKit init  OK!");
      Serial.print("freeMemory()=");
      Serial.println(freeMemory());
      #endif
       attachInterrupt(0, tube_impulse, FALLING);
      delay(2000);

    }

      
    void loop() {
      u8g.firstPage();  
      do {
       draw();
      } while( u8g.nextPage() );


      GoKit_Handle();
    }
    void draw()  
    {
    u8g.setFont(u8g_font_10x20);  
    u8g.drawStr(0,16,"COUT:");
    u8g.drawStr(0,40,"TEMP:");
    u8g.drawStr(0,63,"HUMI:");
    u8g.drawStr(116,16,"P");
    u8g.drawStr(116,40,"C");
    u8g.drawStr(116,63,"%");
    u8g.setPrintPos( 110,40);
    u8g.print(char(176));      

    u8g.setPrintPos( 70,16);
    u8g.print(c);      

    u8g.setPrintPos( 70, 40);
    u8g.print((unsigned char)dht.readTemperature());

    u8g.setPrintPos( 70, 63);
    u8g.print((unsigned char)dht.readHumidity());
      
         
      }      
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    小爱同学+Blinker控制灯
    小爱同学+Blinker控制灯
    来这个社区已经很久了,有很多问题都是在这里解决的。在此谢谢他们!这里我也分享一个
    使用74hc595驱动一位数码管
    使用74hc595驱动一位数码
    74hc595是一种常用的I/O拓展芯片,今天我尝试用一个74hc595来驱动一个一位七段数码管
    74HC595的疑惑终于解开
    74HC595的疑惑终于解开
    对于74HC595的教程中和网上的资料看完还是模糊,于是一边接线测试,一边反复看图研究
    数据转换求助!!!
    数据转换求助!!!
    如何将 String str =“123,2132,1321,11”; 转换成 uint16_t A[4]= str
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表