Go Down

Topic: HTML aflooptimer (Read 9 times) previous topic - next topic

pewebob

Hey jantje ik snap nu wat verschil is als char kan je alleen 1 cijfer gebruiken maar kan je ook Letters gebruiken bijvoorbeeld 'A' of andere letter inplaats vaan een cijfer zoals '3'

Jantje

enkel aanhalings teken betekend 1 symbool (ook wel teken of character genoemd)
dubbel aanhalings tekens betekend meerdere symbolen  na elkaar

Simpel gesteld: een symbool komt overeen met de tekening (vandaar teken) op de knop van je toetsenbord.

Elk symbool komt overeen met een getal. Op arduino is dat een getal van 0 tot 255 of dus een byte (byte = 8 bits)
Dus een symbool is een byte die overeenkomt met een tekening. Een tabel die getallen en symbolen mapt vind je hier http://www.asciitable.com/
Bijvoorbeeld het symbool '1'  komt overeen met het decimaal getal 49 (normale mensen werken in het decimaal stelsel)
het getal 0 ( nul niet hoofdletter O) komt overeen met null (hier is geen symbool voor en is een speciaal character).

Zorg dat je het voorgaande goed begrijpt voor je de volgende paragraaf probeert te begrijpen.
C heeft geen speciale type variabele voor strings (= een opeenvolging van characters)
Dit is een probleem omdat je dan niet weet wat het einde is van de string is(het gehele geheugen van je arduino zijn bytes)
Om dat probleem op te lossen heeft men de conventie dat achter de laatste byte een null (dus de waarde 0) staat.
Concreet betekend dit dat als je in je code schrijft.
Code: [Select]
if(a=='1')
dit door de compiler verstaan wordt als
Code: [Select]
if(a==49)
Wat is wat je wilt.
terwijl
Code: [Select]
if(a=="1")
dit door de compiler verstaan wordt als
Code: [Select]
if(a==[49,0])
En dit is eigenlijk fout.

Code: [Select]
if(readString.indexOf('10') >0)
Hier heeft de compiler een probleem mee. Dit omdat je met de enkele aanhalingsteken zegt dat het een symbool (byte) is maar aan de andere kant geef je 2 symbolen (bytes) mee.
Arduino IDE staat zo ingesteld dat foutwaarschuwingen niet gegeven worden.

Als toemaatje nog iets over String
String is een C++ oplossing voor het ontbreken van het speciale type variabele voor strings. Maar C++ is 100% compatibel met C (wat wil zeggen dat C code door een C++ compiler kan verwerkt worden).
Dat wil zeggen dat het C probleem blijft bestaan. Meer nog de meeste implementaties vallen uiteindelijk terug op "null om te zeggen dat je aan het einde van de symbolen bent"

Ik hoop dat het wat duidelijker is nu  :~

Met vriendelijke groet
Jantje

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

pewebob

Hey jantje

Eindelijk een Nederlandse uitleg :D had al rond gezocht wat nou precies verschil is maar meestal haalde ik sommigen termen door elkaar en begreep ik het niet. ik heb nu me readstring verandert naar
Code: [Select]
if(readString.indexOf("10") >0)

Code: [Select]
client.println(F("&nbsp&nbsp;<input type=submit value='10 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off10;'>"));
en hier me knop deze hoef ik niet met " toch want deze zoekt naar 10 of zoekt hij nu naar 1 en 0 ? zoals bij mijn all off knop.

Code: [Select]
client.println(F("<input type=submit value='ALL OFF' style=background:#00FF00;width:100px;height:45px onClick=location.href='/?off3579;'>"));
Deze knop.

nu ik dus weet dat ik me knopjes kan splitsen maar wel zelfde let kan aansturen moet ik alleen nog een delay in die functie crearen. Nu heb ik gemerkt is als je gewoon
Code: [Select]
delay(10000)
toevoegt je alleen maar 10 sec delay hebt in laden van je html pagina

Ik had ook al libary timer gevonden maar dit is niet om iets te vertragen. Want alles wat ik nodig heb is dat ik op me knopje druk en dat die dan 10/20/40/60 min wacht met het sturen van de opdracht.

Hopelijk is nu beetje duidelijk wat ik bedoel. (gewoon voor zekerheid)

Ik ben zelf weer verder aan het uitproberen met de nieuwe info die ik nu heb en kijk of ik nog andere mogelijk heden kan vinden.

MVG Pewebob

Jantje

het antwoord op de delay is al gegeven
http://forum.arduino.cc/index.php?topic=199154.msg1485618#msg1485618
probeer dat eerst eens goed uit.
Met vriendelijke groet
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

pewebob

Ik had did al geprobeerd maar ik krijg alleen zelfde resultaat als normalen delay(xxx)
Code: [Select]
#include <Time.h>

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xAF, 0xF6 }; //physical mac address
byte ip[] = { 192, 168, 50, 250 }; // ip in lan
byte gateway[] = { 192, 168, 50, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port

String readString;

//////////////////////

void setup(){

  pinMode(5, OUTPUT); //pin selected to control
  pinMode(6, OUTPUT); //pin selected to control
  pinMode(7, OUTPUT); //pin selected to control
  pinMode(8, OUTPUT); //pin selected to control
  pinMode(2, OUTPUT); //pin selected to control
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  server.begin();

  //enable serial data print
  Serial.begin(9600);
  Serial.println(F("server multi pin button test 1.0")); // so I can keep track of what is loaded
}

void loop(){
  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        //read char by char HTTP request
        if (readString.length() < 100) {

          //store characters to string
          readString += c;
          //Serial.print(c);
        }

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

          ///////////////
          Serial.println(readString); //print to serial monitor for debuging
          client.println(F("HTTP/1.1 200 OK")); //send new page
          client.println(F("Content-Type: text/html"));
          client.println();

          client.println(F("<HTML>"));
          client.println(F("<HEAD>"));
          client.println(F("<TITLE>Domotica Control Panel</TITLE>"));
          client.println(F("</HEAD>"));
          client.println(F("<BODY style=background-color:#87B4D8>"));

          client.println(F("<H1>Domotica Control Panel</H1>"));
         
          // For simple testing, pin 5, 6, 7, and 8 are used in buttons
          // DIY buttons
          client.println(F("<p>WandContactDoos 1.</p>"));
          client.println(F("<input type=submit value=ON style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?on2;'>"));
          client.println(F("<input type=submit value=OFF style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?off3;'>"));
          client.println(F("<input type=submit value='ALL OFF' style=background:#00FF00;width:100px;height:45px onClick=location.href='/?off3579;'>"));
          client.println(F("&nbsp&nbsp;<input type=submit value='10 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off3;'>"));
          client.println(F("<input type=submit value='20 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off3;'>"));
          client.println(F("<input type=submit value='40 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off3;'>"));
          client.println(F("<input type=submit value='60 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off3;'>")); 

          // mousedown buttons
          client.println(F("<p>WandContactDoos 2.</p>"));
          client.println(F("<input type=submit value=ON style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?on4;'>"));
          client.println(F("<input type=submit value=OFF style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?off5;'>"));
          client.println(F("<input type=submit value='ALL OFF' style=background:#00FF00;width:100px;height:45px onClick=location.href='/?off3579;'>"));
          client.println(F("&nbsp&nbsp;<input type=submit value='10 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off5;'>"));
          client.println(F("<input type=submit value='20 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off5;'>"));
          client.println(F("<input type=submit value='40 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off5;'>"));
          client.println(F("<input type=submit value='60 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off5;'>"));
         
          // mousedown radio buttons
          client.println(F("<p>WandContactDoos 3.</p>"));
          client.println(F("<input type=submit value=ON style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?on6;'>"));
          client.println(F("<input type=submit value=OFF style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?off7;'>"));
          client.println(F("<input type=submit value='ALL OFF' style=background:#00FF00;width:100px;height:45px onClick=location.href='/?off3579;'>"));
          client.println(F("&nbsp&nbsp;<input type=submit value='10 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off7;'>"));
          client.println(F("<input type=submit value='20 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off7;'>"));
          client.println(F("<input type=submit value='40 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off7;'>"));
          client.println(F("<input type=submit value='60 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off7;'>"));
         
   
         
          // custom buttons
          client.println(F("<p>WandContactDoos 4.</p>"));
          client.println(F("<input type=submit value=ON style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?on8;'>"));
          client.println(F("<input type=submit value=OFF style=background:#FFFFFF;width:100px;height:45px onClick=location.href='/?off9;'>"));
          client.println(F("<input type=submit value='ALL OFF' style=background:#00FF00;width:100px;height:45px onClick=location.href='/?off3579;'>"));
          client.println(F("&nbsp&nbsp;<input type=submit value='10 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off10;'>"));
          client.println(F("<input type=submit value='20 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off9;'>"));
          client.println(F("<input type=submit value='40 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off9;'>"));
          client.println(F("<input type=submit value='60 Min' style=background:#FF0000;width:100px;height:45px onClick=location.href='/?off9;'>"));
         


          client.println(F("</BODY>"));
          client.println(F("</HTML>"));

          delay(1);
          //stopping client
          client.stop();

          ///////////////////// control arduino pin
          if(readString.indexOf('2') >0)//checks for 2
          {
            digitalWrite(5, HIGH);    // set pin 5 high
            Serial.println("Led 5 On");
          }
          if(readString.indexOf('3') >0)//checks for 3
          {
            digitalWrite(5, LOW);    // set pin 5 low
            Serial.println("Led 5 Off");
          }
         
          if(readString.indexOf('4') >0)//checks for 4
          {
            digitalWrite(6, HIGH);    // set pin 6 high
            Serial.println("Led 6 On");
          }
          if(readString.indexOf('5') >0)//checks for 5
          {
            digitalWrite(6, LOW);    // set pin 6 low
            Serial.println("Led 6 Off");
          }
         
           if(readString.indexOf('6') >0)//checks for 6
          {
            digitalWrite(7, HIGH);    // set pin 7 high
            Serial.println("Led 7 On");
          }
          if(readString.indexOf('7') >0)//checks for 7
          {
            digitalWrite(7, LOW);    // set pin 7 low
            Serial.println("Led 7 Off");
          }     
         
            if(readString.indexOf('8') >0)//checks for 8
          {
            digitalWrite(8, HIGH);    // set pin 8 high
            Serial.println("Led 8 On");
          }
          if(readString.indexOf('9') >0)//checks for 9
          {
            digitalWrite(8, LOW);    // set pin 8 low
            Serial.println("Led 8 Off");
          }
          if(readString.indexOf("10") >0)//checks for string 10
          {
            digitalWrite(8, LOW);    // set pin 8 low
            Serial.println("Led 8 Off");
            Alarm.delay(10000);
          }         
             
          //clearing string for next read
          readString="";

        }
      }
    }
  }
}

Onder aan de code zie je alarm.delay staan rest is het zelfde als voor heen

Go Up