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
Client.read() Zwischenspeicher erstellen!?
04.12.2013, 15:29
Beitrag #1
Client.read() Zwischenspeicher erstellen!?
Hallo,

ich möchte die eingelesenen Wertefolge zwischenspeichern und das gesamte Ergebnis in eine IF-Anweisung setzen, bisher jedoch ohne Erfolg!

Ich wäre für jede Hilfe dankbar!

Code:
{

          int response = client.read();  
          response = response - 48;
          Serial.print(response);
          
          if (response == 11)   //leider kann ich hier nur Werte von 0-9 vergleichen
          {
            digitalWrite(LED, HIGH);
          }
          else if (response == 0)
          {
            digitalWrite(LEDl, LOW);
          }
        }

Wie kann ich die "response"-Werte als "eine" Zahl speichern, um diese anschließend bspw. in einer IF-Anweisung zu verwenden?

Gruß
Gura
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.12.2013, 21:37
Beitrag #2
RE: Client.read() Zwischenspeicher erstellen!?
Hat jemand viell eine Idee?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2013, 11:00
Beitrag #3
RE: Client.read() Zwischenspeicher erstellen!?
nicht wirklich. Du liest also eine Zahl von einer Funktion ein und willst sie auf einen bestimmten Wert hin prüfen.

Wieso kannst du nur Werte von 0...9 vergleichen?
was meinst du mit "eine Zahl"?
welche Variablentypen verwendest du?

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2013, 13:51
Beitrag #4
RE: Client.read() Zwischenspeicher erstellen!?
Sorry, für meine leihenhafte Frage;-)

Also ich möchte eine LED zu einer bestimmten Zeit auf "high" setzen und das der MC diese Zeit aus einer Textdatei liest!
Ich nutze hierzu den DS1307 zum auslesen der Zeit!

Hier ist der ganze Code:

Code:
#include <SPI.h>  
#include <Ethernet.h>
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68

const unsigned long UpdateDelay = 100UL * 6 * 1;
const byte ConnectionAttempts = 8;  
const byte LED = 8;      

byte Mac[] = {0x90, 0xA2, 0xDA, 0xED, 0x08, 0x6A};
IPAddress Ip(192, 168, 178, 211);  
byte server[] = {192, 168, 178, 210};
const char Url[] = "/test.txt";   //Die Textdatei beinhaltet z.B. den Wert 11

EthernetClient client;

byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));  
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));    
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}
  
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f);  
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

void setup()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  
  Wire.begin();
  Serial.begin(9600);  
  delay(2000);
  Ethernet.begin(Mac, Ip);
  delay(200);

  second = 0;
  minute = 20;
  hour   = 11;
  dayOfWeek  = 5;
  dayOfMonth = 29;
  month      = 11;
  year       = 13;
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
  
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);  
  
}

void loop()  
{
    LoopLED();
}

void LoopLED()  
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  Serial.println();
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());

   byte Attempts;
   for (Attempts = 1; Attempts <= ConnectionAttempts; Attempts++)
   {
     if (client.connect(server, 80))
     {
       if (client.connected())
       {
         break;  
       }
       else
       {
         Serial.println("MC bug with connection!");
       }
     }
     client.stop();
     delay(100);
     }
     if (client.connected())
     {
      Serial.println("Sending request...");
      client.println("GET " + String(Url));
      client.println("Connection: close");
      client.println();
      Serial.println("Waiting response...");

      byte maxReads = 10;
      while ((maxReads-- > 0) && client.connected())
      {
        delay(100);
        while (client.available())
        {

          int response = client.read();   //Die Textdatei soll immer wieder abgefragt werden!
          response = response - 48;   // Hier wird der Integer in eine natürliche Zahl umgerechnet
          Serial.print(response);
          
          if (response == hour)   //Werte von 0-9 kann ich hier ohne Probleme vergleichen, größere Zahlen nicht; "hour" beinhaltet hier den Startwert "11"!
          {
            digitalWrite(LED, HIGH);
          }
          else if (response == 0)
          {
            digitalWrite(LED, LOW);
          }
        }
      }
      delay(10);
      client.flush();
      delay(10);
   }
   else
   {
     Serial.println("Connection failed!");
     Serial.println();
   }
   Serial.println();
   Serial.print("Done!");
   Serial.println();
   delay(UpdateDelay);
}

Ich hoffe die Informationen reichen jetzt aus!?

Danke für die schnell Antwort!!

Gruß
Gura
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2013, 11:03
Beitrag #5
RE: Client.read() Zwischenspeicher erstellen!?
dann lassen wir es einmal so stehen. Vielleicht findet sich ja jemand, der Zeit und Lust hat, deinen Sketch zu analysieren.

Gruß, Stefan . . . . . . //Wo mein Kölbchen dampft, da bin ich unverkrampft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2013, 13:17
Beitrag #6
RE: Client.read() Zwischenspeicher erstellen!?
Hmm, ich denke der Code wirkt ein bissl unübersichtlich! Eigentlich interessiert mich nur der "client.read" Teil!
Wenn der Client eine 11 liest, erkennt dieser in der IF-Anweisung nur eine 1! Also ich kann hier nur mit Zahlen zwischen 0-9 arbeiten :-(

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


const int ledPin = 8;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress server(192, 168, 178, 210);  
IPAddress ip(192,168,178,211);

EthernetClient client;

void setup() {

  Serial.begin(9600);
  delay(1000);
  Ethernet.begin(mac, ip);

  Serial.println("connecting...");

  pinMode(ledPin, OUTPUT);
  delay(1000);
}

void loop()
{
  
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /test_webside/test.txt");
    client.println("Host: 192.168.178.210");
    client.println("Connection: close");
    client.println();
  }

  if (client.available()) {
    int c = client.read();
    c = c - 48;
    Serial.print(c);
    
    //Das Problem ist diese Zeile! Ich kann hier einfach nur Werte von 0-9 einlesen.
    //Wenn der Client eine 11 liest erkennt dieser in der IF-Anweisung nur eine die 1
    if (c == 1){                                         
      digitalWrite(ledPin, HIGH);
    }
    else if (c == 0) {
      digitalWrite(ledPin, LOW);
    }
    
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    while(true);
  }
}

Kann man hier viell. einen Buffer verwenden der erst die empfangenen Informationen liest und diese anschließen als "einen Wert" verarbeitet/speichert? Oder muss ich hier viell. komplett einen anderen Weg einschlagen?

Gruß
Gura
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2013, 16:55
Beitrag #7
RE: Client.read() Zwischenspeicher erstellen!?
In welcher Form sollte der Wert 11 ankommen ? Wenn er als Text '11' kommt, ist es klar, dass du nur 1 bekommst. client.read() liest immer nur 1 Byte.

Der Hobbyelektroniker wagt sich an die Arduinoprogrammierung auf Video und auf seiner Webseite
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.12.2013, 17:39 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2013 17:41 von Gura.)
Beitrag #8
RE: Client.read() Zwischenspeicher erstellen!?
Hallo,

das Problem habe ich jetzt mit einem Buffer gelöst!

char buffer[2];
buffer[0] = client.read();
buffer[1] = client.read();
buffer[2] = '\0';
int response;
response = atoi(buffer);

Hier der Komplette-Code:

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


const int ledPin = 8;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress server(192, 168, 178, 210);  
IPAddress ip(192,168,178,211);

EthernetClient client;

void setup() {

  Serial.begin(9600);
  delay(1000);
  Ethernet.begin(mac, ip);

  Serial.println("connecting...");

  pinMode(ledPin, OUTPUT);
  delay(1000);
}

void loop()
{
  
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /test_webside/test.txt");
    client.println("Host: 192.168.178.210");
    client.println("Connection: close");
    client.println();
  }

  if (client.available()) {
    char buffer[2];
    buffer[0] = client.read();
    buffer[1] = client.read();
    buffer[2] = '\0';
    
    int response;
    response = atoi(buffer);
  
if (response == 11){                                        
      digitalWrite(ledPin, HIGH);
    }
    else if (c == 0) {
      digitalWrite(ledPin, LOW);
    }
    
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    while(true);
  }
}

Danke nochmal für eure schnellen Antworten!

Gruß
Gura
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Question Webserver, Client, Loop Marc2014 6 363 29.07.2016 21:04
Letzter Beitrag: Marc2014
  Strings erstellen und vergleichen BennIY 4 387 22.06.2016 10:37
Letzter Beitrag: SkobyMobil
  html, client , NODEMCULUA, Wifi, match request , Frage Marc2014 2 361 15.02.2016 18:41
Letzter Beitrag: Marc2014
  Anfängerfrage zu Serial.read Erazor 1 552 16.01.2016 23:01
Letzter Beitrag: Pit
  Code Server oder Client seitig?? SchwesterStefan 3 566 09.11.2015 22:47
Letzter Beitrag: hotsystems
  Problem mit der Ethernet Library (client.connect) ardu_arne 3 649 06.10.2015 17:06
Letzter Beitrag: ardu_arne
  Status einer if / else Verknüpfung per client.print ausgeben daruel 8 1.130 20.08.2015 10:11
Letzter Beitrag: daruel
  [EEPROM.h] Unterschied read()/write() und EEPROM[]? gregors 5 884 19.08.2015 19:59
Letzter Beitrag: gregors
  Web Server, Client, abbruch? Marc2014 3 742 18.07.2015 18:12
Letzter Beitrag: Marc2014
  Webserver Daten empfangen und Diagramm erstellen KK66 2 1.085 16.07.2015 07:34
Letzter Beitrag: KK66

Gehe zu:


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