Nano V3 hängt in void setup

Hallo liebe Community,

ich hab an meine Arduino Nano V3 ein SSD1306 OLED Display und ein Ethernet shield mit dem Chipsatz W5500 angeschlossen. Folgende Libarys sind installiert: SPI, Ethernet2, Wire, Adafruit_GFX und Adafruit_SSD1306. Wenn ich die Beispielprogramme von den Libarys lade und teste, ob die Geräte ansprechbar sind, funktioniert alles. Aus den Beispielen hab ich mir ein eigenes Programm geschrieben, welches am ende nur die ausgelesene IP-Adresse auf dem Display anzeigen soll. In meinem Programm hängt er sich allerdings an einer Stelle im void setup auf und geht dies immer wieder durch.

Hier mein Code:

#include <SPI.h>
#include <Ethernet2.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};

EthernetClient client;

void setup() {
  // put your setup code here, to run once:


//Display
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);

  
  // Clear the buffer
  Serial.println("Display Buffer wird geleert");
  display.clearDisplay();
  display.display();
  delay(100);
  Serial.println("Display Buffer wurde geleert");
  
  Serial.println("Schreibe ersten Text auf Display");
  display.setTextSize(1,2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.println("Hello World!");
  display.display();
  delay(2000);

  
//EhtnernetShield
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for (;;);
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());


  Serial.println("Schreibe IP Adresse aufs Display");
//  display.clearDisplay();
//  display.display();
  delay(100);
  display.setTextSize(1,2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,20);
  display.println(Ethernet.localIP());
  display.display();
  delay(100);
}

void loop() {
  // put your main code here, to run repeatedly:

  Serial.println("Test");
  delay(1000);
  
}

Hier die serielle Ausgabe:

15:08:32.962 -> Display Buffer wird geleert
15:08:33.056 -> Display Buffer wurde geleert
15:08:33.056 -> Schreibe ersten Text auf Display
15:08:33.524 -> Display Buffer wird geleert
15:08:33.618 -> Display Buffer wurde geleert
15:08:33.618 -> Schreibe ersten Text auf Display
15:08:34.044 -> Display Buffer wird geleert
15:08:34.168 -> Display Buffer wurde geleert
15:08:34.168 -> Schreibe ersten Text auf Display
15:08:34.628 -> Display Buffer wird geleert
15:08:34.721 -> Display Buffer wurde geleert
15:08:34.721 -> Schreibe ersten Text auf Display
15:08:35.189 -> Display Buffer wird geleert
15:08:35.283 -> Display Buffer wurde geleert
15:08:35.283 -> Schreibe ersten Text auf Display
15:08:35.748 -> Display Buffer wird geleert
15:08:35.841 -> Display Buffer wurde geleert
15:08:35.841 -> Schreibe ersten Text auf Display
15:08:36.290 -> Display Buffer wird geleert
15:08:36.383 -> Display Buffer wurde geleert
15:08:36.383 -> Schreibe ersten Text auf Display
15:08:36.851 -> Display Buffer wird geleert
15:08:36.944 -> Display Buffer wurde geleert
15:08:36.944 -> Schreibe ersten Text auf Display
15:08:37.409 -> Display Buffer wird geleert
15:08:37.503 -> Display Buffer wurde geleert
15:08:37.503 -> Schreibe ersten Text auf Display
15:08:37.958 -> Display Buffer wird geleert
15:08:38.051 -> Display Buffer wurde geleert
15:08:38.051 -> Schreibe ersten Text auf Display
15:08:38.516 -> Display Buffer wird geleert
15:08:38.610 -> Display Buffer wurde geleert
15:08:38.610 -> Schreibe ersten Text auf Display

Vielen Dank schonmal für die Hilfe :slight_smile: !

You are in the English forum, there is a German forum as well..

What output are you getting in the serial monitor? AFAICT the only thing that would hang the Nano is if Ethernet.begin(..) fails.

Oh sorry, is there a chance to move the thread to the german forum or have i to copy this thread?
Thanks for the hint!

Try to change the following lines:

//Your code
//display.setTextSize(1,2);
//display.setTextColor(SSD1306_WHITE);

//New code
display.setTextSize(2);
display.setTextColor(WHITE);

Thanks for the help. In the serial monitor no "dauser output" is now made. However, nothing is shown on the display. The display definitely works.

Gibt es irgendeinen speziellen Grund, warum Du die ethernet2 benutzt?
Die Lib wird seit 5 Jahren nicht mehr gepflegt und bringt soviele Warnungen...
Der W5500 geht auch mit der ethernet.

Anderen gleichen Post gelöscht.
Grüße Uwe

ethernet2 soll, laut meiner Recherche, weniger Probleme machen. Allerdings hab ich keine unterschiede bei den beiden Lib bemerkt.

Moin Uwe,

danke, wusste nicht wie ich den Post ins deutsche Forum schieb, deswegen hab ich ihn nochmal erstellt. Tut mir leid, wollte keinen Ärger machen.

Ich hab das selbe Programm und Konfiguration mal auf einem Arduino Mega 2560 ausprobiert. Da funktioniert es so wie es soll.

Wie Du auf github zu ethernet2 nachlesen kannst, ist das nicht der Fall. Wie gesagt, Sie wird seit Jahren nicht gepflegt und ist daher mit Vorsicht zu geniessen. Wenn da bestimmte Abhängigkeiten bestehen, könnte das problematisch werden, wenn sich was geändert hat.

Hm...
Ich kann das leider nicht testen, aber ich würde erstmal versuchen zuerst das Ethernet zu initialisieren und dann das Display.

Was mir unbegreiflich ist, was zwischen den zwei Ausgaben passieren kann,

das die zweite Ausgabe nicht mehr kommt.
Versuch mal deine Serial.print()-Ausgaben mit dem F()-Makro zu verschieben.
Nicht das Dir irgendwo der Speicher ausgeht.

Nachtrag: kommentiere mal die Zeile aus:

  display.setTextColor(SSD1306_WHITE);

was passiert?
Und mach mal den Seriellen Monitor schneller. Einstellung auf 115200 wäre gut.

Das muß ein Moderator machen.
Das hab ich schon verstanden ansonsten hättest Du schon eine Warnung wegen Cross-Posting bekommen.

Grüße Uwe

Ich könnte mir vorstellen daß das RAM zu voll ist und den Stack crasht.

Grüße Uwe

Ich hab das - ohne Display - nachbauen können, indem ich zwischen "buffer wird geleert" und "buffer wurde geleert" auskommentiert (sonst bleibt der Code da stehn) habe und sobald das setzen von color auskommentiert ist, kommt auch die Ausgabe hello world.

Das könnte ein Speicherproblem sein....
Da hast wahr.

Moin zusammen,

hab gestern alle seriellen Ausgaben mit dem F-Makro versehen. Klappt wunderbar :slight_smile:.
Vielen dank!

Dennoch rate ich Dir einen Umstieg auf einen Mega 2560 aus SpeicherMengenGründen.
Grüße Uwe

wäre sinnvoller, definitiv. Wir wollen am Ende ein kleinen Kasten haben womit wir IP-Adressen direkt am Switch etc. auslesen können. Da bietet sich ein Nano besser an, von der Kompaktheit.

Es gibt auch relativ kleine ATmega2560.
zB ARD MEGA2560 PRO: Arduino compatible Mega 2560 Pro Board at reichelt elektronik
Ein China Nachbau mit Ch340
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.