this program can by compiled and run on several mbeds in a network. The mbed ID is automatically generated. This program is a small test to see if it works. To test the firmware you will need two ( or more ) mbed modules connected to the same network. Pin p5 should be connected with a push button to 3v3 and a resistor of 10k to ground. If the button is pressed the mbed will broadcast a message on ip 239, 192, 1, 100 on port 50000. All mbeds are listening to this ip address and port so they will pick up this message. If the message says MBED xyz LED ON, led1 will id on. If the message says MBED LED OFF, led1 will be off. It\\\'s that simple. So with one mbed you can turn the other mbeds led on or off.

Dependencies:   EthernetNetIf NTPClient_NetServices mbed

Files at this revision

API Documentation at this revision

Comitter:
Schueler
Date:
Wed Nov 24 15:49:45 2010 +0000
Child:
1:2e2d0b0b57e0
Commit message:
0.01 Initial test

Changed in this revision

EthernetNetIf.lib Show annotated file Show diff for this revision Revisions of this file
UDPSocketExample.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetNetIf.lib	Wed Nov 24 15:49:45 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UDPSocketExample.cpp	Wed Nov 24 15:49:45 2010 +0000
@@ -0,0 +1,111 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "UDPSocket.h"
+
+LocalFileSystem local("local");
+Serial pc(USBTX, USBRX);
+EthernetNetIf eth;
+UDPSocket udp;
+DigitalOut led(LED1);
+InterruptIn button(p5);
+
+// Message to let the other know we are alive
+      char* str    = "MBED 001 ALIVE\0";
+// Address other MBED to turn on the LED
+const char* strON  = "MBED 002 LED ON  \0";
+const char* strOFF = "MBED 002 LED OFF \0";
+
+char dummy = 0;
+char mbed_id = 0;
+void button_pressed() {
+    dummy = 1;
+}
+
+
+void onUDPSocketEvent(UDPSocketEvent e)
+{
+  switch(e)
+  {
+  case UDPSOCKET_READABLE: //The only event for now
+    char buf[64] = {0};
+    Host host;
+    while( int len = udp.recvfrom( buf, 63, &host ) )
+    {
+      if( len <= 0 )
+        break;
+        
+        // should implement a parser...
+        // but this will do the trick for the moment
+        if ( strncmp ( buf, "MBED", 4 ) == 0 )
+        {
+            pc.printf ("message from %d.%d.%d.%d: %s\n", host.getIp()[0], host.getIp()[1], host.getIp()[2], host.getIp()[3], buf );
+
+            int mbed_client = 0;
+            for ( int i = 5; i < 9; i++ )
+            {
+                if ( ( buf[i] >= '0' ) & ( buf[i] <= '9' ) ) { mbed_client += ( buf[i] - '0' ); }
+            }
+            if ( strstr (buf, "ALIVE") != NULL )
+            {
+                pc.printf ("MBED %d is alive\n", mbed_client );
+            }
+            if ( strstr (buf, "LED") != NULL )
+            {
+                if ( strstr (buf, "ON")  != NULL ) { led = 1; }
+                if ( strstr (buf, "OFF") != NULL ) { led = 0; }
+            }
+        }
+
+    }
+    break;
+  }
+}
+
+int main() {
+  char pos = 0;
+  pc.baud(115200);
+  pc.printf("Ethernet...\n");
+  EthernetErr ethErr = eth.setup();
+  if(ethErr)
+  {
+    printf("Error %d in setup.\n", ethErr);
+    return -1;
+  }
+  pc.printf("  OK\n");
+
+/*
+  FILE *fp = fopen ("/local/mbed_udp.cfg", "r" );
+    if(!fp) {
+        printf("File /local/mbed_udp.cfg could not be opened!\n");
+        exit(1);
+    }
+  str[5] = fgetc ( fp );
+  fclose(fp);
+*/
+
+  
+  Host multicast(IpAddr(239, 192, 1, 100), 50000, NULL); //Join multicast group on port 50000
+ 
+  udp.setOnEvent(&onUDPSocketEvent);
+  
+  udp.bind(multicast);
+
+  udp.sendto( str, strlen(str), &multicast );
+  
+  button.rise(&button_pressed);
+  while(true)
+  {
+    Net::poll();
+    if(dummy != 0)
+    {
+      char strout[20];
+      pos = !pos;
+      if ( pos == 0 ) strncpy( strout, strOFF, 17 ); else strncpy( strout, strON, 17 );
+      udp.sendto( strout, strlen(strout), &multicast );
+      pc.printf("%s\n", str);
+      dummy = 0;
+    }
+  }
+
+  
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Nov 24 15:49:45 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da