data op de juiste plaats in html krijgen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: data op de juiste plaats in html krijgen

Berichtdoor tijne » 06 Nov 2016, 00:41

ik heb een andere sketch gepakt omdat hij ongelovenlijk traag werd.

nou heb ik werkt het dat hij de tijd op de juiste plaats zet en ook nog andere waarde maar deze zet hij nu ook onder de tijd neer. heb jij een idee wat ik fout doe?

Code: Alles selecteren
#include <RTClib.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>


int sensorPin = 0;



byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 120);
EthernetServer server(80);

RTC_DS1307 rtc;

File webFile;
File webFile2;

void setup()
{


#ifdef AVR
  Wire.begin();
#else
  Wire1.begin();
#endif

  rtc.begin();


  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);


  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("ERROR - SD card initialization failed!");
    return;
  }
  Serial.println("SUCCESS - SD card initialized.");


  if (!SD.exists("index.htm")) {
    Serial.println("ERROR - Can't find index.htm file!");
    return;
  }
  Serial.println("SUCCESS - Found index.htm file.");



}

void loop()
{


  int reading = analogRead(sensorPin);


  float voltage = reading * 5.0;
  voltage /= 1024.0;




  float temperatureC = (voltage - 0.5) * 100 ;
  Serial.print(temperatureC);



  delay(2000);

  DateTime now = rtc.now();







  EthernetClient client = server.available();

  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {


          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<tijd>");


          webFile = SD.open("index.htm");


          if (webFile) {
            while (webFile.available()) {
              byte data = webFile.read();   // read next byte
              if ( data == '$')
              {
                byte token = webFile.read();  // read token after the '$'
                switch ( token)
                {
                  case 'A':
                    // Write the time to the client
                    client.print(now.hour(), DEC);
                    client.print(':');
                    client.print(now.minute(), DEC);
                    client.print(':');
                    client.print(now.second(), DEC);
                    client.print(' ');
                    client.print(now.day(), DEC);
                    client.print('/');
                    client.print(now.month(), DEC);
                    client.print('/');
                    client.print(now.year(), DEC);
                    client.println("<br>");

                  case 'B':
                    // Write the time to the client
                    client.print(temperatureC);


                    break;
                  default:
                    // token not recognized, print data as if nothing happened.
                    client.write( data);
                    client.write( token);
                    break;
                }
              }
              else {
                client.write( data);          // send byte client
              }
            }

            webFile.close();

          }
          break;
        }

        if (c == '\n') {

          currentLineIsBlank = true;
        }
        else if (c != '\r') {

          currentLineIsBlank = false;
        }
      }
    }
    delay(2000);
    client.stop();
  }



}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: data op de juiste plaats in html krijgen

Berichtdoor Koepel » 06 Nov 2016, 00:53

Ja, je bent een "break;" vergeten bij "case 'A':". Nu valt de code door naar 'B'.

Kijk nog eens naar WebserverST : http://playground.arduino.cc/Code/WebServerST

Zou je deze drie weg willen halen ?
Code: Alles selecteren
          client.println("Refresh: 5");
          client.println("<!DOCTYPE HTML>");
          client.println("<tijd>");

Wel de afsluitende client.println(); laten zitten.

Je hebt een delay van 2 seconden onderaan de sketch. Volgens mij is die niet nodig. Ik heb trouwens zelf een delay van 1 milliseconde voordat ik client.stop() doe.
Je hebt ook een delay 2 seconden in de loop. Die vertraagt alles. Als je een delay nodig hebt voor een sensor, dan is millis() veel beter. Je hebt nu een webserver, dus de code moet een webpagina kunnen leveren, en dus kun je geen delay() gebruiken.

Dit is een bekend probleem op Arduino forums. Als een sketch vol met delays zit, dan wordt soms gevraagd wat een sneller Arduino board is. Maar op een sneller Arduino board duren die delays precies net zo lang, dus maakt het niets uit.

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: data op de juiste plaats in html krijgen

Berichtdoor tijne » 06 Nov 2016, 01:02

dank je wel het is gelukt.

de delay's had ik er idd al uit gehaald.

ik heb die 3 er ook uit gehaald.

morgen weer verder stoeien om de tekening op de achter grond terug te krijgen maar tot zo ver hellemaal top.

DANK JE WEL.

gr martijn

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: data op de juiste plaats in html krijgen

Berichtdoor tijne » 20 Nov 2016, 18:01

ik zou toch nog even graag je hulp in willen roepen.

met de arduino als webserver is geen succes omdat deze om de 5 min. 10 uit de lucht is, en heel erg traag is.
nu heb ik lokaal een webserver aangezet en heb ik daar de site op draaien.

ik heb de sketch aangepast (volgens mij goed) want hij maakt connectie met de site maar vult de waardes niet in. (connectie kan ik zien in de serial monitor)

zou jij is willen kijken wat ik verkeert doe?

Code: Alles selecteren
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>

int sensorPin = 0;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress server(192, 168, 178, 15);



IPAddress ip(192, 168, 178, 69);

EthernetClient client;

void setup() {

  Serial.begin(9600);
  while (!Serial) {
    ;
  }


  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");

    Ethernet.begin(mac, ip);
  }

  delay(1000);
  Serial.println("connecting...");



}

void loop() {
  if (client.connect(server, 80)) {
    Serial.println("connected");

    client.println("GET /index.htm HTTP/1.1");
    client.println("Host: www.tijne.nl");
    client.println("Connection: close");
    client.println();
  } else {

    Serial.println("connection failed");
  }


  int reading = analogRead(sensorPin);


  float voltage = reading * 5.0;
  voltage /= 1024.0;




  float temperatureC = (voltage - 0.5) * 100 ;
  Serial.print(temperatureC);



  if (client) {
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {

          if (client) {
            while (client.available()) {
              byte data = client.read();   // read next byte
              if ( data == '$')
              {
                byte token = client.read();  // read token after the '$'
                switch ( token)
                {
                  /* case 'A':
                     client.print(now.hour(), DEC);
                     client.print(':');
                     client.print(now.minute(), DEC);
                     client.print(':');
                     client.print(now.second(), DEC);

                    break;*/
                  case 'B':
                    client.print(temperatureC);

                    break;
                  case 'C':
                    client.print(temperatureC);

                    break;
                  case 'D':
                    client.print(temperatureC);

                    break;
                  case 'E':
                    client.print(temperatureC);

                    break;
                  case 'F':
                    client.print(temperatureC);

                    break;
                  case 'G':
                    client.print(temperatureC);

                    break;
                  case 'H':
                    client.print(temperatureC);

                    break;
                  case 'I':
                    client.print(temperatureC);

                    break;
                  case 'J':
                    client.print(temperatureC);

                    break;
                  case 'K':
                    client.print(temperatureC);



                  /*  break;
                      case 'L':
                      client.print(now.day(), DEC);
                      client.print('-');
                      client.print(now.month(), DEC);
                      client.print('-');
                      client.print(now.year(), DEC);

                      break;*/
                  default:

                    client.write( data);
                    client.write( token);
                    break;
                }
              }
              else {
                client.write( data);          // send byte client
              }
            }



          }
          break;
        }

        if (c == '\n') {

          currentLineIsBlank = true;
        }
        else if (c != '\r') {

          currentLineIsBlank = false;
        }
      }
    }


    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting.");
      client.stop();

      //client.stop();

      //while (true);
    }
  }
}


gr martijn

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: data op de juiste plaats in html krijgen

Berichtdoor Koepel » 20 Nov 2016, 19:22

De webpagina staat op een SD kaartje ? En de sketch is de server voor de webpagina.
Dus als iemand de webpagina opvraagt, dan lees je de data van de SD kaart, en ieder byte dat door je handen heen gaat, controleer je op '$' zodat je de '$A', '$B', enzo kunt vervangen door variabelen met temperatuur en zo.

Op de ene of andere manier is je webpagina met HTML code verdwenen. Je leest het niet van SD, en hij zit niet in de sketch.

Misschien kun je 'client' een andere naam geven.
Er is een seriële monitor, die heet 'Serial'. Geen probleem daar.
Er kan iemand (een client) bij de server een webpagina opvragen, die zou je webClient kunnen noemen.
Er kan een bestand geopend zijn, die noemde je eerder webFile, dat is prima, maar uiteindelijk is het gewoon een file.

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: data op de juiste plaats in html krijgen

Berichtdoor tijne » 20 Nov 2016, 21:31

Koepel schreef:De webpagina staat op een SD kaartje ? En de sketch is de server voor de webpagina.
Dus als iemand de webpagina opvraagt, dan lees je de data van de SD kaart, en ieder byte dat door je handen heen gaat, controleer je op '$' zodat je de '$A', '$B', enzo kunt vervangen door variabelen met temperatuur en zo.

Op de ene of andere manier is je webpagina met HTML code verdwenen. Je leest het niet van SD, en hij zit niet in de sketch.

Misschien kun je 'client' een andere naam geven.
Er is een seriële monitor, die heet 'Serial'. Geen probleem daar.
Er kan iemand (een client) bij de server een webpagina opvragen, die zou je webClient kunnen noemen.
Er kan een bestand geopend zijn, die noemde je eerder webFile, dat is prima, maar uiteindelijk is het gewoon een file.


ik haal niks meer van de sd af. de htm pagina staat nu op een webserver te draaien.

dus hij moet nu inplaats van de htm van de sd kaart de htm van de webserver pakken.
ik weet overigens niet of dat dit uberhoud kan.

gr martijn

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: data op de juiste plaats in html krijgen

Berichtdoor Koepel » 21 Nov 2016, 00:14

In theorie zou het wel kunnen, maar ik heb er niet van gehoord dat iemand het zo gedaan heeft.
Waarom was het langzaam ? Kun je dat misschien oplossen ?
Heb ik de WebserverST al eerder genoemd ? http://playground.arduino.cc/Code/WebServerST

Je eigen webserver op het Ethernet Shield is ten onder gegaan.
Ik zie dit bijvoorbeeld niet meer:
Code: Alles selecteren
EthernetServer server(80);

Dus een browser kan geen webpagina meer opvragen van jouw Ethernet Shield.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: data op de juiste plaats in html krijgen

Berichtdoor Koepel » 21 Nov 2016, 02:07

Het kwartje begint te vallen, ik denk dat ik het begrijp.
Je Ethernet Shield is geen webserver meer, maar je wilt een normale webserver wijzigen. Dat gaat helaas niet.
Dan krijg je al snel met CMS, PHP en mySQL te maken. Dus een website die draait op mySQL data, en de Arduino die data kan sturen naar de server, die het opslaat in de mySQL database. Er is ook veel te vinden over AJAX en Arduino, ik misschien heeft HTML5 ook dingen die iets vergelijkbaars kunnen.

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: data op de juiste plaats in html krijgen

Berichtdoor tijne » 21 Nov 2016, 07:27

ok dat gaat dus niet werken.

dan gaan we zoeken waarom me arduino webserver steeds vast loopt.

dank je wel

gr martijn

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten