1 Master, 20 Slaves

Hi!

I have to build a wireless firework system. I have already tested xbee pro s1, but there is no ACK when broadcasting, and a lot of packets are lost.
1 master has to send to 20 slaves at the same time with low latency and maybe at 300m of distance.

Do you have maybe a good solution ?

Many thanks for your help!

I have already tested xbee pro s1, but there is no ACK when broadcasting, and a lot of packets are lost.

That is the nature of broadcasting.

1 master has to send to 20 slaves at the same time

What is the master sending to 20 slaves? Are all 20 slaves supposed to do the same thing?

Can the master send directly to each slave, in a loop? Just how concurrent does the communication have to be?

I will send only letters A B C ... and numbers 1 to 32
Yes all the slaves must receive it at the same time.
And maybe 500ms between each sending

I will send only letters A B C ... and numbers 1 to 32

Why?

Yes all the slaves must receive it at the same time.

Why?

If you discussed your project a bit, perhaps we'd understand why you think you need to do these thing, and suggest solutions.

On the field, i can have 3 slaves named "A", 6 slaves named "B" etc....

So when i send A and 1 , it will do a digitalwrite on a relay on, all slaves named A for Cue 1
etc.. the other slaves will do nothing because if they see "A" , "ok its not for me, do nothing"

Servo test code where position commands are sent to individual servos.

//zoomkat 11-22-12 simple delimited ',' string parse 
//from serial port input (via serial monitor)
//and print result out serial port
//multi servos added 
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include <Servo.h> 
Servo myservoa, myservob, myservoc, myservod;  // create servo object to control a servo 

void setup() {
  Serial.begin(9600);

  //myservoa.writeMicroseconds(1500); //set initial servo position if desired

  myservoa.attach(6);  //the pin for the servoa control
  myservob.attach(7);  //the pin for the servob control
  myservoc.attach(8);  //the pin for the servoc control
  myservod.attach(9);  //the pin for the servod control 
  Serial.println("multi-servo-delimit-test-dual-input-11-22-12"); // so I can keep track of what is loaded
}

void loop() {

  //expect single strings like 700a, or 1500c, or 2000d,
  //or like 30c, or 90a, or 180d,
  //or combined like 30c,180b,70a,120d,

  if (Serial.available())  {
    char c = Serial.read();  //gets one byte from serial buffer
    if (c == ',') {
      if (readString.length() >1) {
        Serial.println(readString); //prints string to serial port out

        int n = readString.toInt();  //convert readString into a number

        // auto select appropriate value, copied from someone elses code.
        if(n >= 500)
        {
          Serial.print("writing Microseconds: ");
          Serial.println(n);
          if(readString.indexOf('a') >0) myservoa.writeMicroseconds(n);
          if(readString.indexOf('b') >0) myservob.writeMicroseconds(n);
          if(readString.indexOf('c') >0) myservoc.writeMicroseconds(n);
          if(readString.indexOf('d') >0) myservod.writeMicroseconds(n);
        }
        else
        {   
          Serial.print("writing Angle: ");
          Serial.println(n);
          if(readString.indexOf('a') >0) myservoa.write(n);
          if(readString.indexOf('b') >0) myservob.write(n);
          if(readString.indexOf('c') >0) myservoc.write(n);
          if(readString.indexOf('d') >0) myservod.write(n);
        }
         readString=""; //clears variable for new input
      }
    }  
    else {     
      readString += c; //makes the string readString
    }
  }
}

Thanks, but i have the code, its working using RS485 and 2 wires.

Now i want to go on wireless, but i don't know which chip i should use like NRF24L01 , NRF905 , etc