Arduino Mega funktioniert nur nach Upload

Hallo,

ich habe gerade ein Projekt mit dem ich mein Terrarium überwachen und irgendwann auch steuern möchte.

Nach dem ich heute eine LCD Anzeige implementiert habe funktioniert das ganze nur noch direkt nach dem uploaden, sobald ich den Mega einmal vom Strom getrennt habe geht nichts mehr.

Mein Komponenten:
Arduino Mega
DHT22
Ethernet shield
20x4 I2C LCD

Im Moment sollen Temperatur und Luftfeuchtigkeit auf dem Webserver und dem Display angezeigt werden.

Nur mit dem Ethernet Shield (und dem alten Code) funktionierte es auch nach einem umstecken in z.B. ein externes Netzteil.

Hat jemand eine Idee woran das liegen könnte?

Liebe Grüße
Simon

#include <SPI.h>
#include <Ethernet.h>

#include "DHT.h"

//LCD
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

// Thermo & Hygrometer
#define DHTPIN 31    
#define DHTTYPE DHT22

//LCD
#define I2C_ADDR    0x3F  // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

//DHT
DHT dht(DHTPIN, DHTTYPE);

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  dht.begin();
  
  //LCD
   lcd.begin (20,4);
  
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
}


void loop() {
  // listen for incoming clients
  
  float h = dht.readHumidity();     //Luftfeuchte auslesen
  float t = dht.readTemperature();  //Temperatur auslesen
  
  //Werte auf LCD ausgeben
  lcd.home ();
  lcd.print("Temperatur: ");
  lcd.print(t);
  lcd.print(" C");
  lcd.setCursor ( 0, 1 );
  lcd.print("Luftfeuchte: ");
  lcd.print(h);
  lcd.print(" %");
  
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          client.println("Temperatur & Luftfeuchte Terrarium");
          client.println("
");
          client.println(t);
          client.println(" &#176;C"); //° zeichen ascii html
          client.println("
");
          client.println(h);
          client.println(" &#37;"); //% zeichen ascii html
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

Edit:
Ich sehe gerade das der Code hier einfarbig sehr unübersichtlich aussieht, vielleicht hilf diese Ansicht: http://pastebin.com/7ALikr12

Kann sein, dass ich mich irre.
Du hast für dein LCD #define D4_pin 4 eingestellt.
Aber Pin4 ist doch soweit ich weiss der ChipSelect (SS) für dein Ethernet Chip.

Da könnte es glaube Probleme geben...

lg

Danke für deine Antwort, die mich zur Lösung geführt hat, auch wenn es nicht direkt mit dem Inhalt deines Posts zu tun hat.

Ich habe den Arduino via USB angeschlossen um ein bisschen zu experimentieren, aber es funktionierte direkt wieder.
Wenn ich den Arduino jetzt ausstecke und wieder einstecke ( 5-10 Sekunden ohne Strom) funktioniert nichts.

Wenn ich aber ein bischen länger warte (ca. 2 Minuten oder mehr) funktioniert alles wie gewünscht.

Sehr merkwürdig, vielleicht sind noch Daten im Arbeitsspeicher oder ähnliches, für meine Zwecke reicht diese Lösung, vielleicht stoße ich irgendwann mal auf den richtigen Grund.

Wozu hast du de Code bei Zeile 45 - 47?
Den braucht man nur bei dem Arduino Leonardo, und du
hast einen Mega.

Addi

Addi:
Wozu hast du de Code bei Zeile 45 - 47?
Den braucht man nur bei dem Arduino Leonardo, und du
hast einen Mega.

Addi

Da bin ich eben auch drüber gestolpert, der Code ist bereits entfernt, löst aber nicht das Problem.
Ich muss meinen Flickenteppich generell mal etwas aufräumen.