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.
-
Did you add a RTC to the circuit?Ignacio Vazquez-Abrams– Ignacio Vazquez-Abrams2016年05月29日 17:04:23 +00:00Commented May 29, 2016 at 17:04
-
No I want it to read the clock from compter.user21524– user215242016年05月29日 17:06:53 +00:00Commented May 29, 2016 at 17:06
-
2Then there's no way the Arduino can know the time. Write a custom host-side program.Ignacio Vazquez-Abrams– Ignacio Vazquez-Abrams2016年05月29日 17:08:58 +00:00Commented May 29, 2016 at 17:08
-
Isn't there a way to know the time of data that printed on a serial?user21524– user215242016年05月29日 17:12:30 +00:00Commented May 29, 2016 at 17:12
-
Sure. The host will know. But that means a host-side program.Ignacio Vazquez-Abrams– Ignacio Vazquez-Abrams2016年05月29日 17:14:25 +00:00Commented May 29, 2016 at 17:14
1 Answer 1
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!