查看: 400|回复: 2

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

[复制链接]
  • TA的每日心情
    开心
    2020-9-20 05:13
  • 签到天数: 683 天

    [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-9-20 05:13
  • 签到天数: 683 天

    [LV.9]以坛为家II

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

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

    [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());
      
         
      }      
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    ESP8266物联网创意点阵时钟,女朋友看了都想要!
    ESP8266物联网创意点阵时
    [md]本文作者:默 & 铁熊 前段时间我在网上看到了一款很有意思的点阵时钟,它可以
    小白救助 让LED等按顺序亮的程序
    小白救助 让LED等按顺序亮
    如何让4个led按图片的顺序依次亮 就算第一个亮一次 第二个亮两次 第三个亮三次 第四个
    让LED等按顺序亮的程序
    让LED等按顺序亮的程序
    网友eobeom提问帖,问题是:如何让4个led按图片的顺序依次亮,第一个亮一次、 第二个
    新手求助!blinker同步到米家,但手机里的小爱控制不了ESP8266
    新手求助!blinker同步到
    搞了两个晚上还是没解决,请大神帮忙看看 我的手机是苹果手机,下了点灯,米家,小爱
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表