Arduino UNO ATmega 328P Otillräckligt minne?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av ochkl0620 »

Försöker peta in en kod skriven för Arduino Mega 2560 i en UNO.
Koden ligger på 21112 byte och kapaciteten i en 328 är 32256 byte men likförbannat går det inte. Varför frågar jag mig då...
Någon som begriper?
Felmeddelande:

Kod: Markera allt

Arduino:1.6.7 (Windows 7), Kort:"Arduino/Genuino Uno"

WARNING: Category '' in library UIPEthernet is not valid. Setting to 'Uncategorized'
Build options changed, rebuilding all
Multiple libraries were found for "Ethernet.h"
 Used: C:\Program Files (x86)\Arduino\libraries\Ethernet
 Not used: C:\Users\Challe\Documents\Arduino\libraries\ENC28J60

Sketch uses 21 112 bytes (65%) of program storage space. Maximum is 32 256 bytes.
Global variables use 4 441 bytes (216%) of dynamic memory, leaving -2 393 bytes for local variables. Maximum is 2 048 bytes.
processing.app.debug.RunnerException: Otillräckligt minne; se http://www.arduino.cc/en/Guide/Troubleshooting#size för tips om hur du kan minska storleken
	at cc.arduino.Compiler.size(Compiler.java:319)
	at cc.arduino.Compiler.build(Compiler.java:156)
	at processing.app.Sketch.build(Sketch.java:1108)
	at processing.app.Sketch.exportApplet(Sketch.java:1138)
	at processing.app.Sketch.exportApplet(Sketch.java:1124)
	at processing.app.Editor$DefaultExportHandler.run(Editor.java:2430)
	at java.lang.Thread.run(Thread.java:745)
Otillräckligt minne; se http://www.arduino.cc/en/Guide/Troubleshooting#size för tips om hur du kan minska storleken

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Koden i fråga:

Kod: Markera allt

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


//IP manual settings
byte ip[] = { 192, 168, 1, 177 };   //Manual setup only
byte gateway[] = { 192, 168, 1, 254 }; //Manual setup only
byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only

// if need to change the MAC address (Very Rare)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//Ethernet Port
EthernetServer server = EthernetServer(80); //default html port 80

//The number of outputs going to be switched.
int outputQuantity = 8;  //when added to outputLowest result should not exceed 10

//The lowest output pin we are starting from
int outputLowest = 2;    //Should be between 2 to 9
////////////////////////////////////////////////////////////////////////

// Variable declaration
int outp = 0;
boolean printLastCommandOnce = false;
boolean printButtonMenuOnce = false;
boolean initialPrint = true;
String allOn = "";
String allOff = "";
boolean reading = false;
boolean readInput[10]; //Create a boolean array for the maximum ammount.

//Beginning of the program
void setup() {
  Serial.begin(9600);

  //Pins 10,11,12 & 13 are used by the ethernet shield
  //Set pins as Outputs
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {
    pinMode(var, OUTPUT);
  }

  //Setting up the IP address. Comment out the one you dont need.
  //Ethernet.begin(mac); //for DHCP address. (Address will be printed to serial.)
  Ethernet.begin(mac, ip, gateway, subnet); //for manual setup. (Address is the one configured above.)


  server.begin();
  Serial.println(Ethernet.localIP());
}


void loop() {

  // listen for incoming clients, and process requests.
  checkForClient();
}


void checkForClient() {

  EthernetClient client = server.available();

  if (client) {

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected()) {
      if (client.available()) {

        if (!sentHeader) {
          // 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("<head>");

          // add page title
          client.println("<title>Ethernet Switching</title>");
          client.println("<meta name=\"description\" content=\"Ethernet Switching\"/>");

          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"10; url=/\">");

          // add other browser configuration
          client.println("<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">");
          client.println("<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\">");
          client.println("<meta name=\"viewport\" content=\"width=device-width, user-scalable=no\"/>");

          //inserting the styles data, usually found in CSS files.
          client.println("<style type=\"text/css\">");
          client.println("");

          //This will set how the page will look graphically
          client.println("html { height:100%; }");

          client.println("  body {");
          client.println("    height: 100%;");
          client.println("    margin: 0;");
          client.println("    font-family: helvetica, sans-serif;");
          client.println("    -webkit-text-size-adjust: none;");
          client.println("   }");
          client.println("");
          client.println("body {");
          client.println("    -webkit-background-size: 100% 21px;");
          client.println("    background-color: #c5ccd3;");
          client.println("    background-image:");
          client.println("    -webkit-gradient(linear, left top, right top,");
          client.println("    color-stop(.75, transparent),");
          client.println("    color-stop(.75, rgba(255,255,255,.1)) );");
          client.println("    -webkit-background-size: 7px;");
          client.println("   }");
          client.println("");
          client.println(".view {");
          client.println("    min-height: 100%;");
          client.println("    overflow: auto;");
          client.println("   }");
          client.println("");
          client.println(".header-wrapper {");
          client.println("    height: 44px;");
          client.println("    font-weight: bold;");
          client.println("    text-shadow: rgba(0,0,0,0.7) 0 -1px 0;");
          client.println("    border-top: solid 1px rgba(255,255,255,0.6);");
          client.println("    border-bottom: solid 1px rgba(0,0,0,0.6);");
          client.println("    color: #fff;");
          client.println("    background-color: #8195af;");
          client.println("    background-image:");
          client.println("    -webkit-gradient(linear, left top, left bottom,");
          client.println("    from(rgba(255,255,255,.4)),");
          client.println("    to(rgba(255,255,255,.05)) ),");
          client.println("    -webkit-gradient(linear, left top, left bottom,");
          client.println("    from(transparent),");
          client.println("    to(rgba(0,0,64,.1)) );");
          client.println("    background-repeat: no-repeat;");
          client.println("    background-position: top left, bottom left;");
          client.println("    -webkit-background-size: 100% 21px, 100% 22px;");
          client.println("    -webkit-box-sizing: border-box;");
          client.println("   }");
          client.println("");
          client.println(".header-wrapper h1 {");
          client.println("    text-align: center;");
          client.println("    font-size: 20px;");
          client.println("    line-height: 44px;");
          client.println("    margin: 0;");
          client.println("   }");
          client.println("");
          client.println(".group-wrapper {");
          client.println("    margin: 9px;");
          client.println("    }");
          client.println("");
          client.println(".group-wrapper h2 {");
          client.println("    color: #4c566c;");
          client.println("    font-size: 17px;");
          client.println("    line-height: 0.8;");
          client.println("    font-weight: bold;");
          client.println("    text-shadow: #fff 0 1px 0;");
          client.println("    margin: 20px 10px 12px;");
          client.println("   }");
          client.println("");
          client.println(".group-wrapper h3 {");
          client.println("    color: #4c566c;");
          client.println("    font-size: 12px;");
          client.println("    line-height: 1;");
          client.println("    font-weight: bold;");
          client.println("    text-shadow: #fff 0 1px 0;");
          client.println("    margin: 20px 10px 12px;");
          client.println("   }");
          client.println("");
          client.println(".group-wrapper table {");
          client.println("    background-color: #fff;");
          client.println("    -webkit-border-radius: 10px;");

          client.println("    -moz-border-radius: 10px;");
          client.println("    -khtml-border-radius: 10px;");
          client.println("    border-radius: 10px;");

          client.println("    font-size: 17px;");
          client.println("    line-height: 20px;");
          client.println("    margin: 9px 0 20px;");
          client.println("    border: solid 1px #a9abae;");
          client.println("    padding: 11px 3px 12px 3px;");
          client.println("    margin-left:auto;");
          client.println("    margin-right:auto;");

          client.println("    -moz-transform :scale(1);"); //Code for Mozilla Firefox
          client.println("    -moz-transform-origin: 0 0;");



          client.println("   }");
          client.println("");


          //how the green (ON) LED will look
          client.println(".green-circle {");
          client.println("    display: block;");
          client.println("    height: 23px;");
          client.println("    width: 23px;");
          client.println("    background-color: #0f0;");
          //client.println("    background-color: rgba(60, 132, 198, 0.8);");
          client.println("    -moz-border-radius: 11px;");
          client.println("    -webkit-border-radius: 11px;");
          client.println("    -khtml-border-radius: 11px;");
          client.println("    border-radius: 11px;");
          client.println("    margin-left: 1px;");

          client.println("    background-image: -webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(46, 184, 0, 0.8)), to(rgba(148, 255, 112, .9)));@");
          client.println("    border: 2px solid #ccc;");
          client.println("    -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;");
          client.println("    -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */");
          client.println("    box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */");

          client.println("    }");
          client.println("");

          //how the black (off)LED will look
          client.println(".black-circle {");
          client.println("    display: block;");
          client.println("    height: 23px;");
          client.println("    width: 23px;");
          client.println("    background-color: #040;");
          client.println("    -moz-border-radius: 11px;");
          client.println("    -webkit-border-radius: 11px;");
          client.println("    -khtml-border-radius: 11px;");
          client.println("    border-radius: 11px;");
          client.println("    margin-left: 1px;");
          client.println("    -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;");
          client.println("    -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */");
          client.println("    box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */");
          client.println("    }");
          client.println("");

          //this will add the glare to both of the LEDs
          client.println("   .glare {");
          client.println("      position: relative;");
          client.println("      top: 1;");
          client.println("      left: 5px;");
          client.println("      -webkit-border-radius: 10px;");
          client.println("      -moz-border-radius: 10px;");
          client.println("      -khtml-border-radius: 10px;");
          client.println("      border-radius: 10px;");
          client.println("      height: 1px;");
          client.println("      width: 13px;");
          client.println("      padding: 5px 0;");
          client.println("      background-color: rgba(200, 200, 200, 0.25);");
          client.println("      background-image: -webkit-gradient(linear, 0% 0%, 0% 95%, from(rgba(255, 255, 255, 0.7)), to(rgba(255, 255, 255, 0)));");
          client.println("    }");
          client.println("");


          //and finally this is the end of the style data and header
          client.println("</style>");
          client.println("</head>");

          //now printing the page itself
          client.println("<body>");
          client.println("<div class=\"view\">");
          client.println("    <div class=\"header-wrapper\">");
          client.println("      <h1>Ethernet Switching</h1>");
          client.println("    </div>");
          client.println("<div  class=\"group-wrapper\">");
          client.println("    <h2>Switch the required output.</h2>");
          client.println();

          //This is for the arduino to construct the page on the fly.
          sentHeader = true;
        }

        char c = client.read();

        if (reading && c == ' ') {
          reading = false;
        }

        //       Serial.print(c);


        if (c == '?') {
          reading = true; //found the ?, begin reading the info
        }


        if (reading) {
          if (c == 'H') {
            outp = 1;
          }
          if (c == 'L') {
            outp = 0;
          }
          Serial.print(c);   //print the value of c to serial communication
          //Serial.print(outp);
          //Serial.print('\n');

          switch (c) {
            case '2':
              //add code here to trigger on 2
              triggerPin(2, client, outp);
              break;
            case '3':
              //add code here to trigger on 3
              triggerPin(3, client, outp);
              break;
            case '4':
              //add code here to trigger on 4
              triggerPin(4, client, outp);
              break;
            case '5':
              //add code here to trigger on 5
              triggerPin(5, client, outp);
              //printHtml(client);
              break;
            case '6':
              //add code here to trigger on 6
              triggerPin(6, client, outp);
              break;
            case '7':
              //add code here to trigger on 7
              triggerPin(7, client, outp);
              break;
            case '8':
              //add code here to trigger on 8
              triggerPin(8, client, outp);
              break;
            case '9':
              //add code here to trigger on 9
              triggerPin(9, client, outp);
              break;
          }

        }

        if (c == '\n' && currentLineIsBlank) {
          printLastCommandOnce = true;
          printButtonMenuOnce = true;
          triggerPin(777, client, outp); //Call to read input and print menu. 777 is used not to update any outputs
          break;
        }
      }
    }

    //Set Variables Before Exiting
    printLastCommandOnce = false;
    printButtonMenuOnce = false;

    allOn = "";
    allOff = "";
    client.println("\n<h3 align=\"center\">&copy; Author - Claudio Vella <br> Malta - October - 2012</h3>");
    client.println("</div>\n</div>\n</body>\n</html>");

    delay(1); // give the web browser time to receive the data
    client.stop(); // close the connection:

  }

}



void triggerPin(int pin, EthernetClient client, int outp) {
  //Switching on or off outputs, reads the outputs and prints the buttons

  //Setting Outputs
  if (pin != 777) {
    if (outp == 1) {
      digitalWrite(pin, HIGH);
    }
    if (outp == 0) {
      digitalWrite(pin, LOW);
    }
  }
  //Refresh the reading of outputs
  readOutputStatuses();


  //Prints the buttons
  if (printButtonMenuOnce == true) {
    printHtmlButtons(client);
    printButtonMenuOnce = false;
  }

}


//print the html buttons to switch on/off channels
void printHtmlButtons(EthernetClient client) {

  //Start to create the html table
  client.println("");
  //client.println("<p>");
  client.println("<FORM>");
  client.println("<table border=\"0\" align=\"center\">");

  //Start printing button by button
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {

    //set command for all on/off
    allOn += "H";
    allOn += var;
    allOff += "L";
    allOff += var;


    //Print begining of row
    client.print("<tr>\n");

    //Prints the ON Buttons
    client.print(" <td><INPUT TYPE=\"button\" VALUE=\"Switch ON - Pin  ");
    client.print(var);
    client.print("\" onClick=\"parent.location='/?H");
    client.print(var);
    client.print("'\"></td>\n");

    //Prints the OFF Buttons
    client.print(" <td><INPUT TYPE=\"button\" VALUE=\"Switch OFF - Pin  ");
    client.print(var);
    client.print("\" onClick=\"parent.location='/?L");
    client.print(var);
    client.print("'\"></td>\n");


    //Print first part of the Circles or the LEDs
    if (readInput[var] == true) {
      client.print(" <td><div class='green-circle'><div class='glare'></div></div></td>\n");
    } else
    {
      client.print(" <td><div class='black-circle'><div class='glare'></div></div></td>\n");
    }


    //Print end of row
    client.print("</tr>\n");
  }


  //Prints the ON All Pins Button
  client.print("<tr>\n<td><INPUT TYPE=\"button\" VALUE=\"Switch ON All Pins");
  client.print("\" onClick=\"parent.location='/?");
  client.print(allOn);
  client.print("'\"></td>\n");

  //Prints the OFF All Pins Button
  client.print("<td><INPUT TYPE=\"button\" VALUE=\"Switch OFF All Pins");
  client.print("\" onClick=\"parent.location='/?");
  client.print(allOff);
  client.print("'\"></td>\n<td></td>\n</tr>\n");

  //Closing the table and form
  client.println("</table>");
  client.println("</FORM>");
  //client.println("</p>");

}

//Reading the Output Statuses
void readOutputStatuses() {
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {
    readInput[var] = digitalRead(var);
    //Serial.print(readInput[var]);
  }

}
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av adent »

Kan ju vara RAM

"Global variables use 4 441 bytes (216%) of dynamic memory, leaving -2 393 bytes for local variables. Maximum is 2 048 bytes."
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av Wedge »

Det är dina texter som äter RAM.
Ändra

Kod: Markera allt

client.println("bla bla bla");
till

Kod: Markera allt

client.println(F("bla bla bla"));
så läggs dina strängkonstanter enbart i flashminnet.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av ochkl0620 »

Herrejävlar :P Kan man lösa det automatiskt? Är ju en jäkla massa rader :P
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av Klas-Kenny »

Sådär. :)

Kod: Markera allt

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


//IP manual settings
byte ip[] = { 192, 168, 1, 177 };   //Manual setup only
byte gateway[] = { 192, 168, 1, 254 }; //Manual setup only
byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only

// if need to change the MAC address (Very Rare)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

//Ethernet Port
EthernetServer server = EthernetServer(80); //default html port 80

//The number of outputs going to be switched.
int outputQuantity = 8;  //when added to outputLowest result should not exceed 10

//The lowest output pin we are starting from
int outputLowest = 2;    //Should be between 2 to 9
////////////////////////////////////////////////////////////////////////

// Variable declaration
int outp = 0;
boolean printLastCommandOnce = false;
boolean printButtonMenuOnce = false;
boolean initialPrint = true;
String allOn = "";
String allOff = "";
boolean reading = false;
boolean readInput[10]; //Create a boolean array for the maximum ammount.

//Beginning of the program
void setup() {
  Serial.begin(9600);

  //Pins 10,11,12 & 13 are used by the ethernet shield
  //Set pins as Outputs
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {
    pinMode(var, OUTPUT);
  }

  //Setting up the IP address. Comment out the one you dont need.
  //Ethernet.begin(mac); //for DHCP address. (Address will be printed to serial.)
  Ethernet.begin(mac, ip, gateway, subnet); //for manual setup. (Address is the one configured above.)


  server.begin();
  Serial.println(Ethernet.localIP());
}


void loop() {

  // listen for incoming clients, and process requests.
  checkForClient();
}


void checkForClient() {

  EthernetClient client = server.available();

  if (client) {

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected()) {
      if (client.available()) {

        if (!sentHeader) {
          // send a standard http response header
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/html"));
          client.println(F("Connnection: close"));
          client.println();
          client.println(F("<!DOCTYPE HTML>"));
          client.println(F("<head>"));

          // add page title
          client.println(F("<title>Ethernet Switching</title>"));
          client.println(F("<meta name=\"description\" content=\"Ethernet Switching\"/>"));

          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println(F("<meta http-equiv=\"refresh\" content=\"10; url=/\">"));

          // add other browser configuration
          client.println(F("<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">"));
          client.println(F("<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\">"));
          client.println(F("<meta name=\"viewport\" content=\"width=device-width, user-scalable=no\"/>"));

          //inserting the styles data, usually found in CSS files.
          client.println(F("<style type=\"text/css\">"));
          client.println(F(""));

          //This will set how the page will look graphically
          client.println(F("html { height:100%; }"));

          client.println(F("  body {"));
          client.println(F("    height: 100%;"));
          client.println(F("    margin: 0;"));
          client.println(F("    font-family: helvetica, sans-serif;"));
          client.println(F("    -webkit-text-size-adjust: none;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F("body {"));
          client.println(F("    -webkit-background-size: 100% 21px;"));
          client.println(F("    background-color: #c5ccd3;"));
          client.println(F("    background-image:"));
          client.println(F("    -webkit-gradient(linear, left top, right top,"));
          client.println(F("    color-stop(.75, transparent),"));
          client.println(F("    color-stop(.75, rgba(255,255,255,.1)) );"));
          client.println(F("    -webkit-background-size: 7px;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".view {"));
          client.println(F("    min-height: 100%;"));
          client.println(F("    overflow: auto;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".header-wrapper {"));
          client.println(F("    height: 44px;"));
          client.println(F("    font-weight: bold;"));
          client.println(F("    text-shadow: rgba(0,0,0,0.7) 0 -1px 0;"));
          client.println(F("    border-top: solid 1px rgba(255,255,255,0.6);"));
          client.println(F("    border-bottom: solid 1px rgba(0,0,0,0.6);"));
          client.println(F("    color: #fff;"));
          client.println(F("    background-color: #8195af;"));
          client.println(F("    background-image:"));
          client.println(F("    -webkit-gradient(linear, left top, left bottom,"));
          client.println(F("    from(rgba(255,255,255,.4)),"));
          client.println(F("    to(rgba(255,255,255,.05)) ),"));
          client.println(F("    -webkit-gradient(linear, left top, left bottom,"));
          client.println(F("    from(transparent),"));
          client.println(F("    to(rgba(0,0,64,.1)) );"));
          client.println(F("    background-repeat: no-repeat;"));
          client.println(F("    background-position: top left, bottom left;"));
          client.println(F("    -webkit-background-size: 100% 21px, 100% 22px;"));
          client.println(F("    -webkit-box-sizing: border-box;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".header-wrapper h1 {"));
          client.println(F("    text-align: center;"));
          client.println(F("    font-size: 20px;"));
          client.println(F("    line-height: 44px;"));
          client.println(F("    margin: 0;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".group-wrapper {"));
          client.println(F("    margin: 9px;"));
          client.println(F("    }"));
          client.println(F(""));
          client.println(F(".group-wrapper h2 {"));
          client.println(F("    color: #4c566c;"));
          client.println(F("    font-size: 17px;"));
          client.println(F("    line-height: 0.8;"));
          client.println(F("    font-weight: bold;"));
          client.println(F("    text-shadow: #fff 0 1px 0;"));
          client.println(F("    margin: 20px 10px 12px;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".group-wrapper h3 {"));
          client.println(F("    color: #4c566c;"));
          client.println(F("    font-size: 12px;"));
          client.println(F("    line-height: 1;"));
          client.println(F("    font-weight: bold;"));
          client.println(F("    text-shadow: #fff 0 1px 0;"));
          client.println(F("    margin: 20px 10px 12px;"));
          client.println(F("   }"));
          client.println(F(""));
          client.println(F(".group-wrapper table {"));
          client.println(F("    background-color: #fff;"));
          client.println(F("    -webkit-border-radius: 10px;"));

          client.println(F("    -moz-border-radius: 10px;"));
          client.println(F("    -khtml-border-radius: 10px;"));
          client.println(F("    border-radius: 10px;"));

          client.println(F("    font-size: 17px;"));
          client.println(F("    line-height: 20px;"));
          client.println(F("    margin: 9px 0 20px;"));
          client.println(F("    border: solid 1px #a9abae;"));
          client.println(F("    padding: 11px 3px 12px 3px;"));
          client.println(F("    margin-left:auto;"));
          client.println(F("    margin-right:auto;"));

          client.println(F("    -moz-transform :scale(1);")); //Code for Mozilla Firefox
          client.println(F("    -moz-transform-origin: 0 0;"));



          client.println(F("   }"));
          client.println(F(""));


          //how the green (ON) LED will look
          client.println(F(".green-circle {"));
          client.println(F("    display: block;"));
          client.println(F("    height: 23px;"));
          client.println(F("    width: 23px;"));
          client.println(F("    background-color: #0f0;"));
          //client.println(F("    background-color: rgba(60, 132, 198, 0.8);"));
          client.println(F("    -moz-border-radius: 11px;"));
          client.println(F("    -webkit-border-radius: 11px;"));
          client.println(F("    -khtml-border-radius: 11px;"));
          client.println(F("    border-radius: 11px;"));
          client.println(F("    margin-left: 1px;"));

          client.println(F("    background-image: -webkit-gradient(linear, 0% 0%, 0% 90%, from(rgba(46, 184, 0, 0.8)), to(rgba(148, 255, 112, .9)));@"));
          client.println(F("    border: 2px solid #ccc;"));
          client.println(F("    -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;"));
          client.println(F("    -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */"));
          client.println(F("    box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */"));

          client.println(F("    }"));
          client.println(F(""));

          //how the black (off)LED will look
          client.println(F(".black-circle {"));
          client.println(F("    display: block;"));
          client.println(F("    height: 23px;"));
          client.println(F("    width: 23px;"));
          client.println(F("    background-color: #040;"));
          client.println(F("    -moz-border-radius: 11px;"));
          client.println(F("    -webkit-border-radius: 11px;"));
          client.println(F("    -khtml-border-radius: 11px;"));
          client.println(F("    border-radius: 11px;"));
          client.println(F("    margin-left: 1px;"));
          client.println(F("    -webkit-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px;"));
          client.println(F("    -moz-box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */"));
          client.println(F("    box-shadow: rgba(11, 140, 27, 0.5) 0px 10px 16px; /* FF 3.5+ */"));
          client.println(F("    }"));
          client.println(F(""));

          //this will add the glare to both of the LEDs
          client.println(F("   .glare {"));
          client.println(F("      position: relative;"));
          client.println(F("      top: 1;"));
          client.println(F("      left: 5px;"));
          client.println(F("      -webkit-border-radius: 10px;"));
          client.println(F("      -moz-border-radius: 10px;"));
          client.println(F("      -khtml-border-radius: 10px;"));
          client.println(F("      border-radius: 10px;"));
          client.println(F("      height: 1px;"));
          client.println(F("      width: 13px;"));
          client.println(F("      padding: 5px 0;"));
          client.println(F("      background-color: rgba(200, 200, 200, 0.25);"));
          client.println(F("      background-image: -webkit-gradient(linear, 0% 0%, 0% 95%, from(rgba(255, 255, 255, 0.7)), to(rgba(255, 255, 255, 0)));"));
          client.println(F("    }"));
          client.println(F(""));


          //and finally this is the end of the style data and header
          client.println(F("</style>"));
          client.println(F("</head>"));

          //now printing the page itself
          client.println(F("<body>"));
          client.println(F("<div class=\"view\">"));
          client.println(F("    <div class=\"header-wrapper\">"));
          client.println(F("      <h1>Ethernet Switching</h1>"));
          client.println(F("    </div>"));
          client.println(F("<div  class=\"group-wrapper\">"));
          client.println(F("    <h2>Switch the required output.</h2>"));
          client.println();

          //This is for the arduino to construct the page on the fly.
          sentHeader = true;
        }

        char c = client.read();

        if (reading && c == ' ') {
          reading = false;
        }

        //       Serial.print(c);


        if (c == '?') {
          reading = true; //found the ?, begin reading the info
        }


        if (reading) {
          if (c == 'H') {
            outp = 1;
          }
          if (c == 'L') {
            outp = 0;
          }
          Serial.print(c);   //print the value of c to serial communication
          //Serial.print(outp);
          //Serial.print('\n');

          switch (c) {
            case '2':
              //add code here to trigger on 2
              triggerPin(2, client, outp);
              break;
            case '3':
              //add code here to trigger on 3
              triggerPin(3, client, outp);
              break;
            case '4':
              //add code here to trigger on 4
              triggerPin(4, client, outp);
              break;
            case '5':
              //add code here to trigger on 5
              triggerPin(5, client, outp);
              //printHtml(client);
              break;
            case '6':
              //add code here to trigger on 6
              triggerPin(6, client, outp);
              break;
            case '7':
              //add code here to trigger on 7
              triggerPin(7, client, outp);
              break;
            case '8':
              //add code here to trigger on 8
              triggerPin(8, client, outp);
              break;
            case '9':
              //add code here to trigger on 9
              triggerPin(9, client, outp);
              break;
          }

        }

        if (c == '\n' && currentLineIsBlank) {
          printLastCommandOnce = true;
          printButtonMenuOnce = true;
          triggerPin(777, client, outp); //Call to read input and print menu. 777 is used not to update any outputs
          break;
        }
      }
    }

    //Set Variables Before Exiting
    printLastCommandOnce = false;
    printButtonMenuOnce = false;

    allOn = "";
    allOff = "";
    client.println(F("\n<h3 align=\"center\">&copy; Author - Claudio Vella <br> Malta - October - 2012</h3>"));
    client.println(F("</div>\n</div>\n</body>\n</html>"));

    delay(1); // give the web browser time to receive the data
    client.stop(); // close the connection:

  }

}



void triggerPin(int pin, EthernetClient client, int outp) {
  //Switching on or off outputs, reads the outputs and prints the buttons

  //Setting Outputs
  if (pin != 777) {
    if (outp == 1) {
      digitalWrite(pin, HIGH);
    }
    if (outp == 0) {
      digitalWrite(pin, LOW);
    }
  }
  //Refresh the reading of outputs
  readOutputStatuses();


  //Prints the buttons
  if (printButtonMenuOnce == true) {
    printHtmlButtons(client);
    printButtonMenuOnce = false;
  }

}


//print the html buttons to switch on/off channels
void printHtmlButtons(EthernetClient client) {

  //Start to create the html table
  client.println(F(""));
  //client.println(F("<p>"));
  client.println(F("<FORM>"));
  client.println(F("<table border=\"0\" align=\"center\">"));

  //Start printing button by button
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {

    //set command for all on/off
    allOn += "H";
    allOn += var;
    allOff += "L";
    allOff += var;


    //Print begining of row
    client.print(F("<tr>\n"));

    //Prints the ON Buttons
    client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"Switch ON - Pin  "));
    client.print(var);
    client.print(F("\" onClick=\"parent.location='/?H"));
    client.print(var);
    client.print(F("'\"></td>\n"));

    //Prints the OFF Buttons
    client.print(F(" <td><INPUT TYPE=\"button\" VALUE=\"Switch OFF - Pin  "));
    client.print(var);
    client.print(F("\" onClick=\"parent.location='/?L"));
    client.print(var);
    client.print(F("'\"></td>\n"));


    //Print first part of the Circles or the LEDs
    if (readInput[var] == true) {
      client.print(F(" <td><div class='green-circle'><div class='glare'></div></div></td>\n"));
    } else
    {
      client.print(F(" <td><div class='black-circle'><div class='glare'></div></div></td>\n"));
    }


    //Print end of row
    client.print(F("</tr>\n"));
  }


  //Prints the ON All Pins Button
  client.print(F("<tr>\n<td><INPUT TYPE=\"button\" VALUE=\"Switch ON All Pins"));
  client.print(F("\" onClick=\"parent.location='/?"));
  client.print(allOn);
  client.print(F("'\"></td>\n"));

  //Prints the OFF All Pins Button
  client.print(F("<td><INPUT TYPE=\"button\" VALUE=\"Switch OFF All Pins"));
  client.print(F("\" onClick=\"parent.location='/?"));
  client.print(allOff);
  client.print(F("'\"></td>\n<td></td>\n</tr>\n"));

  //Closing the table and form
  client.println(F("</table>"));
  client.println(F("</FORM>"));
  //client.println(F("</p>"));

}

//Reading the Output Statuses
void readOutputStatuses() {
  for (int var = outputLowest; var < outputLowest + outputQuantity; var++)  {
    readInput[var] = digitalRead(var);
    //Serial.print(readInput[var]);
  }

}

Ctrl+F -> Sök efter client.println(" och ersätt med client.println(F(", upprepa för print. Sedan sök efter "); och ersätt med "));, klart. :)
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av lillahuset »

Sedan sök efter "); och ersätt med "));
Inte överallt.

Edit: Hmmm, kanske överallt. Det beror på om du har strängar som inte ska printas... :oops:
Senast redigerad av lillahuset 4 juli 2016, 18:09:10, redigerad totalt 1 gång.
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av Klas-Kenny »

Nä, men just i detta fallet så fungerade det. :)

Den eleganta "universella" lösningen vore ju med lite regex.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av lillahuset »

Och då har man plockat fram en riktigt vass kniv som man ogärna skär sig på. :)
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av ochkl0620 »

Tack! Nu ska jag leka vidare :)
mAVRick
Inlägg: 319
Blev medlem: 19 mars 2013, 12:43:43
Ort: Östersund

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av mAVRick »

lillahuset skrev:Och då har man plockat fram en riktigt vass kniv som man ogärna skär sig på. :)
Ursäkta? Det var då till å va på tvären... Så sök-ersätt duger inte, för att det är för 'trubbigt'. Och regex duger inte för det är för 'vasst'.
Säg mig då, istället för att klaga på två bra lösningar på problemet, hur anser du det ska lösas?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av lillahuset »

Jag klagar inte. Absolut inte. Jag har bara viss respekt för folk som behärskar regex. Själv måste jag kolla man-sidan för det mesta. :)
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av adent »

Fast glädjen i att få till en regexp som ser ut som något katten släpat in men som gör precis rätt! priceless :)
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av lillahuset »

Som sagt, en viss känsla av mallighet infinner sig.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av ochkl0620 »

Tackar! Det löste sig till sist :)
Skulle förresten behöva hjälp med en sak...
Arduinon ska samarbeta med en ethernet modul, dock får jag problem när jag inkluderar biblioteket för min modul, ej samma som i originalkretsen.
Den vill inte kompilera osv osv... Exemplelvis denna. https://github.com/jcw/ethercard
Modulen är en ebayvariant (MINI ENC28J60) som jag fått att funka med annan kod. Typ Hello World på en webbplats.
Användarvisningsbild
ochkl0620
Inlägg: 4852
Blev medlem: 9 maj 2010, 23:34:56
Skype: challe.claesson
Ort: Näsåker Västernorrland
Kontakt:

Re: Arduino UNO ATmega 328P Otillräckligt minne?

Inlägg av ochkl0620 »

Nu har det kört ihop sig igen... Hittade en annan kod att utgå ifrån. Dock samma problem här som innan med otillräckligt minne.
Då försökte jag göra som Klas_Kenny gjorde med den andra koden men jag får inte riktigt till det... Vid kompilering strular det igen med felmeddelande.
KOD

Kod: Markera allt

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */
 #include <Dhcp.h>
#include <Dns.h>
#include <ethernet_comp.h>
#include <UIPClient.h>
#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPUdp.h>



// 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, 0x2D };


byte gateway[] = { 192, 168, 0, 1 }; //               <------- PUT YOUR ROUTERS IP Address to which your shield is connected Here
byte subnet[] = { 255, 255, 255, 0 }; //                <------- It will be as it is in most of the cases
IPAddress ip(192,168,0,199);

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


#define RELAY_CH1  2
#define RELAY_CH2  3
#define RELAY_CH3  4
#define RELAY_CH4  5
#define RELAY_CH5  6
#define RELAY_CH6  7
#define RELAY_CH7  8
#define RELAY_CH8  9

String readString;

void setup() {
  
  
        pinMode(RELAY_CH1, OUTPUT); 
 	digitalWrite(RELAY_CH1, HIGH);  // switch on LED1
 
        pinMode(RELAY_CH2, OUTPUT); 
 	digitalWrite(RELAY_CH2, HIGH);  // switch on LED2
 
        pinMode(RELAY_CH3, OUTPUT); 
 	digitalWrite(RELAY_CH3, HIGH);  // switch on LED3
 
        pinMode(RELAY_CH4, OUTPUT); 
 	digitalWrite(RELAY_CH4, HIGH);  // switch on LED4
 
        pinMode(RELAY_CH5, OUTPUT); 
 	digitalWrite(RELAY_CH5, HIGH);  // switch on LED5
 
        pinMode(RELAY_CH6, OUTPUT); 
 	digitalWrite(RELAY_CH6, HIGH);  // switch on LED6
 
        pinMode(RELAY_CH7, OUTPUT); 
 	digitalWrite(RELAY_CH7, HIGH);  // switch on LED7
 
        pinMode(RELAY_CH8, OUTPUT); 
 	digitalWrite(RELAY_CH8, HIGH);  // switch on LED8
  
  
  
 // 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()); 
  
}


void loop() {
  // listen for incoming clients
  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();
        
        if (readString.length() < 100) {
          //store characters to string
          readString += c;			//Serial.print(c);
        }
        
        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.print(F("ln(F("HTTP/1.1 200 OK"));
          client.print(F("ln(F("Content-Type: text/html"));
          client.print(F("ln(F("Connection: close"));  // the connection will be closed after completion of the response
	  client.print(F("ln(F("Refresh: 5"));  // refresh the page automatically every 5 sec
          client.print(F("ln(F();
          client.print(F("ln(F("<!DOCTYPE HTML>"));
          client.print(F("ln(F("<html>"));
          
          client.print(F("ln(F("<HEAD>"));
          client.print(F("ln(F("<meta name='apple-mobile-web-app-capable' content='yes' />"));
          client.print(F("ln(F("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />"));
          //client.print(F("ln(F("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://www.digital2u.net/autohome.css\" />"));
          client.print(F("ln(F("<meta http-equiv=\"refresh\" content=\"5;url=http://192.168.0.199/\"/>" );
          client.print(F("ln(F("</HEAD>"));
          
          client.print(F("ln(F("<body bgcolor=\"#D0D0D0\">"));
          //client.print(F("ln(F("<hr/>"));
          //client.print(F("ln(F("<hr/>"));
          
          //client.print(F("ln(F("<h4><center><img border=\"2\" src=\"https://lh3.googleusercontent.com/-C6BoJrRUFko/UEUFeCwkvdI/AAAAAAAAAOc/E7gcYvPV6r4/s960/Logo.jpg\" /></center></h4>"));
          //client.print(F("ln(F("<hr/>"));
          //client.print(F("ln(F("<hr/>"));
                   
          client.print(F("("<center> <p> <h1>Welcome to Arduino Home Control V0.25 (Active Low)  </h1></p> "));
          //client.print(F("ln(F("<br />"));
          //client.print(F("ln(F("<br />"));
          
          
          // Relay Status Display
          client.print(F("ln(F("<center>"));
          
              client.print(F("ln(F("<table border=\"5\">"));
              
                  client.print(F("ln(F("<tr>")); 
                      if (!digitalRead(RELAY_CH1))
                      { 
                           client.print(F("("<td> <p style=\"font-family:arial;color:black;font-size:26px;\">Device 1.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p> </td>"));
                      }
                      else
                      {
                           client.print(F("("<td> <p style=\"font-family:arial;color:black;font-size:26px;\">Device 1.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                      
                                  
                      if (!digitalRead(RELAY_CH2))
                      {   
                           client.print(F("("<td> <p style=\"font-family:arial;color:black;font-size:26px;\">Device 2.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {  
                          client.print(F("("<td> <p style=\"font-family:arial;color:black;font-size:26px;\">Device 2.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                     
                      
                      if (!digitalRead(RELAY_CH3))
                      { 
                           client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 3.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {
                          client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 3.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                     
                     
                      if (!digitalRead(RELAY_CH4))
                      { 
                         client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 4.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {
                          client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 4.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                     
                     
                      if (!digitalRead(RELAY_CH5))
                      { 
                           client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 5.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {
                          client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 5.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                     
                             
                      if (!digitalRead(RELAY_CH6))
                      {   
                           client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 6.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {  
                          client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 6.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                      
                          
                      if (!digitalRead(RELAY_CH7))
                      { 
                           client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 7.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {
                          client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 7.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                     
                     
                      if (!digitalRead(RELAY_CH8))
                      { 
                         client.print(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 8.</p><p style=\"font-family:arial;color:green;font-size:35px;\">ON</p></td>"));
                      }
                      else
                      {
                          client.print(F("(F("("<td><p style=\"font-family:arial;color:black;font-size:26px;\">Device 8.</p><p style=\"font-family:arial;color:red;font-size:35px;\">OFF</p></td>"));
                      }
                                         
                 client.print(F("ln(F("</tr>"));                   
              client.print(F("ln(F("</table>")); 
              
          client.print(F("ln(F("</center>"));
          client.print(F("ln(F("<br />"));

          
          
         /* Relay Control Code  */                
        
          client.print(F("ln(F("<a href=\"/?relay1on\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\"; color:red ;>Device 1 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay1off\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 1 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
          

          client.print(F("ln(F("<a href=\"/?relay2on\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 2 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay2off\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 2 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
          
          
          client.print(F("ln(F("<a href=\"/?relay3on\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 3 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay3off\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 3 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
          

          client.print(F("ln(F("<a href=\"/?relay4on\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 4 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay4off\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 4 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
         
          
          client.print(F("ln(F("<a href=\"/?relay5on\"\"> <button style=\"width:360px;height:120px\"> <font size=\"7\">Device 5 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay5off\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 5 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));        


          client.print(F("ln(F("<a href=\"/?relay6on\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 6 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay6off\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 6 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
         
          
          client.print(F("ln(F("<a href=\"/?relay7on\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 7 ON </font> </button> </a> "));
          client.print(F("ln(F("<a href=\"/?relay7off\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 7 OFF </font> </button> </a> <br />"));  
          client.print(F("ln(F(F("<br />"));
          

          client.print(F("ln(F(F("<a href=\"/?relay8on\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 8 ON </font> </button> </a> "));
          client.print(F("ln(F(F("<a href=\"/?relay8off\"\"><button style=\"width:360px;height:120px\"> <font size=\"7\">Device 8 OFF </font> </button> </a> <br />")); 
          client.print(F("ln(F("<br />"));
         
          
          // control arduino pin via ethernet Start //

        if(readString.indexOf("?relay1on") >0)//checks for on
        {
            digitalWrite(RELAY_CH1, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay1off") >0)//checks for off
          {
            digitalWrite(RELAY_CH1, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
          
          
         if(readString.indexOf("?relay2on") >0)//checks for on
        {
            digitalWrite(RELAY_CH2, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay2off") >0)//checks for off
          {
            digitalWrite(RELAY_CH2, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
          
          
          if(readString.indexOf("?relay3on") >0)//checks for on
        {
            digitalWrite(RELAY_CH3, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay3off") >0)//checks for off
          {
            digitalWrite(RELAY_CH3, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
        
        if(readString.indexOf("?relay4on") >0)//checks for on
        {
            digitalWrite(RELAY_CH4, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay4off") >0)//checks for off
          {
            digitalWrite(RELAY_CH4, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
        
         if(readString.indexOf("?relay5on") >0)//checks for on
        {
            digitalWrite(RELAY_CH5, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay5off") >0)//checks for off
          {
            digitalWrite(RELAY_CH5, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
          
          
         if(readString.indexOf("?relay6on") >0)//checks for on
        {
            digitalWrite(RELAY_CH6, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay6off") >0)//checks for off
          {
            digitalWrite(RELAY_CH6, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
          
          
          if(readString.indexOf("?relay7on") >0)//checks for on
        {
            digitalWrite(RELAY_CH7, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay7off") >0)//checks for off
          {
            digitalWrite(RELAY_CH7, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
        
        if(readString.indexOf("?relay8on") >0)//checks for on
        {
            digitalWrite(RELAY_CH8, LOW);    // set pin 4 high
            //Serial.println("Led On"));
			
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/on.png' />"));
            //client.print(F("ln(F("Light 1 Is On"));
            client.print(F("ln(F("<br />"));
	}
        else{
          if(readString.indexOf("?relay8off") >0)//checks for off
          {
            digitalWrite(RELAY_CH8, HIGH);    // set pin 4 low
            //Serial.println("Led Off"));
            client.print(F("ln(F("<link rel='apple-touch-icon' href='http://chriscosma.co.cc/off.png' />"));

	    //client.print(F("ln(F("Light 1 Is Off"));
            client.print(F("ln(F("<br />"));
          }
        }
                    
        // INPUT
          
          
          // output the value of each analog input pin
          //for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
          //  int sensorReading = analogRead(analogChannel);
          //  client.print(F("("analog input "));
          //  client.print(F("(analogChannel);
          //  client.print(F("(" is "));
          //  client.print(F("(sensorReading);
          //  client.print(F("ln(F("<br />"));       
          //}
                   
          client.print(F("ln(F("<hr> <p> By <a href=\"http://androidcontrol.blogspot.com\"></p><p style=\"font-family:arial;color:blue;font-size:20px;\">Android Control Blogspot</p></a>"));
                  
           readString="";
           client.print(F("ln(F("</body>"));         
           client.print(F("ln(F("</html>"));
         
          break;
        }// if ( c == \n )
        
        
        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);
    //client.print(F("ln(F("<meta http-equiv=\"refresh\" content=\"10;url=http://192.168.0.199/\"/>" );
    
    // close the connection:
    client.stop();
    Serial.println(F("client disonnected"));
    
  }//if(Client)
  
}//Loop
Felrapport:

Kod: Markera allt

Arduino:1.6.7 (Windows 7), Kort:"Arduino/Genuino Uno"

WARNING: Category '' in library UIPEthernet is not valid. Setting to 'Uncategorized'
WebServerControl_ActiveLow:511: error: unterminated argument list invoking macro "F"

Multiple libraries were found for "Dhcp.h"
 Used: C:\Users\Challe\Documents\Arduino\libraries\arduino_uip
 Not used: C:\Program Files (x86)\Arduino\libraries\Ethernet
exit status 1
unterminated argument list invoking macro "F"

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Skriv svar