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 19:53:42 2015 +0000
Revision:
2:04fdd571a385
Parent:
1:de8c34c9ccdf
Child:
3:9091adbed369
nasty hacks

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 2:04fdd571a385 8 //#include "USBSerial.h"
eisd 2:04fdd571a385 9
eisd 2:04fdd571a385 10 #include "RFM69.h"
eisd 2:04fdd571a385 11 #define GATEWAY_ID 2
eisd 2:04fdd571a385 12 #define NODE_ID 1
eisd 2:04fdd571a385 13 #define NETWORKID 100
gbrush 0:7c98bcd8a245 14
eisd 2:04fdd571a385 15 // Uncomment only one of the following three to match radio frequency
eisd 2:04fdd571a385 16 //#define FREQUENCY RF69_433MHZ
eisd 2:04fdd571a385 17 #define FREQUENCY RF69_868MHZ
eisd 2:04fdd571a385 18 //#define FREQUENCY RF69_915MHZ
eisd 2:04fdd571a385 19
eisd 2:04fdd571a385 20 #ifndef USBSerial
eisd 2:04fdd571a385 21 Serial pc(USBTX, USBRX);
eisd 1:de8c34c9ccdf 22 #endif
gbrush 0:7c98bcd8a245 23 int main() {
eisd 1:de8c34c9ccdf 24 #ifndef USBSerial
eisd 1:de8c34c9ccdf 25 pc.baud(115200);
eisd 1:de8c34c9ccdf 26 #endif
gbrush 0:7c98bcd8a245 27
eisd 2:04fdd571a385 28 #ifdef TARGET_KL25Z
eisd 2:04fdd571a385 29 PwmOut r(LED_RED);
eisd 2:04fdd571a385 30 r = 1.0f;
eisd 2:04fdd571a385 31 PwmOut g(LED_GREEN);
eisd 2:04fdd571a385 32 g = 1.0f;
eisd 2:04fdd571a385 33 PwmOut b(LED_BLUE);
eisd 2:04fdd571a385 34 b = 1.0f;
eisd 2:04fdd571a385 35 //WiiChuck nun(PTE0, PTE1, pc);
eisd 2:04fdd571a385 36 RFM69 radio(PTD2, PTD3, PTC5, PTD0, PTA13);
eisd 2:04fdd571a385 37 #else
eisd 2:04fdd571a385 38 WiiChuck nun(p9, p10, pc);
eisd 2:04fdd571a385 39 #endif
eisd 2:04fdd571a385 40
eisd 2:04fdd571a385 41 pc.printf("-- %d --\r\n", radio.initialize(FREQUENCY, NODE_ID, NETWORKID));
eisd 2:04fdd571a385 42 radio.encrypt("0123456789012345");
eisd 2:04fdd571a385 43 //radio.promiscuous(false);
eisd 2:04fdd571a385 44 //radio.setHighPower(true);
eisd 2:04fdd571a385 45 radio.setPowerLevel(31);
eisd 2:04fdd571a385 46 //radio.rcCalibration();
eisd 2:04fdd571a385 47 //radio.readAllRegs();
eisd 2:04fdd571a385 48 pc.printf("temp %d\r\n", radio.readTemperature(-1));
eisd 1:de8c34c9ccdf 49 pc.printf("wii test begin \r\n");
eisd 1:de8c34c9ccdf 50
eisd 2:04fdd571a385 51
eisd 2:04fdd571a385 52 nunchuk n;
gbrush 0:7c98bcd8a245 53
eisd 1:de8c34c9ccdf 54 while(1) {
eisd 2:04fdd571a385 55 bool read = true;//nun.Read(&n.X, &n.Y, &n.aX, &n.aY, &n.aZ, &n.C, &n.Z);
eisd 1:de8c34c9ccdf 56 if(read)
eisd 1:de8c34c9ccdf 57 {
eisd 2:04fdd571a385 58 float x = n.X - 128, y = n.Y - 128;
eisd 2:04fdd571a385 59 float R = 1000, p = 90.0f;//x*x + y*y, p = atan2(y, x) * 4 / M_PI - 0.5;
eisd 1:de8c34c9ccdf 60 int c = 0;
eisd 1:de8c34c9ccdf 61 const char *d = "RF";
eisd 1:de8c34c9ccdf 62 if (p > -4) {c = 0; d = "XR";}
eisd 1:de8c34c9ccdf 63 if (p > -3) {c = 1; d = "RR";}
eisd 1:de8c34c9ccdf 64 if (p > -2) {c = 2; d = "RX";}
eisd 1:de8c34c9ccdf 65 if (p > -1) {c = 3; d = "FR";}
eisd 1:de8c34c9ccdf 66 if (p > 0) {c = 4; d = "FX";}
eisd 1:de8c34c9ccdf 67 if (p > 1) {c = 5; d = "FF";}
eisd 1:de8c34c9ccdf 68 if (p > 2) {c = 6; d = "XF";}
eisd 1:de8c34c9ccdf 69 if (p > 3) {c = 7; d = "RF";}
eisd 1:de8c34c9ccdf 70
eisd 2:04fdd571a385 71 //pc.printf("x%3d y%3d c%1d z%1d --", n.X, n.Y, n.C, n.Z);
eisd 2:04fdd571a385 72 //pc.printf("x%d y%d z%d -- %.3f %s \r\n", n.aX, n.aY, n.aZ, R, d);
eisd 1:de8c34c9ccdf 73
eisd 2:04fdd571a385 74 radio.send(GATEWAY_ID, (const void*)"A", 1, false);
eisd 2:04fdd571a385 75 //radio.send(GATEWAY_ID, (const void*)&n, sizeof(nunchuk), false);
eisd 2:04fdd571a385 76 pc.printf("A");
eisd 1:de8c34c9ccdf 77 #ifdef TARGET_KL25Z
eisd 1:de8c34c9ccdf 78 if (R < 100) {
eisd 1:de8c34c9ccdf 79 r = 1.0f;
eisd 1:de8c34c9ccdf 80 g = 1.0f;
eisd 1:de8c34c9ccdf 81 b = 1.0f;
eisd 1:de8c34c9ccdf 82 } else {
eisd 1:de8c34c9ccdf 83 R = R/60000;
eisd 1:de8c34c9ccdf 84 float pal[8][3] = {
eisd 1:de8c34c9ccdf 85 { 0, 0, 1 },
eisd 1:de8c34c9ccdf 86 { 0, 1, 1 },
eisd 1:de8c34c9ccdf 87 { 0, 1, 0 },
eisd 1:de8c34c9ccdf 88 { 1, 1, 0 },
eisd 1:de8c34c9ccdf 89 { 1, 0.5, 0 },
eisd 1:de8c34c9ccdf 90 { 1, 0, 0 },
eisd 1:de8c34c9ccdf 91 { 1, 0, 1 },
eisd 1:de8c34c9ccdf 92 { 0.5, 0, 1 },
eisd 1:de8c34c9ccdf 93 };
eisd 1:de8c34c9ccdf 94 r = 1.0f - pal[c][0] * R;
eisd 1:de8c34c9ccdf 95 g = 1.0f - pal[c][1] * R;
eisd 1:de8c34c9ccdf 96 b = 1.0f - pal[c][2] * R;
eisd 1:de8c34c9ccdf 97 }
eisd 1:de8c34c9ccdf 98 #endif
eisd 1:de8c34c9ccdf 99 }
eisd 1:de8c34c9ccdf 100 else
eisd 1:de8c34c9ccdf 101 {
eisd 1:de8c34c9ccdf 102 pc.printf("Error\r\n");
eisd 1:de8c34c9ccdf 103 wait(1);
eisd 1:de8c34c9ccdf 104 }
eisd 2:04fdd571a385 105 wait(0.1);
eisd 1:de8c34c9ccdf 106 }
eisd 1:de8c34c9ccdf 107 }