Ahoj, tak sa mi podarilo na internete zohnať prototyp. Skúšal som to od zbyšeka ale nešlo mi to dobre.
V tom kóde sú 2 premenné: readString a readString1.
Keď si vypisujem readString do nového riadku tak je tam o jednu medzeru (riadok) viac ako má byť...

Podľa kódu tá poloha premennej nesedí, lebo by tam nemal byť prázdny riadok, kde by bol teda problém?

Druhá premenná orezáva pôvodnú readString a číta z nej počet znakov, ak tomu správne chápem.
Dal som tam 4, keď dám 3, tak sa mi vypíše VY a nie VYP. Kód sa pripája k môjmu projektu, kde sa spína relé. Momentálne to riadi NodeMCU, ktoré vie bez problému ten string spracovať

Ale radšej by som bol za Ethernet.
V prototypovom kóde som teda upravil to orezanie stringu z 8 na 4 znaky, i keď nechápem prečo má string VYP 4 znaky keď má 3. Asi ma na konci LF znak alebo sa mýlim?
Ďalej som upravil counter riadkov v podmienke, original bol 10, ja som použil 12, lebo dostávam tak dlhú hlavičku.
Mohol by to niekto ešte vytuniť, resp zjednodušiť na jednu premennú, aby sa z tej druhej ten string nemusel orezávať?
Kód je následovný:
Kód: Vybrat vše
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
char serverName[] = "www.arduino.php5.sk"; // zoomkat's test web page server
IPAddress ip(192, 168, 2, 40);
EthernetClient client;
String readString, readString1;
int x=0; //for counting line feeds
char lf=10; //line feed character
//////////////////////
void setup(){
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
while(true);
}
Serial.begin(9600);
Serial.println("Better client test 5/13/13"); // so I can keep track of what is loaded
Serial.println("Send an e in serial monitor to test"); // what to do to test
}
void loop(){
// check for serial input
if (Serial.available() > 0) //if something in serial buffer
{
byte inChar; // sets inChar as a byte
inChar = Serial.read(); //gets byte from buffer
if(inChar == 'e') // checks to see byte is an e
{
sendGET(); // call sendGET function below when byte is an e
}
}
}
//////////////////////////
void sendGET() //client function to send/receive GET request data.
{
if (client.connect(serverName, 80)) { //starts client connection, checks for connection
Serial.println("connected");
client.println("GET /rosko/system/values/voda.txt HTTP/1.1"); //download text
client.println("Host: www.arduino.php5.sk");
client.println("Connection: close"); //close 1.1 persistent connection
client.println(); //end of get request
}
else {
Serial.println("connection failed"); //error message if no client connect
Serial.println();
}
while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
Serial.print(c); //prints raw feed for testing
if (c==lf) x=(x+1); //counting line feeds
if (x==12) readString += c; //building readString
}
readString1 = (readString.substring(0,4)); //extracting "woohoo!"
Serial.println();
Serial.println();
Serial.print("Current data row:" );
Serial.println(readString); //the 10th line captured
Serial.println("Premenna je: ");
Serial.println(readString);
Serial.print("How we feeling?: ");
readString1 = (readString.substring(0,4)); //extracting "woohoo!"
Serial.println(readString1);
Serial.println("done");
Serial.println("disconnecting.");
Serial.println("==================");
Serial.println();
readString = ("");
readString1 = ("");
client.stop(); //stop client
}
Kód sa spúšťa cez zadanie e do serial monitoru