double Fahrenheit(double celsius)
{
        ;
}    //摄氏温度度转化为华氏温度

double Kelvin(double celsius)
{
        return celsius + 273.15;
}     //摄氏温度转化为开氏温度

// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        );
        SUM += 5.02808 * log10(A0);
        SUM += -, (-/A0)))-) ;
        SUM += ,(-)))-) ;
        SUM += log10(1013.246);
        , SUM-) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        );
        double Td = (b * temp) / (a - temp);
        return Td;
}
static const unsigned char PROGMEM str_1[] =
{
0x00,0x08,0x43,0xFC,0x32,0x08,0x12,0x08,
      0x83,0xF8,0x62,0x08,0x22,0x08,0x0B,0xF8,
      0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,
      0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x20,0x00,
  };//温

static const unsigned char PROGMEM str_2[] =
{
0x01,0x00,0x00,0x84,0x3F,0xFE,0x22,0x20,
      0x22,0x28,0x3F,0xFC,0x22,0x20,0x23,0xE0,
      0x20,0x00,0x2F,0xF0,0x22,0x20,0x21,0x40,
      0x20,0x80,0x43,0x60,0x8C,0x1E,0x30,0x04,
  };  // 度

static const unsigned char PROGMEM str_3[] =
{
0x00,0x08,0x47,0xFC,0x34,0x08,0x14,0x08,
      0x87,0xF8,0x64,0x08,0x24,0x08,0x0F,0xF8,
      0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,
      0x23,0x30,0x21,0x24,0x3F,0xFE,0x20,0x00,
  }; //湿
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <dht11.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>

dht11 DHT11;
#define DHT11PIN 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);  

#define LOGO16_GLCD_HEIGHT 16 //定义显示高度
#define LOGO16_GLCD_WIDTH  16 //定义显示宽度  

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void printDateTime(DateTime dateTime);
//创建实例
RTC_DS1307 RTC;

DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
uint8_t bell[] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
];
], Str_month[], Str_date[], Str_DoW[], Str_hour[], Str_minute[], Str_second[];
String recivedStr="";//接收到的字符串
;//接收到的字符个数
void setup()   {
  Serial.begin();
  Wire.begin();
  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)  //OLED 的I2C位置
  // init done  

  display.clearDisplay();
  ////////////////

 // Serial.println("Please enter the time: year[2]month[2]date[2]DoW[2]hour[2]minute[2]second[2]");
 // Serial.println("example: 2014-12-3 Wednesday 14:15:15 enter:14120303141515");//1703072154
  //英文字符显示
  //display.setTextSize(1);             //设置字体大小
  //display.setTextColor(WHITE);        //设置字体颜色白色
  //display.setCursor(0,0);             //设置字体的起始位置
  //display.println("   zhongbest.com");//输出字符并换行
  //display.display();                  //把缓存的都显示
  //初始化实时时钟
  RTC.begin();
}  

void loop() {
   int chk = DHT11.read(DHT11PIN);

 // Serial.print("Read sensor: ");
//  switch (chk)
//  {
//    case DHTLIB_OK:
//                Serial.println("OK");
//                break;
//    case DHTLIB_ERROR_CHECKSUM:
//                Serial.println("Checksum error");
//                break;
//    case DHTLIB_ERROR_TIMEOUT:
//                Serial.println("Time out error");
//                break;
//    default:
//                Serial.println("Unknown error");
//                break;
//  }
  display.clearDisplay();
  //英文字符显示
  display.setTextSize();             //设置字体大小
  display.setTextColor(WHITE);        //设置字体颜色白色
  display.setCursor(,);             //设置字体的起始位置  

 // display.print("Humidity(%):");
 // display.println((float)DHT11.humidity, 2);

 // display.print("Temperature(oC):");

//  display.print("Temperature(oF):");
//  display.println(Fahrenheit(DHT11.temperature), 2);
//
//  display.print("Temperature(K):");
//  display.println(Kelvin(DHT11.temperature), 2);
//
//  display.print("Dew Point(oC):");
//  display.println(dewPoint(DHT11.temperature, DHT11.humidity));
//
//  display.print("Dew PointFast(oC):");
//  display.println(dewPointFast(DHT11.temperature, DHT11.humidity));
  //中文字符显示
  display.drawBitmap(, , str_1, , , ); //在坐标X:26  Y:16的位置显示中文字符中
  display.drawBitmap(, , str_2, , , ); //在坐标X:42  Y:16的位置显示中文字符贝
  display.setCursor(,);             //设置字体的起始位置
  display.setTextSize();             //设置字体大小
  display.print(":");
  display.println(();
   display.drawBitmap(, , str_3, , , ); //在坐标X:26  Y:16的位置显示中文字符中
  display.drawBitmap(, , str_2, , , ); //在坐标X:42  Y:16的位置显示中文字符贝
  display.setCursor(,);             //设置字体的起始位置
   display.setTextSize();             //设置字体大小
  display.print(":");
  display.println(();
  int val;
  val=analogRead();
 // Serial.println(val,DEC);
  display.setCursor(,);             //设置字体的起始位置
  display.print("MQ-2: ");
  display.println(val,DEC);
 // display.setCursor(0,60);
  display.print("-------------------");
  DateTime now = RTC.now();
//通过串口传送当前的日期和时间
  printDateTime(now);

  ///////////////////////////////////////////////////////////

   )//读取字符串
   {
      recivedStr += char(Serial.read());
//      delay(2);
      recivedNum = recivedNum+;
   }
   )
   {  //year[2]month[2]date[2]DoW[2]hour[2]minute[2]second[2]
       String strtemp = "";
       strtemp = recivedStr.substring(,);
       int years = strtemp.toInt();
       RTC.set(RTC_YEAR,years);//设置年

       strtemp = recivedStr.substring(,);
       int months = strtemp.toInt();
       RTC.set(RTC_MONTH,months);//设置月

       strtemp = recivedStr.substring(,);
       int days = strtemp.toInt();
       RTC.set(RTC_DAY,days);//设置日

       strtemp = recivedStr.substring(,);
       int hours = strtemp.toInt();
       RTC.set(RTC_HOUR,hours);//设置小时

       strtemp = recivedStr.substring(,);
       int minutes = strtemp.toInt();
       RTC.set(RTC_MINUTE,minutes);//设置分钟

       strtemp = recivedStr.substring(,);
       int seconds = strtemp.toInt();
       RTC.set(RTC_SECOND,seconds);//设置秒
       recivedNum = ;
   }
  display.display();                  //把缓存的都显示
  delay();
} 

void printDateTime(DateTime dateTime) {
    //传送年份
     display.setCursor(,);             //设置字体的起始位置
    display.print(dateTime.year(), DEC);
    display.print('/');
    //传送月份
    display.print(dateTime.month(), DEC);
    display.print('/');
    //传送月份中的第几天
    display.print(dateTime.day(), DEC);
    display.print(' ');
    //传送小时
    display.print(dateTime.hour(), DEC);
    display.print(':');
    //传送分钟
    display.print(dateTime.minute(), DEC);
    display.print(':');
    //传送秒
    display.print(dateTime.second(), DEC);
    display.display();                  //把缓存的都显示
}

模块:

OLED12864显示屏:

模块针脚        Arduino针脚

VCC     ---->   3.3V

GND    ---->    GND

SCL     ---->    A5

SDA    ---->    A4

烟雾传感器MQ-2:

VCC     ---->    5V

GND    ---->    GND

A0       ---->    A0

温湿度传感器DHT11:

+       ------>   5V

OUT  ------>    2

-       ------>    GND

时钟模块DS1307:

SCL     ------->   A5

SDA    ------->   A4

VCC    ------->   5V

GND   ------->  GND

Arduino-OLED-四度显示的更多相关文章

  1. 用STM32玩OLED(显示文字、图片、动图gif等)

    目录 用STM32玩OLED(显示文字.图片.动图gif等) 1. 显示字符串 2. 显示中文 3. 显示图片 4. 显示动图 5. 总结测试 用STM32玩OLED(显示文字.图片.动图gif等) ...

  2. PMS5003ST+Arduino Nano OLED屏显示

    整合OLED显示和PMS5003报数 #include <Arduino.h> #include <pms.h> /////////////////////////////// ...

  3. 东芝开发板驱动OLED模块显示LOGO图片

    前言 在之前的两篇评测文章: 使用系统定时器SysTick实现精确延时微秒和毫秒函数 东芝MCU实现位带操作 介绍了系统SysTick实现精确延时,GPIO的输入输出使用,并实现了位带方式操作GPIO ...

  4. 树莓派使用 OLED 屏显示图片及文字

    树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看.这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片 ...

  5. 用Arduino显示颜色序列(u8g2,OLED)

    目录 用Arduino显示颜色序列(u8g2,OLED) 用Arduino显示颜色序列(u8g2,OLED) 提前祝大家新年快乐! 主控:Arduino Mega 2560 硬件:126×64 OLE ...

  6. Arduino和C51开发OLED显示屏

    技术:51单片机.Arduino.OLED显示屏.U8glib   概述 OLED显示屏常常用作为智能产品的显示设备,本文简单介绍OLED显示屏的使用方法. 详细 代码下载:http://www.de ...

  7. ESP8266开发之旅 应用篇② OLED显示天气屏

    1.前言     这一篇,博主将教大家怎么去实现一个简易版本的天气助手.     先来一个博主已经实现功能的图片,如下: 1.1 知识储备     本篇需要用到以下知识点: 运用到ArduinoJso ...

  8. arduino驱动oled

    OLED一款小巧的显示屏,感觉可以做出很可爱的东西. 这次实验的这款是128X64的OLED屏幕 , 芯片是SSD1306,请确认自家模块芯片型号,不然对不上号啊 使用IIC的方法,简单实验显示示例程 ...

  9. 基于STM32的脉搏心率检测仪(OLED可以实时显示脉冲波形)

    —设计完整,功能可全部实现,有完整报告文档说明.程序以及pcb文件— 可作为:课程设计,STM32实践学习,电子制作等 设计所实现的功能: 利用STM32的AD采集功能实时采集心率传感器信号输出引脚输 ...

  10. MicroPython之TPYBoard v102开发板控制OLED显示中文

    转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...

随机推荐

  1. AI:PR的数学表示-传统方法PR

    前言: 接上一篇:AI:模式识别的数学表示 在图像处理PR领域,相对于ANN方法,其他的方法一般称为传统方法.在结构上,几乎所有的PR方法都是可解释的.且任一传统方法,在一定约束下,可以转换为SV近邻 ...

  2. AI:忧郁的机器人

    1.塔奇克马 塔奇克马研究起来哲学,被缴械....... 2.机器人瓦力 孤独等待EVA的瓦力 3.马文 http://www.guokr.com/post/683881/

  3. error C3859: 超过了PCH的虚拟内存范围;请使用“-Zm33”或更大的命令行选项重新编译

    编译 ORB_SLAM的Release版本时,出现了此问题: 错误 2 error C3859: 超过了 PCH 的虚拟内存范围;请使用"-Zm465"或更大的命令行 修改方法: ...

  4. Object::connect: No such slot (QT槽丢失问题)

    1.看看你的类声明中有没有Q_OBJECT,并继承public QMainWindow{ 例如: class CPlot: public QMainWindow{ Q_OBJECT 2.你声明的函数要 ...

  5. 我的web前端自学之路-心得篇:我为什么要学习web前端?

    时光如流水,转眼间,自己已经是大三的学长了,看着一个个学弟学妹,心中有种莫名的感觉,很怀念大学的前两年时光,但也很憧憬着自己的未来,自己将要去经历很多从未经历的事.我是我们学校信科院的一名学生,在编程 ...

  6. Java中StringTokenizer类的使用

    StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数. 1.构造函数 public StringTokenizer(String str) public Str ...

  7. 【转载】关于DBUtils中QueryRunner的一些解读

    前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. QueryRunner类 QueryRunner中提供对sql语 ...

  8. PAT_A1154#Vertex Coloring

    Source: PAT A 1154 Vertex Coloring (25 分) Description: A proper vertex coloring is a labeling of the ...

  9. 洛谷 P1068 分数线划定【排序+模拟】

    世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,AA市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150\%150%划 ...

  10. jQuery(UI)常用插件

    jQuery 官方网站:http://jquery.com/ 下载地址:http://jquery.com/download/ 插件地址: http://plugins.jquery.com/ 常用插 ...