查看: 99|回复: 2

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

[复制链接]
  • TA的每日心情
    开心
    2019-12-5 04:04
  • 签到天数: 402 天

    [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的每日心情
    开心
    2019-12-5 04:04
  • 签到天数: 402 天

    [LV.9]以坛为家II

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

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

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

    本版积分规则

    热门推荐

    Blynk与m5stack basic以及uiflow的交互玩法
    Blynk与m5stack basic以及
    Blynk与m5stack basic以及uiflow的交互玩法 [准备工作我们假设玩家已经熟悉下面的准备
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    把一个废柴插座转眼变身远程控制智能插座
    把一个废柴插座转眼变身远
    把一个废柴插座转眼变身远程控制智能插座该项目主要基于Arduino D1 mini(wemos)模块
    让家里的空调也能远程控制
    让家里的空调也能远程控制
    让家里的空调也能远程控制 我们这里借用点灯科技的bliker平台(平台地址https://diand
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表