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

Committer:
eisd
Date:
Mon Jun 08 15:32:27 2015 +0000
Revision:
1:de8c34c9ccdf
Parent:
0:7c98bcd8a245
Child:
2:04fdd571a385
Chuck to led on KL25Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gbrush 0:7c98bcd8a245 1 #include "mbed.h"
eisd 1:de8c34c9ccdf 2 #ifndef M_PI
eisd 1:de8c34c9ccdf 3 #define M_PI 3.14159265358979323846
eisd 1:de8c34c9ccdf 4 #endif
eisd 1:de8c34c9ccdf 5
eisd 1:de8c34c9ccdf 6 #include "WiiChuk_compat.hpp"
gbrush 0:7c98bcd8a245 7
eisd 1:de8c34c9ccdf 8 #ifndef USBSerial
eisd 1:de8c34c9ccdf 9 Serial pc(USBTX, USBRX);
eisd 1:de8c34c9ccdf 10 #endif
gbrush 0:7c98bcd8a245 11
eisd 1:de8c34c9ccdf 12 #ifdef TARGET_KL25Z
eisd 1:de8c34c9ccdf 13 WiiChuck nun(PTE0, PTE1, pc);
eisd 1:de8c34c9ccdf 14 PwmOut r(LED_RED);
eisd 1:de8c34c9ccdf 15 PwmOut g(LED_GREEN);
eisd 1:de8c34c9ccdf 16 PwmOut b(LED_BLUE);
eisd 1:de8c34c9ccdf 17 #else
eisd 1:de8c34c9ccdf 18 #include "USBSerial.h"
eisd 1:de8c34c9ccdf 19 WiiChuck nun(p9, p10, pc);
eisd 1:de8c34c9ccdf 20 #endif
gbrush 0:7c98bcd8a245 21
gbrush 0:7c98bcd8a245 22 int main() {
eisd 1:de8c34c9ccdf 23 #ifdef TARGET_KL25Z
eisd 1:de8c34c9ccdf 24 r = 1.0f;
eisd 1:de8c34c9ccdf 25 g = 1.0f;
eisd 1:de8c34c9ccdf 26 b = 1.0f;
eisd 1:de8c34c9ccdf 27 #endif
gbrush 0:7c98bcd8a245 28
eisd 1:de8c34c9ccdf 29 #ifndef USBSerial
eisd 1:de8c34c9ccdf 30 pc.baud(115200);
eisd 1:de8c34c9ccdf 31 #endif
gbrush 0:7c98bcd8a245 32
eisd 1:de8c34c9ccdf 33 pc.printf("wii test begin \r\n");
eisd 1:de8c34c9ccdf 34
eisd 1:de8c34c9ccdf 35 int joyX = 0;int joyY = 0;
eisd 1:de8c34c9ccdf 36 int accX = 0;int accY = 0;int accZ = 0;
eisd 1:de8c34c9ccdf 37 int buttonC = 0;int buttonZ = 0;
gbrush 0:7c98bcd8a245 38
eisd 1:de8c34c9ccdf 39 while(1) {
eisd 1:de8c34c9ccdf 40 bool read = nun.Read(&joyX,&joyY,&accX,&accY,&accZ,&buttonC,&buttonZ);
eisd 1:de8c34c9ccdf 41 if(read)
eisd 1:de8c34c9ccdf 42 {
eisd 1:de8c34c9ccdf 43 float x = joyX - 128, y = joyY - 128;
eisd 1:de8c34c9ccdf 44 float R = x*x + y*y, p = atan2(y, x) * 4 / M_PI - 0.5;
eisd 1:de8c34c9ccdf 45 int c = 0;
eisd 1:de8c34c9ccdf 46 const char *d = "RF";
eisd 1:de8c34c9ccdf 47 if (p > -4) {c = 0; d = "XR";}
eisd 1:de8c34c9ccdf 48 if (p > -3) {c = 1; d = "RR";}
eisd 1:de8c34c9ccdf 49 if (p > -2) {c = 2; d = "RX";}
eisd 1:de8c34c9ccdf 50 if (p > -1) {c = 3; d = "FR";}
eisd 1:de8c34c9ccdf 51 if (p > 0) {c = 4; d = "FX";}
eisd 1:de8c34c9ccdf 52 if (p > 1) {c = 5; d = "FF";}
eisd 1:de8c34c9ccdf 53 if (p > 2) {c = 6; d = "XF";}
eisd 1:de8c34c9ccdf 54 if (p > 3) {c = 7; d = "RF";}
eisd 1:de8c34c9ccdf 55
eisd 1:de8c34c9ccdf 56 pc.printf("x%3d y%3d c%1d z%1d --", joyX, joyY, buttonC, buttonZ);
eisd 1:de8c34c9ccdf 57 pc.printf("x%d y%d z%d -- %.3f %s \r\n", accX, accY, accZ, R, d);
eisd 1:de8c34c9ccdf 58
eisd 1:de8c34c9ccdf 59 #ifdef TARGET_KL25Z
eisd 1:de8c34c9ccdf 60 if (R < 100) {
eisd 1:de8c34c9ccdf 61 r = 1.0f;
eisd 1:de8c34c9ccdf 62 g = 1.0f;
eisd 1:de8c34c9ccdf 63 b = 1.0f;
eisd 1:de8c34c9ccdf 64 } else {
eisd 1:de8c34c9ccdf 65 R = R/60000;
eisd 1:de8c34c9ccdf 66 float pal[8][3] = {
eisd 1:de8c34c9ccdf 67 { 0, 0, 1 },
eisd 1:de8c34c9ccdf 68 { 0, 1, 1 },
eisd 1:de8c34c9ccdf 69 { 0, 1, 0 },
eisd 1:de8c34c9ccdf 70 { 1, 1, 0 },
eisd 1:de8c34c9ccdf 71 { 1, 0.5, 0 },
eisd 1:de8c34c9ccdf 72 { 1, 0, 0 },
eisd 1:de8c34c9ccdf 73 { 1, 0, 1 },
eisd 1:de8c34c9ccdf 74 { 0.5, 0, 1 },
eisd 1:de8c34c9ccdf 75 };
eisd 1:de8c34c9ccdf 76 r = 1.0f - pal[c][0] * R;
eisd 1:de8c34c9ccdf 77 g = 1.0f - pal[c][1] * R;
eisd 1:de8c34c9ccdf 78 b = 1.0f - pal[c][2] * R;
eisd 1:de8c34c9ccdf 79 }
eisd 1:de8c34c9ccdf 80 #endif
eisd 1:de8c34c9ccdf 81 }
eisd 1:de8c34c9ccdf 82 else
eisd 1:de8c34c9ccdf 83 {
eisd 1:de8c34c9ccdf 84 pc.printf("Error\r\n");
eisd 1:de8c34c9ccdf 85 wait(1);
eisd 1:de8c34c9ccdf 86 }
eisd 1:de8c34c9ccdf 87 wait(0.01);
eisd 1:de8c34c9ccdf 88 }
eisd 1:de8c34c9ccdf 89 }