PaulS:
You meant that you wanted to shake some magic millis dust on your code and have it magically work.
As always I really like your humor!
but please if you know somehow help me out here.
Here is my new full code (best performace so far, but not 100% what I wish):
#include <DHT.h>
#include <Adafruit_NeoPixel.h>
unsigned long interval = 2000;
unsigned long previousMillis = 0;
#define DEBUG
#define DHT_PIN 2
#define DHT_TYPE DHT11 // DHT 11
DHT dht(DHT_PIN, DHT_TYPE);
#define NEO_PIN 6
#define NEO_NUM_LEDS 1
#define NEO_WAIT_uMS 5000
#define NEO_BLACK 0x000000 // 0, 0, 0
#define NEO_WHITE 0xFFFFFF // 255, 255, 255
#define NEO_YELLOW 0xFFFF00 // 255, 255, 0
#define NEO_ORANGE 0xFF6600 // 255, 102, 0
#define NEO_RED 0xFF0000 // 255, 0, 0
#define NEO_GREEN 0x00FF00 // 0, 255, 0
#define NEO_BLUE 0x0000FF // 0, 0, 255
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NEO_NUM_LEDS, NEO_PIN, NEO_BRG + NEO_KHZ800);
void setup()
{
#ifdef DEBUG
Serial.begin(9600);
#endif
dht.begin();
strip.begin();
strip.show();
strip.clear();
}
void loop()
{
offNeoPixel();
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= interval)
{
readSensor();
previousMillis = millis();
}
}
void readSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
#ifdef DEBUG
Serial.println(F("Failed to read from DHT sensor!"));
#endif
fadeNeoPixel(NEO_WHITE, NEO_WAIT_uMS);
}
else
{
#ifdef DEBUG
Serial.print(F("Temperature: "));
Serial.print(t);
Serial.print(F(" *C "));
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F(" %"));
Serial.println(F(""));
#endif
fadeOnSensorRead(t);
}
}
void fadeOnSensorRead(float t)
{
if ((t >= 0) && (t <= 10))
{
fadeNeoPixel(NEO_BLUE, NEO_WAIT_uMS);
}
else if ((t >= 18) && (t <= 27))
{
fadeNeoPixel(NEO_GREEN, NEO_WAIT_uMS);
}
else if ((t >= 26) && (t <= 32))
{
fadeNeoPixel(NEO_YELLOW, NEO_WAIT_uMS);
}
else if ((t >= 32) && (t <= 37))
{
fadeNeoPixel(NEO_ORANGE, NEO_WAIT_uMS);
}
else if ((t >= 37) && (t <= 45))
{
fadeNeoPixel(NEO_RED, NEO_WAIT_uMS);
}
}
void fadeNeoPixel(uint32_t color, int wait)
{
for(int b = 0; b < 255; b++)
{
for(int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, color*b/255);
}
strip.show();
delayMicroseconds(wait);
}
for(int b = 255; b > 0; b--)
{
for(int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, color*b/255);
}
strip.show();
delayMicroseconds(wait);
}
}
void offNeoPixel()
{
for( int i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, NEO_BLACK);
strip.show();
}
}