Hello everyone! I'm working on a project that involves the remote control of a small robot and the graphical representation of the sensor (ultrasonic) data on a laptop app coded in C#. I want to use the Xbee system to TX commands to the robot to move and RX sensor data values. I would like to have this occur at the same time, but for the best of my knowledge...the speed of the arduino, xbee, and the lack of multiple cores on the arduino will not allow for this. The xbee documentation along with forum posts state that the xbee works full speed in half duplex. Does that mean that at half speed it can go full? Can I send and receive from an xbee? Or just send...then receive? My apologies for ignorance, or misunderstandings
Does that mean that at half speed it can go full?
No sorry. Basically the xbee transmits and receives on the same frequency, you can't do that at the same time because all you receive is your own transmitter, it drowns out all the other devices.
Sadness :'( So, do you think my project will still be feasible? Maybe if I buffer a two dim array, where one dim is the sensor value, the next is the IMU data and ill crunch it laptop-side to get the displacement. Ill send the data after every movement....
Yes your project is perfectly possible. I think you are underestimating the speed things happen at.
Well thanks for the hope. I want to keep the form as small as possible so im using a fio. Another relative question is whether or not I can have the X-CTU profiles set up so I can RX/TX data and wireless bootload without changing the profile of the XBEE. I now have it set up using the xbee explorer usb dongle on one xbee and the other on my bot. I can do wireless boot-loading but im not sure if I can utilize the RX/TX pins to just communicate data to and from without any changes.
I can do wireless boot-loading
I find this difficult to believe. Wireless loading of sketches and wireless loading of a boot-loader are two different things. The first I would believe, but not the second.
but im not sure if I can utilize the RX/TX pins to just communicate data to and from without any changes.
Why not? When you upload a sketch, the IDE sends serial data to the FIO, with the XBees replacing the physical wire between the computer and the Arduino, AND gets responses back from the boot-loader as it loads the sketch into flash.
This is no different from the process that any other application sends and receives serial data to/from the Arduino.
Another relative question is whether or not I can have the X-CTU profiles set up so I can RX/TX data and wireless bootload without changing the profile of the XBEE.
The X-CTU profiles are set to allow the XBees to talk to each other. Why they are talking (sending/receiving serial data that represents loading a sketch or sending/ receiving serial data that represents instructions to be deciphered by that sketch) is irrelevant.
As far as your concerns about how much the Arduino can do, there is a software concept that will greatly increase the amount you can do. That is using millis() and tracking intervals instead of or in conjunction with using delay() calls. The xBees do have some buffering and the hardware serial port does also, so if you only read when you know things are available and time your writes carefully (checking interval since last byte written), you will not get delays on those calls. About the only time you really need a delay is if something has very specific timing. Even then, you can use intervals until it is close and only delay for an amount that might pass before you loop again.