Wii Nunchuk via RFM69HW to Duplo 9203 Remote Control Car Kit using ARM mbed on a FRDM-KL25Z

Dependencies:   CRC FastPWM RFM69 USBDevice WakeUp WiiChuk_compat mbed-rtos mbed tlc59108

Fork of wiiNunchuk_compat by Greg Brush

Files at this revision

API Documentation at this revision

Comitter:
eisd
Date:
Fri Jun 19 13:05:57 2015 +0000
Parent:
3:9091adbed369
Child:
5:7af5760d7e8f
Commit message:
Rudimentary chuck receiver

Changed in this revision

RFM69.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/RFM69.lib	Tue Jun 09 08:48:01 2015 +0000
+++ b/RFM69.lib	Fri Jun 19 13:05:57 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/br549/code/RFM69/#574f229e8182
+http://mbed.org/users/br549/code/RFM69/#9d44479041c3
--- a/main.cpp	Tue Jun 09 08:48:01 2015 +0000
+++ b/main.cpp	Fri Jun 19 13:05:57 2015 +0000
@@ -40,7 +40,15 @@
     WiiChuck nun(p9, p10, pc);
 #endif
 
-    radio.initialize(FREQUENCY, NODE_ID, NETWORKID);
+    nunchuk n;
+    bool sender = nun.Read(&n.X, &n.Y, &n.aX, &n.aY, &n.aZ, &n.C, &n.Z);
+    if (sender) {
+        pc.printf("chuck attached\r\n");
+        radio.initialize(FREQUENCY, NODE_ID, NETWORKID);
+    } else {
+        pc.printf("chuck unavailable\r\n");
+        radio.initialize(FREQUENCY, GATEWAY_ID, NETWORKID);
+    }    
     radio.encrypt("0123456789054321");
     //radio.promiscuous(false);
     radio.setHighPower(true);
@@ -49,10 +57,17 @@
     //radio.readAllRegs();
     pc.printf("temp %d\r\n", radio.readTemperature(-1));
 
-    bool central = true;
-    nunchuk n;
+    bool read, central = true;
     while(1) {
-        bool read = nun.Read(&n.X, &n.Y, &n.aX, &n.aY, &n.aZ, &n.C, &n.Z);
+        if (sender)
+            read = nun.Read(&n.X, &n.Y, &n.aX, &n.aY, &n.aZ, &n.C, &n.Z);
+        else {
+            radio.receive();
+            printf("len %d\r\n", radio.DATALEN);
+            read = (radio.DATALEN == sizeof(struct nunchuk));
+            if (read)
+                memcpy((void*)&n, (const void*)radio.DATA, radio.DATALEN);
+        }
         if(read)
         {
             float x = n.X - 128, y = n.Y - 128;
@@ -73,7 +88,8 @@
 
             //radio.send(GATEWAY_ID, (const void*)"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 50, false);
 #endif
-            radio.send(GATEWAY_ID, (const void*)&n, sizeof(struct nunchuk), false);
+            if (sender)
+                radio.send(GATEWAY_ID, (const void*)&n, sizeof(struct nunchuk), false);
 
 #ifdef TARGET_KL25Z
             if (R < 20) {
@@ -106,11 +122,12 @@
             }
 #endif
         }
-        else
+        else if (sender)
         {
             pc.printf("Error\r\n");
             return 0;
         }
-        wait(0.01);
+        if (sender)
+            wait(0.01);
     }
 }