Arduino Nano v3 (sainsmart) stürzt ab ohne Serial Monitor

Hallo,

ich habe ein Problem mit meinem Projekt:

An einem Arduino Nano habe ich den DHT22 Sensor und versende die Werte über die RF24Networking lib.

Beides funktioniert an sich, aber ich habe folgendes seltsames Verhalten: wenn kein Serial Monitor aus der Arduino GUI an ist, stürzt das Programm auf dem Arduino scheinbar ab - ich kann es an einem Zähler nachverfolgen, der zurückgesetzt wird.

Ist der Serial Monitor an, funktioniert alles tadellos. Womit könnte das zusammenhängen?

Danke

filth: Womit könnte das zusammenhängen?

Mit Programmierfehlern im verwendeten Sketch.

Das war ja einfach. XD

Kann man nicht ausschließen, aber wie kann ein aktiver Serial Monitor dazu führen, dass es keinen Absturz gibt?

Hier ist der Sketch:

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <dht.h>
#include "MyTypes.h"
#include <Narcoleptic.h>

#define DHTPIN 3     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);

// nRF24L01(+) radio attached 
RF24 radio(9,10);

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 1;

// Address of the other node (by default send it to the base)
const uint16_t other_node = 0;

// How often to send 'hello world to the other unit
unsigned long interval = 5000; //ms

// When did we last send?
unsigned long last_sent;

// How many have we sent already
unsigned long packets_sent;

payload_t myData;

// Number of packets we've failed to send since we last sent one
// successfully
uint16_t lost_packets = 0;

void setup(void)
{
  Serial.begin(57600);
  Serial.println("RF24Network/examples/helloworld_tx/");
 
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
  dht.begin();
      
  RF24NetworkHeader header(network.parent(), 'k');
  Serial.print("APP Sending type: k to node:");
  Serial.println(header.to_node);
  if ( ! network.write(header, NULL, 0) )
     Serial.println("failed.");
}

void loop(void)
{
  delay(100);
  
  // Pump the network regularly
  network.update();
  
   // If so, grab it and print it out
    RF24NetworkHeader header;
    network.peek(header);
     
  
  if ( this_node > 0 )
  {        
    
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT");
    } 
    else{
       myData.value = h;
       myData.unity[0] = '%';
       myData.lost_packets = lost_packets;
        
       sendData(&myData);      
     
       delay(200);    
     
       myData.value = t;
       myData.unity[0] = 'C';
       myData.lost_packets = lost_packets;
        
       sendData(&myData);   
    }  

    
    //radio.powerDown();
    
    //radio.powerDown();    
  
  }            
}

boolean sendData(payload_t* data) {
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    Serial.println("Sending...");
    last_sent = now;
    
    boolean ok = false;
  
    RF24NetworkHeader header(other_node, 'S');
    ok = network.write(header, &myData, sizeof(myData));
    if (!ok) {
      ++lost_packets;
      Serial.println("failed.");      
    }
  
    return ok;
  }
  
}

filth: Kann man nicht ausschließen, aber wie kann ein aktiver Serial Monitor dazu führen, dass es keinen Absturz gibt?

Vielleicht unterschiedliches Störverhalten verschiedener Komponenten der Schaltung in Bezug auf die "Elektromagnetische Verträglichkeit" in Verbindung mit nicht ausreichender Fehlerbehandlung in der Software?

Mir ist sowas mal passiert als ich bei einem Array über die max Elemente beschrieben habe.

Grüße Uwe

Es liegt scheinbar an Windows - wenn ich eine neutrale Stromquelle nehme oder der Rechner runtergefahren (Strom an den USB Ports liegt an) ist, funktioniert alles ohne Probleme.

Nein, das Problem wird eher ein anderes sein, was ich auch hier im Forum schon öfters beschrieben habe! Die nRF Funkmodule reagieren extrem zimperlich und empfindlich auf Störungen. Sie brauchen dringend 100n Kondensatoren über Ihre Stromversorgung geschaltet! Die RF24 Lib hängt sich und den Arduino auf, wenn das Funkmodul nicht mehr gesprächig ist.

Viele Grüße, Tobias

Durchaus möglich, dass ein Stützkondensator hilft. Aber 100nF o.ä. sind da meist schon drauf montiert. 10uF am Stecker sind auch gut.

Ansonsten plagt mich das gleiche Problem. Bei einem Pro Mini. Über FTDI seriel verbunden. Alle gefühlte 5 Minuten macht er einen Reset, wenn Putty nicht aktiv ist. Ob Putty oder Serialmonitor, dürfte nicht den Unterschied machen.

Bei mir ist des das Bluetooth Gedöns, was den Fehler verursacht, zumindest ans Licht bringt. Deaktiviere ich Bluetooth, ist Ruhe mit dem Problem.

Alles ohne Funkmodul.

Nachtrag: Das Funkmodul kann keinen Reset auslösen. Keine Leitung dafür.

Mein Funkmodul hat einen, von mir aufgelöteten, 10uF zwischen VCC und GND. Ohne lief der gar nicht bzw hat nichts versendet.