Go Down

Topic: HTML aflooptimer (Read 9485 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

Jantje

dat dit niet werkt vind ik meer dan normaal.
Heb je de voorbeeld programma's al eens bekeken?
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


dat dit niet werkt vind ik meer dan normaal.
Heb je de voorbeeld programma's al eens bekeken?


Ja die had ik beken maar daar wordt het ook alleen gebruikt als delay tussen 2 clock tijden. En deze libary wordt alleen gebruikt om op bepaalde tijden op bepaalde dagen een actie te onder nemen. Wat ik probeer te maken is dat je live (Bedoel ik dus mee wanneer je maar wilt ) op knopje kan drukken en dat die dan na 10/20/40 of 60 min uit gaat.

Ik begrijp nu niet echt welke functie je precies aanraad van deze libary :S ?

MVG Pewebob

Jantje

de tijd is nu +60 minuten?
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 -


MAS3

Er word bedoeld dat je zelf ook een beetje na moet denken (en leren).
Je wil dus uitschakelen om (nu + 60 minuten).
Daarvoor moet je bepalen wat nu is, en je moet bepalen hoe lang 60 minuten eigenlijk duren.
En als je geen 60 minuten maar 40, 20 of 10 minuten, dan moet je dus iets soortgelijks doen met een ander getalletje.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

pewebob

Dus ik moet timer libary gebruiken om arduino een tijd te geven die hij kan aflezen.? oke dat klinkt logish :P Maar ik weet niet wat correct term is voor Nu+60 min in het engels dus ik zou niet weten waar ik moet zoeken atm heb echt zo veel dingen al gelezen en opgezocht er voor :S

MAS3

"Huh wat bedoel ????"

Waar staat dat er een library moet worden gebruikt ?
Nu is relatief.
Nu is 21:50 hier, maar in de USA is het 15:50 op z'n laatst.
Het maakt niet uit waar je dat moment van "nu" aan hangt.
En je hoeft er dus ook geen kalender en klok bij te houden om dat vast te stellen.
Je Arduino is geen mens, maar heeft wel een hartslag.
Dus als er een mooi Arduina'tje langs komt gaat die hartslag niet sneller slaan.
Daarom kun je dat perfect gebruiken.
Je hoeft dan dus alleen maar te tellen, meer niet.

Even over een andere boeg:
Je bent volgens mij de hele tijd bezig je vraagstuk in een klap op te lossen.
Maar dat lukt je niet zomaar.
En dat zul je nog veel vaker tegenkomen.
Breek je vraagstuk op in een verzameling kleinere vragen.
Doe dat zolang tot je elke vraag kunt oplossen.
Als je ze dan weer bij elkaar stopt, heb je je vraagstuk ook opgelost.
Dit heeft dus te maken met de aanpak van het oplossen van alle soorten van problemen, niet zo zeer met je vraag van dit moment.
Je kunt dat dan ook toepassen hele andere opdrachten.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

pewebob

Hey bedankt voor de reply en de beste wensen voor iedereen :)

Ik heb in me code Time libary toegevoegd
Code: [Select]
#include <Time.h>
Had alleen vraag hij wordt niet oranje dus ik weet nu niet zeker of hij het wel ziet
Maar ik heb nu ook setTime toegevoegd in me void setup
Code: [Select]
setTime(8,29,40,1,1,10);

Deze wordt wel oranje door de Time.h

Zo ver heb ik begrepen is dat als iets oranje wordt dat arduino het herkent als iets maar weet dit niet zeker.

Maar ik heb nu dan een NU in me code nu is volgende stap + toevoegen. Ik neem aan dat ik dit moet toepassen op me Knopjes en niet op me led aansturing want als ik dit zou toepassen op me led aansturen zou dit voor alles gelden ???

Mvg pewebob

Jantje

pewebob
Je zoekt het veel te ver. De arduino heeft een klok (de hartrslag die mas3 vermeld) alleen is die klok niet afgesteld op wat je op je uurwerk ziet
Quote
Nu is 21:50 hier, maar in de USA is het 15:50 op z'n laatst.

Zoals MAS3 reeds zei is tijd heel relatief; maar dat geeft niet want om te weten wat "binnen 60 minuten" is moet je klok niet juist staan. Je moet gewoon kijken hoe laat het nu is en dan de klok in de gaten houden tot het NU+60 minuten is.

Op arduino betekend dit:
Om te kijken op de klok gebruik je millis() (deze functie zegt je dus wat nu is) http://arduino.cc/en/Reference/Millis
daar millis in 1000ste van een seconde werkt is 60 minuten = 60 *60*1000
of nu +60minten = millis()+60*60*1000
Merk op dat de tijd doorloopt. Dus om binnen 60 minuten iets te doen zal je nu in je hoofd moeten opslaan (en niet elke keer naar je uurwerk kijken om te zien wat nu is) Datzelfde is nodig op je arduino.
met andere woorden
nu+60 minuten > nu ( = if( millis()+60*60*1000>millis()) )zal niet werken

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 -

Go Up