Pages: [1]   Go Down
Author Topic: Wieso funktioniert mein Code nur auf dem Arduino Mega  (Read 946 times)
0 Members and 1 Guest are viewing this topic.
Shanghai
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich seh hier keinen sketch. Man reiche mir die Glaskugel!
« Last Edit: May 03, 2013, 12:44:38 pm by Marcus W » Logged


Shanghai
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

das wäre mein code der beim mega funktioniert

Code:
#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();
}}}}
Logged

Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Shanghai
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hahaha ja stimmt aber iwie funktionierts nich das nervt voll smiley-grin
Logged

Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3037
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So eine Zeile wie:
Code:
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:
client.println(F("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='einschalten'></form></td>"));
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21647
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Shanghai
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Arduino UNO R3, Arduino Mega 2560, Ethernet Shield, Sensor Shield

Offline Offline
Edison Member
*
Karma: 38
Posts: 1164
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



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!
Logged

Grüße
Gunther

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Haaaa ! War ich wohl doch richtig mit meiner Vermutung smiley-wink

Guckste hier: http://www.arduino.cc/en/Reference/PROGMEM
Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1164
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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?
Logged

Grüße
Gunther

Pages: [1]   Go Up
Jump to: