Go Down

Topic: Wieso funktioniert mein Code nur auf dem Arduino Mega (Read 1 time) previous topic - next topic

ManuBeze

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
Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

Marcus W

#1
May 03, 2013, 07:36 pm Last Edit: May 03, 2013, 07:44 pm by Marcus W Reason: 1
Ich seh hier keinen sketch. Man reiche mir die Glaskugel!

ManuBeze

das wäre mein code der beim mega funktioniert

Code: [Select]
#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("<br><hr />");

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

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

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

client.println("<br>");

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<br></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<br></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<br></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("<br>");

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();
}}}}
Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

lgrube96

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 ;)

ManuBeze

hahaha ja stimmt aber iwie funktionierts nich das nervt voll :D
Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

jurs

So eine Zeile wie:
Code: [Select]

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:
Code: [Select]

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


uwefed

auch eine etwas spezifischere Fehlerbeschreibung wäre hilfreich:
Code: [Select]
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


ManuBeze

ne also er lödt alles erfolgreich drauf aber ich kann eben die website die ja in dem sketch erstelllt wurde nicht anzeigen
Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

guntherb



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!
Grüße
Gunther

lgrube96


guntherb

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:
Code: [Select]
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?
Grüße
Gunther

Go Up