1

I am reading sensory data that comes from the digital inputs(two DHT11 Humidity sensors using adafruit library.) and I would like to add a hh:mm:ss real time counts next to them. I try to use the time.h library but could not understand how to worked it in that way.

My code is;

#include "DHT.h"
#define DHT1PIN 4
#define DHT2PIN 7
#define DHT1TYPE DHT11
#define DHT2TYPE DHT11
DHT dht1(DHT1PIN, DHT1TYPE); 
DHT dht2(DHT2PIN, DHT2TYPE);
void setup() { 
 Serial.begin(9600); 
 Serial.println("Humidity sensors DHT11 tests!"); 
 dht1.begin(); 
 dht2.begin(); 
}
void loop() { 
 delay(2000);
 float h1 = dht1.readHumidity(); 
 float t1 = dht1.readTemperature(); 
 float h2 = dht2.readHumidity(); 
 float t2 = dht2.readTemperature();
 if (isnan(t1) || isnan(h1)) {
 Serial.println("Failed to read from DHT #1");
 } else { 
 Serial.print(h1); Serial.print(" \t"); 
 } 
 if (isnan(t2) || isnan(h2)) {
 Serial.println("Failed to read from DHT #2");
 } else { 
 Serial.print(h2); 
 Serial.print(" \t"); 
 } 
 Serial.println(); 
}

and my serial port out is; enter image description here

and I want it to be like that; enter image description here

Any help will appreciated.

asked May 29, 2016 at 16:47
7
  • Did you add a RTC to the circuit? Commented May 29, 2016 at 17:04
  • No I want it to read the clock from compter. Commented May 29, 2016 at 17:06
  • 2
    Then there's no way the Arduino can know the time. Write a custom host-side program. Commented May 29, 2016 at 17:08
  • Isn't there a way to know the time of data that printed on a serial? Commented May 29, 2016 at 17:12
  • Sure. The host will know. But that means a host-side program. Commented May 29, 2016 at 17:14

1 Answer 1

0

I solved the problem by using millis() function. And now I ca get results like these; enter image description here

My code is;

#include <Sensirion.h>
#include "DHT.h"
unsigned long time;
#define DHT1PIN 4
#define DHT2PIN 7
#define DHT1TYPE DHT11
#define DHT2TYPE DHT11
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
const uint8_t dataPin = 9; // SHT serial data
const uint8_t sclkPin = 8; // SHT serial clock
const uint8_t ledPin = 13; // Arduino built-in LED
const uint32_t TRHSTEP = 1000UL; // Sensor query period
const uint32_t BLINKSTEP = 250UL; // LED blink period
Sensirion sht = Sensirion(dataPin, sclkPin);
uint16_t rawData;
float temperature;
float humidity;
float dewpoint;
byte ledState = 0;
byte measActive = false;
byte measType = TEMP;
unsigned long trhMillis = 0; // Time interval tracking
unsigned long blinkMillis = 0;
void setup() {
 dht1.begin();
 dht2.begin();
 Serial.begin(9600);
 Serial.println("In.(%) In.Tem(*C) Out.(%) Time");
 pinMode(ledPin, OUTPUT);
 delay(15); // Wait >= 11 ms before first cmd
 // Demonstrate blocking calls
 sht.measTemp(&rawData); // sht.meas(TEMP, &rawData, BLOCK)
 temperature = sht.calcTemp(rawData);
 sht.measHumi(&rawData); // sht.meas(HUMI, &rawData, BLOCK)
 humidity = sht.calcHumi(rawData, temperature);
 dewpoint = sht.calcDewpoint(humidity, temperature);
 logData();
}
void loop() {
 unsigned long curMillis = millis(); // Get current time
 // Rapidly blink LED. Blocking calls take too long to allow this.
 if (curMillis - blinkMillis >= BLINKSTEP) { // Time to toggle the LED state?
 ledState ^= 1;
 digitalWrite(ledPin, ledState);
 blinkMillis = curMillis;
 }
 // Demonstrate non-blocking calls
 if (curMillis - trhMillis >= TRHSTEP) { // Time for new measurements?
 measActive = true;
 measType = TEMP;
 sht.meas(TEMP, &rawData, NONBLOCK); // Start temp measurement
 trhMillis = curMillis;
 }
 if (measActive && sht.measRdy()) { // Note: no error checking
 if (measType == TEMP) { // Process temp or humi?
 measType = HUMI;
 temperature = sht.calcTemp(rawData); // Convert raw sensor data
 sht.meas(HUMI, &rawData, NONBLOCK); // Start humidity measurement
 float h2 = dht2.readHumidity();
 float t2 = dht2.readTemperature();
 Serial.print(humidity);
 Serial.print(" \t");
 Serial.print(temperature);
 Serial.print(" \t");
 if (isnan(t2) || isnan(h2)) {
 Serial.println("Failed to read from DHT #1");
 } else {
 Serial.print(h2);
 Serial.print(" \t");
 //time = millis();
 //prints time since program started
 Serial.println(curMillis);
 }
 Serial.println();
 }
 else {
 measActive = false;
 humidity = sht.calcHumi(rawData, temperature); // Convert raw sensor data
 dewpoint = sht.calcDewpoint(humidity, temperature);
 logData();
 }
 }
}
void logData() {
}

But the difference is that I am using SHT75 instead of another DHT11 so I am simultaneously acquiring data from the both of them. Thanks for everyone!

answered Jun 1, 2016 at 12:27

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.