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

Smarter - LiveData
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
  MP3 VS1053 shield Geeros#18 11 439 15.04.2018 13:37
Letzter Beitrag: hotsystems
  Arduino Mega mit Shield und 7" Touch Tudorf 10 628 25.02.2018 14:30
Letzter Beitrag: Tommy56
  [gelöst] Micro SD-Card Shield an ISP? torsten_156 1 253 08.02.2018 22:24
Letzter Beitrag: Tommy56
  Led über ethernet schalten dahans 2 360 06.02.2018 20:01
Letzter Beitrag: hotsystems
  Motor Shield V3 Analog Digital Converter Nextero 5 549 19.12.2017 10:54
Letzter Beitrag: Nextero
  Aptotec V1.2 Can Bus Shield / Auto Marc2014 23 2.095 01.11.2017 07:30
Letzter Beitrag: Bitklopfer
  Kommunikation über das WiFi-Shield Flap 13 2.003 12.09.2017 22:12
Letzter Beitrag: Flap
Brick Welcher FTP Client um mehrere Dateien auf den Server zu schieben. derAllgaeuer 26 3.265 19.08.2017 21:27
Letzter Beitrag: Bitklopfer
  Programmierung von PCa9685 Shield im Bezug auf Arduinos Crazydiver 5 970 10.04.2017 12:20
Letzter Beitrag: hotsystems
  Can-Bus Shield ok, aber keine Daten Clubsport 54 6.838 02.04.2017 22:28
Letzter Beitrag: Bitklopfer

Gehe zu:


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