2022-09-28 做创客难吗

2022-09-27  本文已影响0人  哏都唐姐姐
温度湿度测量

创客这个词,现在不怎么提了,创新很难。玩可以,但是总是出新比较难。有一个团队很好,总能推出新东西,这里不介绍,怕被锁。这里就讲讲基础的东西。

一套设备,就是传感器——感知周围物理化学的变化;存储器——把数据记录下来;通讯器——传递数据;当然还有处理器,把物理化学的信号变成电信号。

这样讲简单吧,当然有的时候幽默只在圈里,只有圈里人懂。

传感器—测量温度、空气湿度

显示器—显示数据

存储器—给出时间,存储数据

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

#include "Wire.h"

#include <LiquidCrystal.h>

//#include "LiquidCrystal_I2C.h"

#include "DHT.h"

#include "uRTCLib.h"

#include <AT24Cxx.h>

//#include "EEPROM.h"

#include <EEPROM.h>

#define DHTPIN 8

#define DHTTYPE DHT11

//#define DHTTYPE DHT22

#define i2c_address 0x57

  LiquidCrystal Lcd(7,6,5,4,3,2);

//设置LCD1602设备地址,这里的地址是0x3F,一般是0x20,或者0x27,具体看模块手册

//LiquidCrystal_I2C Lcd(0x27,16,2);

  DHT dht(DHTPIN,DHTTYPE);

  uRTCLib rtc(0x68);

  //uRTCLib rtc;

  int y1;

  int m1;

  int d1;

  int w1;

  int h1;

  int m2;

  int s1;

  float h;

  float t;

  int address;

  AT24Cxx eep(i2c_address, 32); // Initilaize using AT24CXX(i2c_address, size of eeprom in KB).

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  Serial.print("This is DATA OF HUMIDITY AND TEMPERATURE!\r\n");

//////

  delay (2000);

  #ifdef ARDUINO_ARCH_ESP8266

    URTCLIB_WIRE.begin(0, 2); // D3 and D4 on ESP8266

  #else

    URTCLIB_WIRE.begin();

  #endif

//rtc.set(0, 20, 15, 2, 27, 9, 22);

  //  RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)

//////

  dht.begin();

  Lcd.begin(16,2);

//Lcd.init();

//Lcd.backlight();

  Lcd.print("Hello world");

  delay(1000);

  Lcd.setCursor(7,1);

  Lcd.print("2022.9.28");

  address = eep.read(0);

  Serial.print("I2C address=");

  Serial.print(address);

  Serial.println();

  delay(1000);

}

void lcddoing()

{

  Lcd.clear();

  Lcd.setCursor(0,0);

  Lcd.print("Humidity:");

  Lcd.print(h);

  Lcd.print("%");

  Lcd.setCursor(0,1);

  Lcd.print("Temperat:");

  Lcd.print(t);

  Lcd.print("C");

  delay(5000);

  Lcd.clear();

  Lcd.setCursor(0,0);

  Lcd.print("date:");

  Lcd.print(y1);

  Lcd.print("-");

  Lcd.print(m1);

  Lcd.print("-");

  Lcd.print(d1);

  Lcd.print(" ");

  Lcd.print("dow");

  Lcd.setCursor(0,1);

  Lcd.print("time:");

  Lcd.print(h1);

  Lcd.print(":");

  Lcd.print(m2);

  Lcd.print(":");

  Lcd.print(s1);

  Lcd.print("  ");

  Lcd.print(w1);

  }

void serialdoing()

{

  rtc.refresh();

  y1=rtc.year();

  m1=rtc.month();

  d1=rtc.day();

  w1=rtc.dayOfWeek();

  h1=rtc.hour();

  m2=rtc.minute();

  s1=rtc.second();

  Serial.print("RTC DateTime: ");

  Serial.print(y1);

  Serial.print('/');

  Serial.print(m1);

  Serial.print('/');

  Serial.print(d1);

  Serial.print(' ');

  Serial.print(h1);

  Serial.print(':');

  Serial.print(m2);

  Serial.print(':');

  Serial.print(s1);

  Serial.print(" DOW: ");

  Serial.print(w1);

  //Serial.print(" - Temp: ");

  //Serial.print(rtc.temp()  / 100);

// Serial.println();

  delay(1000);

  h=dht.readHumidity();

  t=dht.readTemperature();

  float f=dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {

  Serial.println(F("Failed to read from DHT sensor!"));

    return;

  }

  Serial.print(F("      Humidity: "));

  Serial.print(h);

  Serial.print(F("%  Temperature: "));

  Serial.print(t);

  Serial.print(F("°C "));

  Serial.print("\r\n");

  delay(1000);

  }

void loop() {

  // put your main code here, to run repeatedly:

  serialdoing();

  //LCD doing...

  lcddoing();

  //24c32 doing...

  float add1;

  int y2;

  int m3;

  int d2;

  int h2;

  int m4;

  int s2;

  float hu;  //=0.00f;  // float f = 0.00f;

  float te;  //=0.00f;

  add1 = 14*address + 1;

  eep.update(add1,y1);

  y2=eep.read(add1);

  add1 = add1 + 1;

  eep.update(add1,m1);

  m3=eep.read(add1);

  add1 = add1 + 1;

  eep.update(add1,d1);

  d2=eep.read(add1);

  add1 = add1 + 1;

  eep.update(add1,h1);

  h2=eep.read(add1);

  add1 = add1 + 1;

  eep.update(add1,m2);

  m4=eep.read(add1);

  add1 = add1 + 1;

  eep.update(add1,s1);

  s2=eep.read(add1);

  add1 = add1 + 1;

  EEPROM.put(add1,h);

  // EEPROM.commit();

  //hu=eep.get(add1);

  EEPROM.get(add1, hu);

  add1 = add1 + 4;

  EEPROM.put(add1,t);

  //  EEPROM.commit();

  //te=eep.get(add1);

  EEPROM.get(add1, te);

  if (address == 255) {

    add1 = 0;

    address = 0;

    eep.update(0,address);

  }

  else

    address=address+1;

    {eep.update(0,address);

    }

  Serial.print("NO.") ; 

  Serial.print(address);

  Serial.print(" i2c'DateTime:");

  Serial.print(y2);

  Serial.print('-');

  Serial.print(m3);

  Serial.print('-');

  Serial.print(d2);

  Serial.print(' ');

  Serial.print(h2);

  Serial.print(':');

  Serial.print(m4);

  Serial.print(':');

  Serial.print(s2);

  Serial.print(F("      Humidity: "));

  Serial.print(hu);

  Serial.print(F("%  Temperature: "));

  Serial.print(te);

  Serial.print(F("°C "));

  Serial.print("\r\n");

}

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

这里就一个小难点,24c32的存储模式,是一个字节,对于int型数据很简单用read(),writer();对于float型数据,需要用到EEPROM.h 库中的put,get。

上一篇 下一篇

猜你喜欢

热点阅读