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
main.cpp@2:04fdd571a385, 2015-06-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |