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

Revision:
1:de8c34c9ccdf
Parent:
0:7c98bcd8a245
Child:
2:04fdd571a385
--- a/main.cpp	Mon Mar 14 23:48:15 2011 +0000
+++ b/main.cpp	Mon Jun 08 15:32:27 2015 +0000
@@ -1,31 +1,89 @@
 #include "mbed.h"
+#ifndef M_PI
+#define M_PI           3.14159265358979323846
+#endif
+
+#include "WiiChuk_compat.hpp"
 
-#include "WiiChuk_compat.h"
+#ifndef USBSerial
+Serial pc(USBTX, USBRX);
+#endif
 
-WiiChuck WiiNun(p9, p10);
-Serial pc(USBTX, USBRX);
+#ifdef TARGET_KL25Z
+WiiChuck nun(PTE0, PTE1, pc);
+PwmOut r(LED_RED);
+PwmOut g(LED_GREEN);
+PwmOut b(LED_BLUE);
+#else
+#include "USBSerial.h"
+WiiChuck nun(p9, p10, pc);
+#endif
 
 int main() {
-
+#ifdef TARGET_KL25Z
+    r = 1.0f;
+    g = 1.0f;
+    b = 1.0f;
+#endif
 
-         pc.baud(115200);
-         pc.printf("wii test begin                                             \r\n");
+#ifndef USBSerial
+    pc.baud(115200);
+#endif
 
-         int joyX = 0;int joyY = 0;
-         int accX = 0;int accY = 0;int accZ = 0;
-         int buttonC = 0;int buttonZ = 0;
+    pc.printf("wii test begin                                             \r\n");
+
+    int joyX = 0;int joyY = 0;
+    int accX = 0;int accY = 0;int accZ = 0;
+    int buttonC = 0;int buttonZ = 0;
      
-      while(1) {
-         bool read = WiiNun.Read(&joyX,&joyY,&accX,&accY,&accZ,&buttonC,&buttonZ);
-         if(read)
-         {
-             pc.printf("x%3d y%3d c%1d z%1d --", joyX, joyY, buttonC, buttonZ);
-             pc.printf("x%d y%d z%d                    \r", accX, accY, accZ);
-         }
-         else
-         {
-             pc.printf("Error\n");
-         }
-         wait(0.001);
-     }
- }
+    while(1) {
+        bool read = nun.Read(&joyX,&joyY,&accX,&accY,&accZ,&buttonC,&buttonZ);
+        if(read)
+        {
+            float x = joyX - 128, y = joyY - 128;
+            float R = x*x + y*y, p = atan2(y, x) * 4 / M_PI - 0.5;
+            int c = 0;
+            const char *d = "RF";
+            if (p > -4) {c = 0; d = "XR";}
+            if (p > -3) {c = 1; d = "RR";}
+            if (p > -2) {c = 2; d = "RX";}
+            if (p > -1) {c = 3; d = "FR";}
+            if (p >  0) {c = 4; d = "FX";}
+            if (p >  1) {c = 5; d = "FF";}
+            if (p >  2) {c = 6; d = "XF";}
+            if (p >  3) {c = 7; d = "RF";}
+            
+            pc.printf("x%3d y%3d c%1d z%1d --", joyX, joyY, buttonC, buttonZ);
+            pc.printf("x%d y%d z%d -- %.3f %s                   \r\n", accX, accY, accZ, R, d);
+
+#ifdef TARGET_KL25Z
+            if (R < 100) {
+                r = 1.0f;
+                g = 1.0f;
+                b = 1.0f;
+            } else {
+                R = R/60000;
+                float pal[8][3] = {
+                    {   0,   0,   1 },
+                    {   0,   1,   1 },
+                    {   0,   1,   0 },
+                    {   1,   1,   0 },
+                    {   1, 0.5,   0 },
+                    {   1,   0,   0 },
+                    {   1,   0,   1 },
+                    { 0.5,   0,   1 },
+                };
+                r = 1.0f - pal[c][0] * R;
+                g = 1.0f - pal[c][1] * R;
+                b = 1.0f - pal[c][2] * R;
+            }
+#endif
+        }
+        else
+        {
+            pc.printf("Error\r\n");
+            wait(1);
+        }
+        wait(0.01);
+    }
+}