INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ethernet Shield Client
29.04.2014, 16:54 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2014 16:55 von AlexRegensburg.)
Beitrag #9
RE: Ethernet Shield Client
(29.04.2014 15:40)rkuehle schrieb:  Die while-Schleife als Ersatz für delay(), da ansonsten der Arduino beinahe schläft und zwischenzeitlich die Verbindung unter Umständen nicht aufgebaut werden könnte.

Sorry, dass ich mich hier so ungefragt reinklinke:
Dem kann ich nicht zustimmen. Die interne delay()-Implementierung ist von der Idee her genauso aufgebaut, wie deine while-Schleife.
Das Konstrukt mit millis() muss so eingesetzt werden, dass die Zeit über der Hauptschleife (loop-Methode) abfällt, aber nicht in einer Warte-Schleife.

Hinweis: Nur schematischer Pseudocode
Code:
loop()
{
   // Status bestimmen etc. ...
   // ...

   if (shouldConnect)
   {
     client.connect(...);
     jetzt = millis();
     waitConnect = true;
   }

   if (waitConnect && millis() - jetzt > connwait)
   {
      waitConnect = false;
      if (client.connected())
      {
         // daten senden
      }
   }

   // Hier kommt jetzt der eigentliche Vorteil der Methode:
   // In jedem Hauptschleifen-Durchlauf können hier noch andere Sachen gemacht werden
   // obwohl er eigentlich in der Wartezeit für den ethernet client hängt.
   if (shouldDoAnotherThing)
   {
   }
}

Gruß, Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2014, 21:10
Beitrag #10
RE: Ethernet Shield Client
Hallo Alex,

Zitat:Sorry, dass ich mich hier so ungefragt reinklinke:
Hab kein Problem damit. Bin ja auch noch am lernen.

Soweit mir bekannt (kann ja auch Kraut sein) wird während dem delay() die Abarbeitung des Codes unterbrochen, da bis auf die Timerinterrupts alles "schläft".
Durch die vorgeschlagene Schleife passiert dies jedoch nicht. So könnten "parallel" noch andere Dinge abgearbeitet werden. Die müssten dann aber im {} stehen.

Das Anliegen von kiroho wird damit jedoch nicht beachtet. Der Satz
Zitat:Die while-Schleife als Ersatz für delay(), da ansonsten der Arduino beinahe schläft und zwischenzeitlich die Verbindung unter Umständen nicht aufgebaut werden könnte.
ist in diesem Sinne für die Tonne, stimmt.
Danke für den Hinweis.

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2014, 21:23
Beitrag #11
RE: Ethernet Shield Client
(29.04.2014 21:10)rkuehle schrieb:  So könnten "parallel" noch andere Dinge abgearbeitet werden. Die müssten dann aber im {} stehen.

Stimmt. Diese Variante gibt's auch noch - gar nicht dran gedacht Smile

Gruß, Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.04.2014, 13:02 (Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2014 13:56 von kiroho.)
Beitrag #12
RE: Ethernet Shield Client
Mir ist auch aufgefallen, dass immer wenn ich den Arduino neu starte (mit den knöpfchen) wird die Lan-Verbindung kurz unterbrochen und dannach wiederhergestellt. Bisher hatte ich das für normal gehalten, weil es immer so war.
Ist da vielleicht etwas falsch?

Edit :
Ok an dem was oben steht, liegts nicht.

Das mit dem Wiederholen lag wohl am while(1); in dem else.
Das hatte ich da rein gemacht, weil der Serial Monitor sonnst vollgespammt wurde.
Ohne das While und mit den gesetzten Verzögerungen wiederholt sich der Ablauf jetzt und behält auch die Verbindung.
Bzw. verbindet er sich nach dem Senden neu.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 00:42
Beitrag #13
RE: Ethernet Shield Client
Das ist jetzt die überarbeitete Version. Es funktioniert soweit alles, die Daten werden gesendet, das Neuverbinden funktioniert und die Schleife wiederholt sich.
Aufjeden Fall nochmal danke für die hilfe.

Code:
#include <Ethernet.h>
    #include <SPI.h>

    byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0xF6, 0xFF };
    byte ip[] = {  192, 168, 20, 25};

    EthernetClient client;
     int zahl;
    String hallo= "testtext=";
    String test;
    float wert;
    float u;
    unsigned int connwait = 1000;
    unsigned long jetzt = 0;
    unsigned long interval = 5000;
    
    void setup()
    {
    Ethernet.begin(mac, ip);
    Serial.begin(9600);
    Serial.println(Ethernet.localIP());
    

    
    
    }

    void loop()                                          
    {      
      wert = analogRead(A0);
      u = (wert/1023.)*5.;
      zahl = 113.45 - 37.38*u;
      Serial.println(zahl);
      test=hallo+zahl;
      
     // Serial.println("connecting...");

//    if (client.connect("192.168.20.20",80))
    client.connect("192.168.20.20",80);
    jetzt = millis();
    while  (millis() - jetzt < connwait) {};
    if (client.connected())
    {                                
    Serial.println("Sending to Server: ");                
    client.println("POST /abfrage.php HTTP/1.1");          
    Serial.print("POST /abfrage.php HTTP/1.1");          
   client.println("Host: host halt");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.println("User-Agent: Arduino/1.0");
    client.print("Content-Length: ");
    client.println(test.length());
    client.println();
    client.print(test);
    client.println();      
    client.flush();
    jetzt = millis();
    while  (millis() - jetzt < connwait) {};
    }

    else
    {
    Serial.println("Cannot connect to Server");  
    jetzt = millis();
    while  (millis() - jetzt < connwait) {};
      
    }
      
    if (client.available()) {
    char c = client.read();
    Serial.print(c);
    }

    if (!client.connected())
    {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    jetzt = millis();
    while  (millis() - jetzt < interval) {};
    }                              
    
    }

Da ja alles funktioniert ist es eher optional, aber gibt es da noch einige Sachen die überflüssig sind oder einfacher/besser gestaltet werden könnten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 09:34
Beitrag #14
RE: Ethernet Shield Client
Hallo kiroho,

ich habe mal die Variablen etwas umpositioniert und umdeklariert. So sparst du ca. 230 Bytes an Code und 130 Bytes an Variablen. Kann bei größeren Projekten (und kleinem Arduino) wichtig werden. Weiterhin habe ich mal zwei Fragen in den Code reinkommentiert, die du dir mal anschauen solltest.

Grüße Ricardo

Code:
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0xF6, 0xFF };
byte ip[] = {  192, 168, 20, 25};
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  Serial.println(Ethernet.localIP());
}
void loop()
{
  const String hallo = "testtext=";
  const unsigned long connwait = 1000;
  const unsigned long interval = 5000;
  unsigned long jetzt = 0;
  String test;
  float  wert;
  wert = analogRead(A0);
  int zahl = (int) 113.45 - 37.38 * ((wert / 1023.00) * 5.00);
  Serial.println(zahl);
  test = hallo + zahl;
  client.connect("192.168.20.20", 80);
  jetzt = millis();
  while  (millis() - jetzt < connwait) {};
  // A - wird das nicht immer ausgeführt wenn auch B ausgeführt wird?
  if (client.connected())
  {
    Serial.println("Sending to Server: ");
    client.println("POST /abfrage.php HTTP/1.1");
    Serial.print("POST /abfrage.php HTTP/1.1");
    client.println("Host: host halt");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.println("User-Agent: Arduino/1.0");
    client.print("Content-Length: ");
    client.println(test.length());
    client.println();
    client.print(test);
    client.println();
    client.flush();
    jetzt = millis();
    while  (millis() - jetzt < connwait) {};
  }
  else
  {
    Serial.println("Cannot connect to Server");
    jetzt = millis();
    while  (millis() - jetzt < connwait) {};
  }
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  // B - wird das nicht immer ausgeführt wenn auch A ausgeführt wird?
  if (!client.connected())
  {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    jetzt = millis();
    while  (millis() - jetzt < interval) {};
  }
}

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.05.2014, 21:28
Beitrag #15
RE: Ethernet Shield Client
könntei ch die libraries bekommen für dieses modell ich kann leider nichtmal mit einer frisch installierten arduinosoftware und nem beispielcode compilieren weil da angeblich was nich stimmt, bitte ich bekomme nirgends ne funktionierende spi.h ethernet.h etc Sad

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.05.2014, 07:02
Beitrag #16
RE: Ethernet Shield Client
Moin Hilgi,

lege bitte im Verzeichnis "libraries" deiner Arduino-Software die Unterverzeichnisse "Ethernet" und "SPI" an. In diese Unterverzeichnisse muss dann jeweils der Inhalt der zugehörigen .zip-Datei.
Eventuell bereits vorhandene Dateien dieser beiden Libs, die sich im "Sketchbook"-Verzeichnis oder im "libraries"-Verzeichnis befinden solltest du vorher löschen.
Sollten beim Compilieren immer noch Fehlermeldungen hochkomme, poste diese bitte hier.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  CP2102 und USB Host Shield ?? DL1AKP 0 49 01.12.2016 08:55
Letzter Beitrag: DL1AKP
  Arduino UNO und Ethernet Shield 2 POE und Fritzbox 3272 tr3 2 157 19.11.2016 10:46
Letzter Beitrag: tr3
  Kommunikation über das WiFi-Shield Flap 3 234 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 16 509 27.09.2016 20:30
Letzter Beitrag: BennIY
  Arduino Lan Shield - Visual Basic ZackiE 6 217 20.09.2016 19:26
Letzter Beitrag: ZackiE
  adafruit V2.3 Shield Hangloose 6 296 08.09.2016 17:13
Letzter Beitrag: rpt007
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.539 01.09.2016 14:17
Letzter Beitrag: Clubsport
  Arduino mega 2560 mit TFT LCD Touch Shield V1 Clemens55555 17 938 02.08.2016 20:51
Letzter Beitrag: Clemens55555
Question Webserver, Client, Loop Marc2014 6 369 29.07.2016 21:04
Letzter Beitrag: Marc2014
  SainSmart 3.2 TFT + 5" TFT/SD Shield + Due SAM3X8E ARM (Arduino Due) Techniker_UE 13 3.232 24.07.2016 14:34
Letzter Beitrag: Eichner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste