![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Example for sending and receiving simple broadcast commands using the RF interface on the Pi Swarm
Dependencies: Pi_Swarm_Library_v06_alpha mbed
Fork of Pi_Swarm_Blank by
Revision 5:ca18d81a3212, committed 2015-03-10
- Comitter:
- jah128
- Date:
- Tue Mar 10 16:33:54 2015 +0000
- Parent:
- 4:823174be9a6b
- Commit message:
- Added example
Changed in this revision
diff -r 823174be9a6b -r ca18d81a3212 Pi_Swarm_Library.lib --- a/Pi_Swarm_Library.lib Tue Feb 18 17:18:43 2014 +0000 +++ b/Pi_Swarm_Library.lib Tue Mar 10 16:33:54 2015 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/piswarm/code/Pi_Swarm_Library_v06_alpha/#7a4fc1d7e484 +http://mbed.org/teams/piswarm/code/Pi_Swarm_Library_v06_alpha/#5c111c07a2ed
diff -r 823174be9a6b -r ca18d81a3212 main.cpp --- a/main.cpp Tue Feb 18 17:18:43 2014 +0000 +++ b/main.cpp Tue Mar 10 16:33:54 2015 +0000 @@ -2,13 +2,14 @@ * * University of York Robot Lab Pi Swarm Robot Library * - * "Blank" Program + * User Command RF Test Program * - * Use this file as the template to produce custom controllers + * Based on the blank program for 0.6 API, this adds handling for user RF messages from the + * table controller * * (C) Dr James Hilder, Dept. Electronics & Computer Science, University of York * - * Version 0.6 February 2014 + * Version 0.6 May 2014 * * Designed for use with the Pi Swarm Board (enhanced MBED sensor board) v1.2 * @@ -19,16 +20,28 @@ PiSwarm piswarm; Serial pc (USBTX,USBRX); +Timeout clear_screen_timeout; //This is where the program code goes. In the simple demo, the outer LEDs are blinked. int main() { init(); - int step = 0; + int function = 0; + //Each RF message will contain 1 byte: in this case the user ID. (Note it is note strictly necessary as the + //user ID is already sent seperately and we are also sending the 4-bit function register, so for very simple + //comms the message part can be omitted.) + char message [2]; + message[0] = piswarm.get_id() + 48; while(1) { step ++; - if(step==6)step=0; + //Every 6 steps (1.5 seconds) send an RF message, incrementing the function counter + if(step==6){ + step=0; + function ++; + if(function == 16) function = 0; + broadcast_user_rf_command(function,message,1); + } switch (step%3){ case 0: piswarm.set_oled_colour(50,0,0); break; case 1: piswarm.set_oled_colour(0,50,0); break; @@ -42,6 +55,23 @@ } } +// This function is used to send the RF message: +void broadcast_user_rf_command(int function, char * message, int length) +{ + //This function augments the communications stack + //It sends a 'user' RF command to all members (ie target_id = 0) + //It sends a 'request', not a 'command', meaning it will still be handled if commands are disabled (RF_ALLOW_COMMANDS set to 0, recommended) + //It takes three inputs: + // * function (an integer from 0 to 15) + // * message (a char array) + // * length (length of message in bytes) + send_rf_message(0,48+(function % 16),message,length); +} + +void clear_screen(){ + piswarm.cls(); +} + /*************************************************************************************************************************************** * * Beyond this point, empty code blocks for optional functions is given @@ -56,6 +86,14 @@ // If the communication stack is not being used, all radio data is sent to processRawRFData() instead void handleUserRFCommand(char sender, char broadcast_message, char request_response, char id, char is_command, char function, char * data, char length){ + piswarm.cls(); + piswarm.locate(0,0); + piswarm.printf("URF:%d",function); + if(length > 0) { + piswarm.locate(0,1); + piswarm.printf("%s",data); + } + clear_screen_timeout.attach(&clear_screen,0.2); // A 'user' RF Command has been received: write the code here to process it // sender = ID of the sender, range 0 to 31 // broadcast_message = 1 is message sent to all robots, 0 otherwise @@ -70,6 +108,7 @@ } void handleUserRFResponse(char sender, char broadcast_message, char success, char id, char is_command, char function, char * data, char length){ + //pc.printf("Response:%s\n",data); // A 'user' RF Response has been received: write the code here to process it // sender = ID of the sender, range 0 to 31 // broadcast_message = 1 is message sent to all robots, 0 otherwise
diff -r 823174be9a6b -r ca18d81a3212 main.h --- a/main.h Tue Feb 18 17:18:43 2014 +0000 +++ b/main.h Tue Mar 10 16:33:54 2015 +0000 @@ -14,11 +14,13 @@ #define MAIN_H #include "piswarm.h" +#include "communications.h" void handleUserRFCommand(char * data, char length); void handleUserRFCommand(char sender, char broadcast_message, char request_response, char id, char is_command, char function, char * data, char length); void handleUserRFResponse(char sender, char broadcast_message, char request_response, char id, char is_command, char function, char * data, char length); void processRawRFData(char * rstring, char cCount); +void broadcast_user_rf_command(int function, char * message, int length); void switch_pressed ( void ); #endif //MAIN_H \ No newline at end of file