Wieso funktioniert mein Code nur auf dem Arduino Mega

hi Leute ich habe einen code geschrieben der perfekt auf meinem Arduino Mega läuft, aber irgendwie will der nich auf meinem Arduino UNO funktionieren.
kann mir da vielleicht wer von euch weiter helfen
Lg
Manu

Ich seh hier keinen sketch. Man reiche mir die Glaskugel!

das wäre mein code der beim mega funktioniert

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>

/*

Original Version by Poldi
modified by Katsu

the functions readString.append() and readString.contains() where replaced

*/

#include <SPI.h>  // insert by Katsu
// #include <WString.h> removed by Katsu
#include <Ethernet.h>


byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 10, 0, 1, 28 };                  // IP-Adresse
byte gateway[] = { 10, 0, 1, 1 };                // Gateway
byte subnet[]  = { 255, 255, 255, 0 };

EthernetServer server(80);
char c;
int Pin3 = 3;
int Pin4 = 4;
int Pin5 = 5;
int Pin6 = 6;

String readString = String(100);      // string for fetching data from address
boolean Pin3ON = false;                  // Status flag
boolean Pin4ON = false;
boolean Pin5ON = false;
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, OUTPUT);
Serial.begin(9600); }

void loop(){

// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
c = client.read();
}
//read char by char HTTP request
if (readString.length() < 100) {

//store characters to string
// readString.append(c);  removed by Katsu
readString = readString + c; // insert by Katsu
// very simple but it works...
}

Serial.print(c);  //output chars to serial port

if (c == '\n') {  //if HTTP request has ended

// readString.contains() replaced with readString.indexOf(val) > -1  by Katsu
// indexOf locates a character or String within another String.
// Returns the index of val within the String, or -1 if not found.
if(readString.indexOf("3=einschalten") > -1) {
 digitalWrite(Pin3, HIGH);
 Serial.println("Pin 3 eingeschaltet!");
 Pin3ON = true;
}
if(readString.indexOf("3=ausschalten") > -1){
 digitalWrite(Pin3, LOW);
 Serial.println("Pin 3 ausgeschaltet!");
 Pin3ON = false;
}
if(readString.indexOf("4=einschalten") > -1) {
 digitalWrite(Pin4, HIGH);
 Serial.println("Pin 4 eingeschaltet!");
 Pin4ON = true;
}
if(readString.indexOf("4=ausschalten") > -1){
 digitalWrite(Pin4, LOW);
 Serial.println("Pin 4 ausgeschaltet!");
 Pin4ON = false;
}
if(readString.indexOf("5=einschalten") > -1) {
 digitalWrite(Pin5, HIGH);
 Serial.println("Pin 5 eingeschaltet!");
 Pin5ON = true;
}
if(readString.indexOf("5=ausschalten") > -1){
 digitalWrite(Pin5, LOW);
 Serial.println("Pin 5 ausgeschaltet!");
 Pin5ON = false;
}
if(readString.indexOf("all=Alles+aus") > -1){
 digitalWrite(Pin3, LOW);
 digitalWrite(Pin4, LOW);
 digitalWrite(Pin5, LOW);
 Serial.println("Alles ausgeschaltet");
 Pin3ON = false;
 Pin4ON = false;
 Pin5ON = false;
}
//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println();

client.print("<html><head>");

client.print("<title>Zimmerschaltung</title>");

client.println("</head>");

client.print("<body bgcolor='#444444'>");

//---Überschrift---
client.println("
<hr />");

client.println("<h1><div align='center'><font color='#2076CD'>zimmerschaltung manu</font color></div></h1>");

client.println("<hr />
");
//---Überschrift---

//---Ausgänge schalten---
client.println("<div align='left'><font face='Verdana' color='#FFFFFF'>Ausg&auml;nge schalten:</font></div>");

client.println("
");

client.println("<table border='1' width='500' cellpadding='5'>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 3
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='ausschalten'></form></td>");
 
 if (Pin3ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 4
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='ausschalten'></form></td>");
 
 if (Pin4ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

client.println("<tr bgColor='#222222'>");

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang 5
</font></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='einschalten'></form></td>");
 
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='ausschalten'></form></td>");
 
 if (Pin5ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
   
client.println("</tr>");

   
client.println("</tr>");

client.println("</table>");


client.println("
");

client.println("<form method=get><input type=submit name=all value='Alles aus'></form>");

client.println("</body></html>");

//---Ausgänge schalten---

//clearing string for next read
readString="";

//stopping client
client.stop();
}}}}

Dafür brauchste doch jetzt nicht extra ein neues Thema erstellen !
Hätte ja wohl gereicht, wenn du das noch in den alten Post mit anfügst :wink:

hahaha ja stimmt aber iwie funktionierts nich das nervt voll :smiley:

So eine Zeile wie:

client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='einschalten'></form></td>");

verbraucht alleine schon 113 Bytes RAM-Speicher. Das ist in Anbetracht der Tatsache, dass ein UNO überhaupt nur 2048 Bytes RAM-Seicher hat, eine Menge Holz.

Darüber hinaus verwendest Du im Programm die speicherverschwendenden String-Objekte.

Ich schätze mal: Für Deine RAM-verschwenderische Art der Programmierung hat ein UNO viel zu wenig RAM.

Versuche mal, konstante Texte wie die oben genannte Zeile mit dem F-Makro zu senden, so daß der Text nur Flash-Speicher aber keinen RAM-Speicher benötigt. Beispiel:

client.println(F("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='einschalten'></form></td>"));

auch eine etwas spezifischere Fehlerbeschreibung wäre hilfreich:

Wieso funktioniert mein Code nur auf dem Arduino Mega

Wird er für den UNO nicht kompiliert, Wird er nicht hinaufgeladen, werden einige Funktionen nicht ausgeführt, Stürzt Arduino nach kurzer Zeit ab .... ?

Grüße Uwe

ne also er lödt alles erfolgreich drauf aber ich kann eben die website die ja in dem sketch erstelllt wurde nicht anzeigen

Wenn ich den Sketch auf den Mega lade, dann sehe ich 5355byte Ram, die noch frei sind, von 8192byte.
Der Sketch verbraucht also 2837byte (minimum), der Uno hat nur 2048byte.
==> Speicher sparen!

Haaaa ! War ich wohl doch richtig mit meiner Vermutung :wink:

Guckste hier: PROGMEM - Arduino Reference

Was ich von Uwe gelernt habe:

bei Serial.println("Pin 4 eingeschaltet!"); wird der String im RAM abgelegt!

dies kann man vermeiden mit
Serial.println(F("Pin 4 eingeschaltet!"));
damit bleibt der String im Flash.

den freien Speicher kannst du dir anzeigen lassen, in dem du eine Funktion freeRam() definierst:

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);

dann kannst du im code jederzeit mit Serial.println(freeRam()); den freien Speicher anzeigen lassen.

Details hier: Wie kann ich die RAM Nutzung überwachen?