SparkFun Forums 

Where electronics enthusiasts find answers.

All things pertaining to wireless and RF links
By siteswapjuggler
#171038
Hi,

I'm using WiFly to send data over Wifi to a Max/MSP application. The smaller data frames are 8 bytes long and are sent every 10 ms.

The problem is that sometimes the datas are bufferised and send as group of 2 to 5 frames instead of single frames every 10 ms. There is an exemple below of what I received in Max/MSP :

0ms - a 8 byte frame
10ms - a 8 byte frame
20ms - a 8 byte frame
100ms - a 8x8 byte frame

So I loose my data stream for 90 ms / 9 frames and sometimes more and don't understand why. I've try many flush time and flush size settings as well as hardware flow control but nothing seems to works flawessly. I got better results with a flush time of 1ms and a flush size of 512 bytes but still have lags as describe just above.

Here is the code I use from a Teensy 3.1 connected to the WiFly module.
Code: Select all
//////////////////////////
// librairies utilisées //
//////////////////////////

#include <Metro.h>
#include <EEPROM.h>

#define ENCAPS 7
#define ID 1

#define RTS_PIN 7 // RTS2 vers CTS2
#define CTS_PIN 8 // CTS2 depuis RTS2

byte buffer[264];

//////////////////////////////
// instanciations d'objets  //
//////////////////////////////

Metro FFTMetro = Metro(10);

//////////////////////////////////
// initialisation du programme  //
//////////////////////////////////

void setup()
{
  Serial1.begin(115200);
  pinMode(RTS_PIN,OUTPUT);
  pinMode(CTS_PIN,INPUT);
}

//////////////////////////////////
// initialisation du programme  //
//////////////////////////////////

void loop() {
  
  if (FFTMetro.check()==1) {
    /*digitalWrite(RTS_PIN,LOW);
    while(digitalRead(CTS_PIN)!=LOW){
    }*/
    sendVolume();
    Serial1.println();
    /*digitalWrite(RTS_PIN,HIGH);
    while(digitalRead(CTS_PIN)!=HIGH){
    }*/
  }
}

void sendVolume() {
  word l = 1;
  starter(203);
  buffer[3]=highByte(l);
  buffer[4]=lowByte(l);
  for (word i = 0; i<l; i++) {
    buffer[i+5]=random(0,255);
    }
  ender(l);
  Serial1.write(buffer,l+ENCAPS);
}

void starter(byte CMD) {
  buffer[0] = 231;
  buffer[1] = ID;
  buffer[2] = CMD;
}

void ender(word l) {
  long sum = 0;
  for (word i = 0; i < l+4; i++) {sum += buffer[i+1];}
  buffer[l+5]   = sum%256;
  buffer[l+6] = 126;
}
Is there a way to force data sending or to configure the module to send data as soon as possible ?

Sincerely
SYLVAIN