WS2812 and DHTxx Sensor (Pulsing and timing issue)

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! :smiley: 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();
  } 
}