Arduino koden fungerar inte med ett libary. LÖST

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 koden fungerar inte med ett libary. LÖST

Inlägg av ochkl0620 »

Tjena!
Håller på och leker lite, ska få en ethernet relästyrning att fungera med en arduino UNO.
Koden bifogas i tråden. Den är anpassad för en vanlig ethernet shield, det jag har är en liten modul. ENC28J60. Den har jag lyckats få att hosta en webbserver som lägger upp en text så den elektriska biten är OK. Bara att jag får en massa felmeddelande när jag försöker kompilera efter jag inkluderat rätt libary.
EDIT: Libaryt till modulen heter "UIPEthernet"

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]);
  }
 
}
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'
In file included from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPUdp.h:23:0,

                 from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/Dhcp.h:7,

                 from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:1:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/ethernet_comp.h:5:24: error: redefinition of 'class UIPClient'

 #define EthernetClient UIPClient

                        ^

C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetClient.h:8:7: note: in expansion of macro 'EthernetClient'

 class EthernetClient : public Client {

       ^

In file included from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:4:0:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPClient.h:60:7: error: previous definition of 'class UIPClient'

 class UIPClient : public Client {

       ^

In file included from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPUdp.h:23:0,

                 from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/Dhcp.h:7,

                 from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:1:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/ethernet_comp.h:6:24: error: redefinition of 'class UIPServer'

 #define EthernetServer UIPServer

                        ^

C:\Program Files (x86)\Arduino\libraries\Ethernet\src/EthernetServer.h:8:7: note: in expansion of macro 'EthernetServer'

 class EthernetServer : 

       ^

In file included from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPEthernet.h:34:0,

                 from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:5:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPServer.h:26:7: error: previous definition of 'class UIPServer'

 class UIPServer : Server {

       ^

In file included from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPUdp.h:23:0,

                 from C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/Dhcp.h:7,

                 from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:1:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/ethernet_comp.h:4:18: error: conflicting declaration 'EthernetClass UIPEthernet'

 #define Ethernet UIPEthernet

                  ^

C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:39:22: note: in expansion of macro 'Ethernet'

 extern EthernetClass Ethernet;

                      ^

In file included from C:\Users\Challe\Documents\Arduino\sketch_jul08a\sketch_jul08a.ino:5:0:

C:\Users\Challe\Documents\Arduino\libraries\arduino_uip/UIPEthernet.h:125:25: error: 'UIPEthernet' has a previous declaration as 'UIPEthernetClass UIPEthernet'

 extern UIPEthernetClass UIPEthernet;

                         ^

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
Fel vid kompilering.

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Senast redigerad av ochkl0620 8 juli 2016, 16:48:30, redigerad totalt 1 gång.
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 koden fungerar inte med ett libary.

Inlägg av ochkl0620 »

Här är en länk till projektet btw.
http://www.instructables.com/id/Etherne ... /?ALLSTEPS

EDIT! Som vanligt... Man stirrar sig blind på något, ger upp och går därifrån. Sedan kommer man tillbaka, ber om hjälp. Medans man väntar så pillar man lite för att inse att det var ett skitproblem.
Vart strul då jag inte raderade det gamla biblioteket :)
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 koden fungerar inte med ett libary. LÖST

Inlägg av ochkl0620 »

Fast lite problem...
Sidan som hostas är otroligt seg och uppdaterar sig själv hela tiden... Är det pga slö hårdvara?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Arduino koden fungerar inte med ett libary. LÖST

Inlägg av TomasL »

Ja och sättet du har implementerat det.
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 koden fungerar inte med ett libary. LÖST

Inlägg av ochkl0620 »

Okej? Implentera?
Har inte skrivit koden själv. Inte rört den mer än att byta libary till Ethernetmodulen :)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Arduino koden fungerar inte med ett libary. LÖST

Inlägg av TomasL »

Nja, det handlar mer om att du implementerat din hemsida med en massa printf eller vad det nu är för något.
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 koden fungerar inte med ett libary. LÖST

Inlägg av ochkl0620 »

Aha grafiken på sidan antar jag.... Hm
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Arduino koden fungerar inte med ett libary. LÖST

Inlägg av sodjan »

loop() körs väl kontinuerligt och den anropar checkForClient().
Och den kommer väl att skicka om sidan så länge som:

Kod: Markera allt

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()) 
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Arduino koden fungerar inte med ett libary. LÖST

Inlägg av TomasL »

Bästa sättet är att skapa sidan i en texteditor, plocka bort alla mellanslag och radbrytningar så att HTML-koden blir en enda ström med data.
Kompilera in detta i processorns minne tillsammans med bilder osv.
Behöver man dynamiska variabler på sidan så använder man helst CGI eller motsvarande, så att dessa data hamnar i en egen frame.
man kallar då variablerna på ett lämpligt sätt, till exempel %%VAR00001%% eller nått sånt.
När man sedan skickar den delen av sidan så skannar man igenom det man skickar och byter ut textsträngen mot data.
Man skickar bara när man får ett "GET" från webläsaren, så man behöver inte hålla på att uppdatera hela tiden, typ

if (Received == "GET")
{
send (data);
}
Skriv svar