Waarom moet ik de seriële monitor openen om weer te geven wat in de lusfunctie is?

Waarom moet ik de seriële monitor openen om niet-NaN-waarden weer te geven die zijn opgehaald uit DHT22,
wat doe ik fout in de onderstaande code?

#include 
#include 
#include 
#include 
// OLED display TWI address
#define OLED_ADDR   0x3C
// reset pin not used on 4-pin OLED module
Adafruit_SSD1306 display(-1); //-1 = no reset pin
// 128 x 64 pixel display
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
#define DHTPIN D3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {

Serial.begin(115200);
delay(100);
  dht.begin();
  pinMode (DHTPIN, OUTPUT);
  /// initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
 // display.drawRect(1, 1, display.width()-1, display.height()-1, WHITE);  //draws the outer rectangular boundary on the screen
  display.display();
 //display a pixel in each corner of the screen
  display.drawPixel(0, 0, WHITE);
  display.drawPixel(127, 0, WHITE);
  display.drawPixel(0, 63, WHITE);
  display.drawPixel(127, 63, WHITE);
 //display a line of text
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(20, 18);
  display.print("Welcome");
  display.setCursor(25, 40);
  display.print("San");

 //update display with all of the above graphics
  display.display();
}
void loop() {
 //put your main code here, to run repeatedly:
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 1);
  display.print("Showing Temperature");
 //display Temperature
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(1, 18);
  display.print("T : ");
  display.print(t);
  display.setTextSize(1);
  display.print((char)247);
  display.setTextSize(2);
  display.print("C");
  display.setCursor(1, 40);
  display.print("H : ");
  display.print(h);
  display.print(" %");
 //update display with all of the above graphics
  display.display();
}

Na het uploaden van de code geeft het NaN weer, maar als ik de seriële monitor open, werkt het prima en worden de werkelijke waarden van DHT22 weergegeven: o

Hieronder is het frituren van de aansluiting, ik heb geen geestige wolk in fritzing, dus ik heb in plaats daarvan Wemos D1Mini gebruikt. op wemos d1 mini 3v3 is VCC op geestige cloud dev-bord.

enter image description here

Het lijkt erop dat de lus-functie niet zelfstandig wordt uitgevoerd, tenzij ik de seriële monitor open, waarom is het zo? Help alstublieft

1
als ik geen seriële monitor open-lus-functie niet werkt. als ik een seriële monitor heb open ik de OLED-updates, als ik het venster van de seriële monitor sluit, wordt de tekst op doest bijgewerkt vanuit de lusfunctie. waarom is de lusfunctie afhankelijk van het geopende venster van de seriële monitor?
toegevoegd de auteur Ciasto piekarz, de bron
@MikaelPatel Ik heb geprobeerd commentaar te geven dat ook niet hielp, lange tijd geleden had ik een vergelijkbaar probleem en becommentarieerde de serial.begin en het werkte, maar met geestige cloud dev board deed het dat niet.
toegevoegd de auteur Ciasto piekarz, de bron
@AltAir Ik heb fritzing toegevoegd. neem alsjeblieft een kijkje
toegevoegd de auteur Ciasto piekarz, de bron
@ per1234 Ik heb het geprobeerd en het probleem opgelost om het probleem op te lossen, maar kon niet voordat ik het op SO of arduino-forum plaatste, ik wilde het bericht naar een grotere community sturen, zodat ik hulp kon krijgen.
toegevoegd de auteur Ciasto piekarz, de bron
Ook gevraagd op: forum.arduino.cc/index.php?topic=512284 Als u dat gaat doen, wees dan attent genoeg om links toe te voegen naar de andere plaatsen waar u bent gepost. Zo kunnen we tijdverspilling voorkomen door dubbele inspanningen en kunnen we ook anderen helpen met dezelfde vragen en uw post vinden om alle relevante informatie te vinden.
toegevoegd de auteur per1234, de bron
Wat gebeurt er als u "Serial.begin (115200);" verwijdert?
toegevoegd de auteur Mikael Patel, de bron
Toon uw bedradingsschema. Gebruikt u pull-up weerstanden voor RX en TX?
toegevoegd de auteur user32827, de bron
De ontbrekende verbinding tussen GND van de D1 mini en breadboard.
toegevoegd de auteur user32827, de bron

2 antwoord

Moeilijk te zeggen van je fritzing welke echte ESP8266-pin je gebruikt, maar je hebt een pull-up-weerstand nodig op de datalijn van de DHT22.

Ik vermoed dat je een van de seriële UART-pinnen gebruikt voor de gegevensverbinding en het openen van de seriële monitor activeert de uitvoer van de ingebouwde UART-chip die dan dienst doet als je ontbrekende pullup-weerstand.

0
toegevoegd
Gebruikte D7, dat wil zeggen GPIO13 op geestige wolk.
toegevoegd de auteur Ciasto piekarz, de bron

Seriële monitor stuurt een RESET-signaal tijdens de initialisatie - misschien is dit het probleem. Soms hebben deze Witty-platen een impliciete RESET nodig na het opstarten/programmeren.

0
toegevoegd