arduino webpuls switch te traag

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

arduino webpuls switch te traag

Berichtdoor dannyd » 20 Okt 2014, 23:10

Beste lezer,

ik heb een stukje code voor een arduino uno met een ethernet shield erop.
De doelstelling is het draaien van een website op een sd kaartje(via ethernet shield) met enkele knoppen om een pinnen aan te sturen.
Dit werkt maar er zit een vertraging in. Dacht eerst dat dat misschien zou liggen aan de wat ouderen sd kaart. maar na aanschaf van een nieuwe sd kaart nog steeds hetzelfde probleem. is mijn code zo slecht/traag. kan arduino dit niet sneller of..... wie kan me wat opweg helpen.


mijn code:


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


byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0x94, 0x44 };
IPAddress ip(192,168, 1, 150); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
String readString;
File webFile;

void setup()
{

pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
//start Ethernet
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
// Serial.begin(9600); // for debugging

// initialize SD card
// Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
// Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
// Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
// Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
// Serial.println("SUCCESS - Found index.htm file.");
}

void loop()
{
EthernetClient client = server.available(); // try to get client

if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client

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

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

// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
// client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
// client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println();
// send web page
webFile = SD.open("index.htm"); // open web page file
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
// delay(1); // give the web browser time to receive the data
client.stop(); // close the connection



///////////////////// control arduino pin
if(readString.indexOf("?leftup") >0)//checks for on
{
digitalWrite(5, HIGH); // set pin 5 high

delay(100);
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Left up");
}
else{
if(readString.indexOf("?leftdown") >0)//checks for off
{
digitalWrite(6, HIGH); // set pin 6 high
// delay(100);
digitalWrite(6, LOW); // set pin 6 low
Serial.println("Left down");
}
else{
if(readString.indexOf("?rightup") >0)//checks for on
{
digitalWrite(7, HIGH); // set pin 7
delay(100);
digitalWrite(7, LOW);
Serial.println("Right up");
}
else{
if(readString.indexOf("?rightdown") >0)//checks for off
{
digitalWrite(8, HIGH); // set pin 8 high
delay(100);
digitalWrite(8, LOW);
Serial.println("Right down");
}
}
}
}
//clearing string for next read
readString="";

}
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino webpuls switch te traag

Berichtdoor nicoverduin » 20 Okt 2014, 23:32

zou je de code tussen de tags code2=cpp en /code2 (beide omhullen met vierkante haakjes). Dan blijft de code zijn inspringing houden, leest veeeeeeel prettiger en nodigt anderen uit om te helpen.
zie: viewtopic.php?f=16&t=903
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

Re: arduino webpuls switch te traag

Berichtdoor dannyd » 21 Okt 2014, 19:35

cpp code
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>


byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0x94, 0x44 };
IPAddress ip(192,168, 1, 150); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
String readString;
File webFile;

void setup()
{

pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
//start Ethernet
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
// Serial.begin(9600); // for debugging

// initialize SD card
// Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
// Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
// Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
// Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
// Serial.println("SUCCESS - Found index.htm file.");
}

void loop()
{
EthernetClient client = server.available(); // try to get client

if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client

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

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

// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
// client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
// client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println();
// send web page
webFile = SD.open("index.htm"); // open web page file
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
// delay(1); // give the web browser time to receive the data
client.stop(); // close the connection



///////////////////// control arduino pin
if(readString.indexOf("?leftup") >0)//checks for on
{
digitalWrite(5, HIGH); // set pin 5 high

delay(100);
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Left up");
}
else{
if(readString.indexOf("?leftdown") >0)//checks for off
{
digitalWrite(6, HIGH); // set pin 6 high
// delay(100);
digitalWrite(6, LOW); // set pin 6 low
Serial.println("Left down");
}
else{
if(readString.indexOf("?rightup") >0)//checks for on
{
digitalWrite(7, HIGH); // set pin 7
delay(100);
digitalWrite(7, LOW);
Serial.println("Right up");
}
else{
if(readString.indexOf("?rightdown") >0)//checks for off
{
digitalWrite(8, HIGH); // set pin 8 high
delay(100);
digitalWrite(8, LOW);
Serial.println("Right down");
}
}
}
}
//clearing string for next read
readString="";

}
}

Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

Re: arduino webpuls switch te traag

Berichtdoor dannyd » 21 Okt 2014, 20:00

Ziet er inderdaad beter uit. en beter leesbaar.
Hoop dat er iemand is die me wat op weg kan helpen.

mvg Danny

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino webpuls switch te traag

Berichtdoor nicoverduin » 21 Okt 2014, 20:28

hoe groot zijn die web pagina's?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

Re: arduino webpuls switch te traag

Berichtdoor dannyd » 21 Okt 2014, 21:44

De webpagina is 8kb niet al te groot lijkt mij, op micro sd kaart classe 10

Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

Re: arduino webpuls switch te traag

Berichtdoor dannyd » 22 Okt 2014, 20:07

Niemand?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino webpuls switch te traag

Berichtdoor nicoverduin » 23 Okt 2014, 08:48

dannyd schreef:De webpagina is 8kb niet al te groot lijkt mij, op micro sd kaart classe 10

Daar kon je je nog wel eens in vergissen:
- De arduino leest byte voor byte van jouw kaart. Ik zluit niet uit dat dat ook nog eens byte voor byte over ethernet wordt verstuurd(of een klein buffertje van mogelijk 256 bytes). Dat kan ook niet anders want:
a) je hebt maar 2K ram geheugen en daar moet alles in gebeuren
b) alle communicatie met de SD gebeurt via SPI
c) ethernet communicatie gaat ook via SPI
d) en daar je maar een (1) SPI hebt, en geen DMA moet de processor ook nog eens alles doen
e) de SF interface is niet zo snel. Dus je kaartje kan wel als een speer gaan..... het arduino dorp heeft maar 5Km/uur verkeer in verhouding

Als je een snelle webserver wilt, is de Arduino gewoon de verkeerde keuze. Dan kun je beter terugvallen op de 32bit linux boards (bijv. de Cubietruck). Dat gaat allemaal lekker flitsend :)

@edit: Nog even naar je code gekeken. Je gebruikt String als buffer. Ik zou die heel gauw afbouwen naar gewoon een char buffer[]. En dan gewone string operaties. Als de String groeit, gaat deze elke keer de string opbouwen omdat hij meer geheugen nodig heeft. Als je de gewone C string operaties gebruikt (dus gewoon benaderen als een char array, is het stukken sneller wat betreft de ontvangende kant.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 21 Sep 2014, 11:40

Re: arduino webpuls switch te traag

Berichtdoor dannyd » 23 Okt 2014, 19:35

hallo even naar die cubietruck gekeken maar daar zitten geen uitgangen op. toch?
is meer een mini pc.

Het is namelijk zo dat de arduino(of wellicht iets anders met uitgangen(rasberry/beagleboard misschien?)) ingebouwd word in een auto met een ethernetshield erop en daaraan een accespoint. men maakt via de webbrowser verbinding middels de website, via je mobiele telefoon en daar kun je dan met de knoppen op de website de uitgangen sturen van de arduino. Dit werkt nu ook. maar met een vertraging.
Andere opties, suggesties zijn zeker welkom.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino webpuls switch te traag

Berichtdoor nicoverduin » 23 Okt 2014, 20:31

Ik heb ooit iets vergelijkbaars gedaan maar toen heb ik een eenvoudige app gemaakt met Titanium Appcelerator voor Android en IOS om verschillende RGB leds en switches te besturen. De app maakte verbinding met de server (ethernet shield) via een AP. Alleen stuurde ik de nodige data door (30-40 bytes). De rest is allemaal overbodige ballast. De Ethernet shield verstuurd vervolgens naar verschillende devices via de 2.4 Ghz kanaal 75 of zo (mbv nRF24L01). In feite is die Ethernet server alleen maar een doorgeef luik.

De cubie truck heeft ook een aantal GPIO poorten. Maar daar ging het niet om. Er zijn meerdere varianten van 32 bits machines die hier gewoon meer geschikt voor zijn. Een ander alternatief met wifi zou bijvoorbeelde Sparc Core kunnen zijn. Klein printje met Wifi erop en aardig wat poorten. alleen zal je zelf nog genoeg moeten doen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten