Problema lanzando instrucciones a un display

Buenas!!!

Soy absolutamente novato en Arduino o la programación y me estoy volviendo un poco loco. Estoy haciendo un proyecto de sensor de humedad y temperatura, que saque los datos por una pantalla OLED SSD1306 y que abra un relé cuando se supere un determinado rango de humedad (el tema del pelé todavía no lo he introducido)

De momento he logrado sacar la información a la pantalla y poner un led que se ilumine con cada lectura y un sensor de luz que mida la luz ambiental. El caso es que me gustaría que cuando la luz ambiental estuviera debajo de un determinado rango el OLED se apagara (es para instalarlo en un trastero y así ahorra consumo), pero no soy capaz…

concretamente el programa “peta” a esta altura:

//medimos la luz ambiental
sensorluzvalor = analogRead(sensorluz);
if (sensorluzvalor<300){
display.clearDisplay();
return;

porque vuelve al comienzo del void loop() pero no “limpia” el display. Simplemente se queda con la última medición en pantalla. ¿qué estoy pasando por alto? adjunto todo el código a ver si alguien me puede ayudar…

/1. LIBRERIAS
#include "DHT.h"
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22   // MODELO DHT 22  (AM2302)

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16 
#define LOGO16_GLCD_WIDTH  16 
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

//2. VARIABLES 
//2.1. ESTATICAS
  float h ; //% de humedad
  float t ; //% de temperatura
  const int led = 3;
  const int sensorluz = A0;
  float sensorluzvalor = 0;
  
//2.2. DINAMICAS


//3. SETUP
void setup() {

  Serial.begin(9600); 
  Serial.println("BIENVENIDO. INICIALIZANDO");
  display.begin(SSD1306_SWITCHCAPVCC); //generamos 3,3v para el oled
  dht.begin();

  //inicializamos el PIN del LED testigo de la medicion
  pinMode(led,OUTPUT);

  
  // Clear the buffer.
  display.clearDisplay();
  
    // text display tests
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Mallo Electronics");
  display.println();
  display.setTextSize(2);
  display.println("INICIANDO MEDICION");
  display.setTextSize(1);
  display.println();
  display.print("H&T v1.0");
  display.display();
  delay(2000);
}

//4. LOOP
void loop() {
  
 //guardamos las mediciones
    float h = dht.readHumidity();
  // Read temperature as Celsius
    float t = dht.readTemperature();
    float f = dht.readTemperature(true);
  
 
  // Chequear error de lectura y reintento de loop.
    if (isnan(h) || isnan(t) || isnan(f)) {
    digitalWrite(led,LOW);
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    display.println("ERROR");
    display.setTextSize(2);
    display.print("DE SENSOR");
    Serial.println("Error de lectura en el sensor"); 
    return;
  }
    
   //medimos la luz ambiental
    sensorluzvalor = analogRead(sensorluz);
    if (sensorluzvalor<300){
      display.clearDisplay();
      return;
    }
    
    // encendemos el LED
    digitalWrite(led,HIGH);
    
    // Lanzamos lecturas al display
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.print("TEMPERATURA:  ");
  display.print(t);
  display.println("C");
  display.println();
  display.println();
  display.setTextSize(2);
  display.print(h);
  display.println("%");
  display.setTextSize(1);
  display.println();
  display.println();
  display.print("LUX:");
  display.print((sensorluzvalor/1023)*100);
  display.print("  RELE:");
  display.println("OFF");
  display.display();
  
    // Imprimimos en Serial
    
  Serial.print("Humedad: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatura: "); 
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("SensorLuz: ");
  Serial.print((sensorluzvalor/1023)*100);
  Serial.println("%");

  // apagamos el LED
  digitalWrite(led,LOW);
  
    // Establecemos 2 segundos de espera antes de la de la lectura
    delay(2000);
}

Gracias!!!

Doble post. No se permite el doble post.

Debe leer las normas del foro

Prueba a pasar por serial la lectura del valor dentro del if, puede que no esté ni siquiera ejecutándose el código del condicional, por ejemplo porque los rangos de ese valor son distintos a los que crees.

Es sólo una idea.

mas alla de eso que es posible, display.clearDisplay(); borra pantalla nada mas.