Hi! I am working on the following code. What I would like to do is to display the information at a certain time interval on classic 7 segment display, but without the delay() function, also, I am using two multiplexers 74hc595. I tried something with an if statement and millis(), but my display flickers and it doesn't work well at all. I also tried with while loops.
Who has time to help me?
void loop() {
chk = DHT.read(DHT11_PIN); //Read data of sensor DHT11
temp = DHT.temperature; //Reading the Temperature
umid = DHT.humidity; //Reading the Humidity
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > 3000) { //Timer of 3 seconds
previousMillis = currentMillis;
if (State == LOW) {
State = HIGH;
unitTemp = temp % 10;
perTemp = temp / 10;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 2); //Set DISPLAY 1 (top view from left to right)
shiftOut(dataPin, clockPin, LSBFIRST, num[perTemp]); //Set the Temperature (ten)
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 4); //Set DISPLAY 2
shiftOut(dataPin, clockPin, LSBFIRST, num[unitTemp]); //Set the Temperature (unit)
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 8); //Set DISPLAY 3
shiftOut(dataPin, clockPin, LSBFIRST, B11000110); //Set the degree symbol [º]
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 1); //Set DISPLAY 4
shiftOut(dataPin, clockPin, LSBFIRST, B10011100); //Set the symbol of Celsius [C]
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 1); //Set DISPLAY 4
shiftOut(dataPin, clockPin, LSBFIRST, ~255); //Reset the DISPLAY 4 (to avoid some flicking)
digitalWrite(latchPin, HIGH);
}
else {
State = LOW;
unitUmid = umid % 10;
perUmid = umid / 10;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 2); //Set DISPLAY 1
shiftOut(dataPin, clockPin, LSBFIRST, num[perUmid]); //Set the Humidity (ten)
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 4); //Set DISPLAY 2
shiftOut(dataPin, clockPin, LSBFIRST, num[unitUmid]); //Set the Humidity (unit)
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 8); //Set DISPLAY 3
shiftOut(dataPin, clockPin, LSBFIRST, B11000110); //Set the upper symbol of percentage [%] of Humidity
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 1); //Set DISPLAY 4
shiftOut(dataPin, clockPin, LSBFIRST, B00111010); //Set the lower symbol of percentage [%] of Humidity
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, 1); //Set Display 4
shiftOut(dataPin, clockPin, LSBFIRST, ~255); //Reset the DISPLAY 4 (to avoid some flicking)
digitalWrite(latchPin, HIGH);
}
}
} // loop


