Networking demo that toggles a remote LED:
Pick a name for your sketch. Note that this name will become the name of the directory holding the sketch code.
$ mkdir ~/sketches $ mkdir ~/sketches/netled $ cd ~/IXM/SFB $ make SKETCH_DIR=~/sketches/blinky sketchinit |
Edit ~/sketches/netled/sketch.pde
and paste:
/* Networking demo that toggles a remote LED: * - Defines service 'l' for LED toggling (red vs blue). * - Long button press toggles whether board is an 'LED provider' * - Short button press sends a 'toggle LED' request to nearest LED provider. * - 'Toggle reply' causes matching flash on the button-pressed board */ bool iProvideLight = false; // Initially, I'm not an 'LED provider' bool ledRed = false; // When I am, remember what color I'm showing void handleToggleRequest(u8 * packet) { // This function runs on the service provider ledRed = !ledRed; // Toggle our color facePrintf(packetSource(packet),"r%d\n",ledRed); // And reply back to the requester } void handleToggleReply(u8 * packet) { // This function runs on the service requester u32 isRed; if (packetScanf(packet,"r%d\n",&isRed) != 3) // Analyze packet return; // ignore bogus ones if (isRed) ledOn(BODY_RGB_RED_PIN); // Match the provider's color else ledOn(BODY_RGB_BLUE_PIN); delay(50); // Brief flash.. mustn't delay long in packet handler! } void setup() { Body.reflex('t',handleToggleRequest); // For when I'm a provider Body.reflex('r',handleToggleReply); // For when I'm a requester Net.begin(); // Start the net! } void loop() { u32 start = millis(); // Capture current time while (buttonDown()) delay(10); // Wait for button up u32 pressTime = millis()-start; // Compute how long the button was down if (pressTime > 500) { // If over half second: Long click iProvideLight = !iProvideLight; // Toggle my status if (iProvideLight) Net.offer('l'); // And update network advertising else Net.withhold('l'); } else if (pressTime > 50) // If >50ms and <500ms: Short click Net.printf('l',"t\n"); // So send toggle request to service 'l' // Set our LED ledOff(BODY_RGB_RED_PIN); ledOff(BODY_RGB_BLUE_PIN); if (iProvideLight) { if (ledRed) ledOn(BODY_RGB_RED_PIN); else ledOn(BODY_RGB_BLUE_PIN); } } |
$ cd ~/sketches/netled $ make |
$ cd ~/IXM/SFB $ ./targets/host/bin/sfbdl -f ~/sketches/netled/sketch.hex -d /dev/ttyUSB0 |