Warum blitzen LEDs kurz auf?

Hallo zusammen,

mir ist nicht klar, warum die LEDs kurz aufblitzen. Vielleicht könnt ihr mir bei der Fehlersuche behilflich sein.

Hardware:
Arduino Nano
An Pin 7 bis Pin 12 hängt jeweils eine LED mit passendem Vorwiderstand.
Stromversorgung über USB-Kabel
Der DHT22 ist zur Fehlersuche schon abgesteckt und kann natürlich nicht gefunden werden, was zur Time-Out-Fehlermeldung führt.

Nur warum blitzen die gelbe LED an Pin 9 und die grüne LED an Pin 10 im Abstand von ein paar Sekunden auf? Zeitlich passt das mit der seriellen Übertragung zusammen, aber ich kann mir das nicht erklären.

Den Code habe ich immer weiter gekürzt, um den Fehler zu finden, deshalb bitte nicht wundern, dass der nichts Sinnvolles mehr macht, aber auch dieser Coderest führt zum beschriebenen Fehler.
Ich habe schon einen anderen Nano ausprobiert, um ein Hardwareproblem auszuschließen, aber der verhält sich gleich. Die Platine habe ich auch schon abgesteckt und die LEDs direkt an die Arduino Pins angeschlossen, somit kann ich einen Platinenfehler auch ausschließen.

Kommentiere ich die Zeile "DHTStatus = DHT.read22(DHT22Pin);" aus, ist kein Aufblitzen mehr da.

Wie kann ich den Fehler weiter eingrenzen? Vielen Dank für eure Hilfe.

Hier noch der Code:

#include <DHT.h>

const byte SendenPin = 4;
const byte InBetriebPin = 5;                                      // High, wenn einer sendet; dient der Kollisionsvermeidung;  680Ohm SMD Schutzwiderstand für PortPin; ein 10KOhm Pulldown für gesamte Leitung
const byte LEDrot2 = 7;
const byte LEDrot1 = 8;
const byte LEDgelb = 9;
const byte LEDgruen1 = 10;
const byte LEDgruen2 = 11;
const byte LEDblau = 12;
const byte DHT22Pin = A7;                                         // DHT22 / AM2302-Luftfeuchte und Temperatursensor

int DHTStatus;
unsigned long HygrometerIntervall = 5000;
unsigned long lHygrometer = 0;
dht DHT;

void setup()
{
  pinMode(LEDrot2, OUTPUT);
  pinMode(LEDrot1, OUTPUT);
  pinMode(LEDgelb, OUTPUT);
  pinMode(LEDgruen1, OUTPUT);
  pinMode(LEDgruen2, OUTPUT);
  pinMode(LEDblau, OUTPUT);
  pinMode(DHT22Pin, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(SendenPin, OUTPUT);
  pinMode(InBetriebPin, INPUT);
  Serial.begin(9600);
}

void loop()
{
  if (millis() - lHygrometer > HygrometerIntervall) {
    DHTStatus = DHT.read22(DHT22Pin);

    Max485Senden(true);
    Serial.println(F("<Fehler>Time out Error</Fehler>"));
    Max485Senden(false);

    lHygrometer = millis();

  }
}

void Max485Senden(bool senden)
{
  int var;
  if (senden) {
    var = 0;
    while ((digitalRead(InBetriebPin) == HIGH) or (var > 20)) {
      var++;
    }
    if (var < 21) {                           //  wenn der Bus frei ist senden, ansonsten geht die Nachricht nicht raus, dass das Max485Modul nicht im Sendebetrieb ist
      pinMode(InBetriebPin, OUTPUT);          //  Betriebsleitung ansteuern
      digitalWrite(InBetriebPin, HIGH);       //  Betriebsleitung Sendebetrieb kundtun;  Achtung Schutzwiderstände erforderlich, um keinen Kurzschluss zwischen 2 Arduinos zu erzeugen
      delay(3);
      digitalWrite(SendenPin, HIGH);          // Max485Modul in Sendebetrieb schalten
    }
  }
  else {
    digitalWrite(SendenPin, LOW);           // Max485Modul in Empfangsbetrieb schalten
    digitalWrite(InBetriebPin, LOW);        //  Betriebsleitung Sendebetrieb beenden         so geht es schneller, als nur über den Pulldown die Ladung abfließen zu lassen
    delay(3);
    pinMode(InBetriebPin, INPUT);           //  Betriebsleitung nicht mehr aktiv treiben     Pulldown hält Leitung auf GND, wenn keiner sendet
  }
}

Die Lib-Dateien von Rob Tillaart füge ich mal an, sind aber von mir nicht verändert.

DHT.cpp (4.42 KB)

DHT.h (1.4 KB)

Deinen Fehler kann ich nicht genau benennen, aber ich vermute, das hängt mit dem verwendeten Pin für den DHT zusammen.
Du nimmst den A7 als digitalen Pin für den DHT, das geht nicht, da dieser ein analog-Pin ist und nicht als digitaler verwendet werden kann.
Die Pins A0 - A5 können auch als digitale verwendet werden. A6 und A7 dagegen nicht, die sind rein analog.
Könnte mir vorstellen, das damit dein Sketch Probleme macht.

Und soweit ich das erinnere, brauchst du den Pin nicht als Input zu definieren, das macht schon die Library.
Der Pin wird auch als Output für den DHT genutzt.

Volltreffer!

Ich habe den Pin auf einen digitalen geändert und das Aufblitzen ist weg. Vielen Dank! Ich habe Stunden gesucht, worin der Fehler liegen soll, aber nichts Plausibles gefunden. Daran sieht man, wie gut es ist, wenn mal ein anderer über einen Sketch sieht, um solche Fehler zu finden.

Vielen Dank und viele Grüße

Frank

F200:
Volltreffer!

Ich habe den Pin auf einen digitalen geändert und das Aufblitzen ist weg. Vielen Dank! Ich habe Stunden gesucht, worin der Fehler liegen soll, aber nichts Plausibles gefunden. Daran sieht man, wie gut es ist, wenn mal ein anderer über einen Sketch sieht, um solche Fehler zu finden.

Vielen Dank und viele Grüße

Frank

Prima das es jetzt funktioniert.
Danke für die Rückmeldung.

Eine Rückmeldung ist ja wohl selbstverständlich. 1. aus Dank und 2. sollen Andere bei ähnlichen Fehlern ja auch eine Recherchemöglichkeit haben. Ich habe schon aus so machem alten Beitrag Erkenntnisse sammeln können.

F200:
Eine Rückmeldung ist ja wohl selbstverständlich. 1. aus Dank und 2. sollen Andere bei ähnlichen Fehlern ja auch eine Recherchemöglichkeit haben. Ich habe schon aus so machem alten Beitrag Erkenntnisse sammeln können.

Das stimmt.
Leider sehen nicht alle User das so.

Dann schon mal schöne Feiertage.

Danke, auch so.