TA的每日心情 | 开心 2019-12-5 04:04 |
---|
签到天数: 402 天 [LV.9]以坛为家II 
|
几年前就入手一块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脚的触发脉冲数.在开发板上也可通过用手遮挡红外收发管来看计数效果.
不知何故实际效果图片上传不了,再说吧.
.
|
|