RedFly - Wie kann man mehrere "variablen" empfangen?

David 2011-12-13 15:34:07 Link
Hi
ich benutze ein Redfly um über WLAN Daten an den Arduino zu senden.
Mein erster test klappt schon ganz gut, ich kann zb per Telnet Strings ans
RedFly schicken, und diese dann per serial Monitor ausgeben, klappt
wunderbar. 
Ich sende also über die Verbindung eine Nachricht die dann immer in eine
variable, zb var1 geschrieben wird und ausgegeben werden kann.

Jetzt möchte ich aber mehrere "werte" senden.
Also soll der Arduino mehrere variablen haben, zb var1, var2, var3 und
diese sollen dann jeweils mit werten gefüllt werden, die vom RedFly
empfangen werden.
Kann mir hier jemand helfen, wie soetwas am besten umgesetzt wird?

Hier noch mein Quelltext, wie er momentan funktioniert, jedoch mit nur
einer Variable:
[code]
#include <RedFly.h>

byte ip[]      = { 192,168,  0, 30 }; //ip from shield (server)
byte netmask[] = { 255,255,255,  0 }; //netmask
#define TCP_PORT  (1234) //local TCP port on the shield
#define UDP_PORT  (1234) //local UDP port on the shield

uint8_t hTCP=0xFF, hUDP=0xFF;  //socket handles

//serial format: 9600 Baud, 8N2
void debugout(char *s)  { RedFly.disable(); Serial.print(s);  
RedFly.enable(); }
void debugoutln(char *s){ RedFly.disable(); Serial.println(s);
RedFly.enable(); }

void setup()
{
  uint8_t ret;

  //init the WiFi module on the shield
  ret = RedFly.init();
  if(ret)
  {
    debugoutln("INIT ERR"); //there are problems with the communication
between the Arduino and the RedFly
  }
  else
  {
    //scan for wireless networks (must be run before join command)
    RedFly.scan();

    //join network
    ret = RedFly.join("XXX", "XXX", INFRASTRUCTURE);
    if(ret)
    {
      debugoutln("JOIN ERR");
      for(;;); //do nothing forevermore
    }
    else
    {
      //set ip config
      ret = RedFly.begin(ip, 0, 0, netmask);
      if(ret)
      {
        debugoutln("BEGIN ERR");
        RedFly.disconnect();
        for(;;); //do nothing forevermore
      }
    }
  }
}


void loop()
{
  int var;
  char buf[512], *ptr;
  uint8_t sock;
  uint16_t buf_len, rd, len;
  uint16_t port; //incomming UDP port
  uint8_t ip[4]; //incomming UDP ip

  //check if sockets are opened
  if(RedFly.socketClosed(hTCP) || (hTCP == 0xFF))
  {
    hTCP = RedFly.socketListen(PROTO_TCP, TCP_PORT);
  }

  //get data
  sock    = 0xFF; //0xFF = return data from all open sockets
  ptr     = buf;
  buf_len = 0;
  do
  {
    rd = RedFly.socketRead(&sock, &len, ip, &port, (uint8_t*)ptr,
sizeof(buf)-buf_len);
    if((rd != 0) && (rd != 0xFFFF)) //0xFFFF = connection closed
    {
      ptr     += rd;
      buf_len += rd;
    }
  }while(len != 0);

  //send data
  if(buf_len && (sock != 0xFF))
  {
    if(sock == hTCP)
    {
      var = atoi(buf); 
      Serial.println(var); 
    }
  }
}
[/code]


VG
vega

Martin Fröhner 2011-12-14 20:51:45 Link
Hallo David,

genau das versuche ich auch gerade hinzubekommen. Vielen Dank für deinen
Quellcode, ich werde ihn mir ansehen und versuchen dir zu helfen, weiß aber
noch nicht genau, an welchem Tag ich dazu komme.

Welche FW Version nutzt du? Und welche Arduino Version, 0023, oder 1.0?

Gruß,

Martin

Martin Fröhner 2011-12-15 10:17:39 Link
Wenn du die Variablen immer in der gleichen Reihenfolge schickst, dann
kannst du diese einfach durch ein bestimmtes Zeichen trennen. Trennzeichen:
#

Beispiel:

Var1#Var2#Var3

Wenn du den String empfangen hast kannst du ihn teilen. Falls dir das nicht
reicht, musst du unter Umständen noch ein Start und Stopp Zeichen nutzen.
Startzeichen: *, Stoppzeichen:#, Trennzeichen:,

*Var1,Var2,Var3#*Var1,.....

So kannst du sicherstellen immer die richtige Position zu bekommen.
Ich hoffe das hilft dir weiter.

Gruß,

Martin

Martin Fröhner 2011-12-16 01:18:15 Link
Hallo,

konnte ich dir helfen? Bist du weiter gekommen?

Ich hätte mal noch eine Frage, wie schickst du die Daten über Telnet? Ich
versuch das ganze gerade mit Win7, ist aber leider noch nicht
erfolgsversprechend.

Gruß,

Martin

Reply

Name
eMail (not visible)
Subject (no text only in upper case; no HELP, URGENT...)
Text
HTML tags are not supported and links are generated automatically if they start with http or ftp.
Please submit long source code or log files as attachment (only registered users).
Please enter the number 7442