data op de juiste plaats in html krijgen
19 berichten
• Pagina 2 van 2 • 1, 2
Re: data op de juiste plaats in html krijgen
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?
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
Re: data op de juiste plaats in html krijgen
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 ?
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.
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.
Re: data op de juiste plaats in html krijgen
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
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
Re: data op de juiste plaats in html krijgen
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?
gr martijn
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
Re: data op de juiste plaats in html krijgen
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.
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.
Re: data op de juiste plaats in html krijgen
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
Re: data op de juiste plaats in html krijgen
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:
Dus een browser kan geen webpagina meer opvragen van jouw Ethernet Shield.
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.
Re: data op de juiste plaats in html krijgen
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.
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.
Re: data op de juiste plaats in html krijgen
ok dat gaat dus niet werken.
dan gaan we zoeken waarom me arduino webserver steeds vast loopt.
dank je wel
gr martijn
dan gaan we zoeken waarom me arduino webserver steeds vast loopt.
dank je wel
gr martijn
19 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten