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@3:9091adbed369, 2015-06-09 (annotated)
- Committer:
- eisd
- Date:
- Tue Jun 09 08:48:01 2015 +0000
- Revision:
- 3:9091adbed369
- Parent:
- 2:04fdd571a385
- Child:
- 4:c9711f0cd097
Send nunchuk status by rfm69
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 | 3:9091adbed369 | 20 | const char *directions[8] = { "XR", "RR", "RX", "FR", "FX", "FF", "XF", "RF" }; |
eisd | 3:9091adbed369 | 21 | |
eisd | 2:04fdd571a385 | 22 | #ifndef USBSerial |
eisd | 2:04fdd571a385 | 23 | Serial pc(USBTX, USBRX); |
eisd | 1:de8c34c9ccdf | 24 | #endif |
gbrush | 0:7c98bcd8a245 | 25 | int main() { |
eisd | 1:de8c34c9ccdf | 26 | #ifndef USBSerial |
eisd | 1:de8c34c9ccdf | 27 | pc.baud(115200); |
eisd | 1:de8c34c9ccdf | 28 | #endif |
gbrush | 0:7c98bcd8a245 | 29 | |
eisd | 2:04fdd571a385 | 30 | #ifdef TARGET_KL25Z |
eisd | 2:04fdd571a385 | 31 | PwmOut r(LED_RED); |
eisd | 2:04fdd571a385 | 32 | r = 1.0f; |
eisd | 2:04fdd571a385 | 33 | PwmOut g(LED_GREEN); |
eisd | 2:04fdd571a385 | 34 | g = 1.0f; |
eisd | 2:04fdd571a385 | 35 | PwmOut b(LED_BLUE); |
eisd | 2:04fdd571a385 | 36 | b = 1.0f; |
eisd | 3:9091adbed369 | 37 | WiiChuck nun(PTE0, PTE1, pc); |
eisd | 2:04fdd571a385 | 38 | RFM69 radio(PTD2, PTD3, PTC5, PTD0, PTA13); |
eisd | 2:04fdd571a385 | 39 | #else |
eisd | 2:04fdd571a385 | 40 | WiiChuck nun(p9, p10, pc); |
eisd | 2:04fdd571a385 | 41 | #endif |
eisd | 2:04fdd571a385 | 42 | |
eisd | 3:9091adbed369 | 43 | radio.initialize(FREQUENCY, NODE_ID, NETWORKID); |
eisd | 3:9091adbed369 | 44 | radio.encrypt("0123456789054321"); |
eisd | 2:04fdd571a385 | 45 | //radio.promiscuous(false); |
eisd | 3:9091adbed369 | 46 | radio.setHighPower(true); |
eisd | 3:9091adbed369 | 47 | radio.setPowerLevel(20); |
eisd | 3:9091adbed369 | 48 | radio.rcCalibration(); |
eisd | 2:04fdd571a385 | 49 | //radio.readAllRegs(); |
eisd | 2:04fdd571a385 | 50 | pc.printf("temp %d\r\n", radio.readTemperature(-1)); |
eisd | 1:de8c34c9ccdf | 51 | |
eisd | 3:9091adbed369 | 52 | bool central = true; |
eisd | 2:04fdd571a385 | 53 | nunchuk n; |
eisd | 1:de8c34c9ccdf | 54 | while(1) { |
eisd | 3:9091adbed369 | 55 | bool read = 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 | 3:9091adbed369 | 59 | float R = x*x + y*y, p = atan2(y, x) * 4 / M_PI - 0.5; |
eisd | 1:de8c34c9ccdf | 60 | int c = 0; |
eisd | 3:9091adbed369 | 61 | if (p > -4) c = 0; |
eisd | 3:9091adbed369 | 62 | if (p > -3) c = 1; |
eisd | 3:9091adbed369 | 63 | if (p > -2) c = 2; |
eisd | 3:9091adbed369 | 64 | if (p > -1) c = 3; |
eisd | 3:9091adbed369 | 65 | if (p > 0) c = 4; |
eisd | 3:9091adbed369 | 66 | if (p > 1) c = 5; |
eisd | 3:9091adbed369 | 67 | if (p > 2) c = 6; |
eisd | 3:9091adbed369 | 68 | if (p > 3) c = 7; |
eisd | 1:de8c34c9ccdf | 69 | |
eisd | 3:9091adbed369 | 70 | #ifdef DEBUG |
eisd | 3:9091adbed369 | 71 | pc.printf("x%3d y%3d c%1d z%1d --", n.X, n.Y, n.C, n.Z); |
eisd | 3:9091adbed369 | 72 | pc.printf("x%d y%d z%d -- %.3f %s \r\n", n.aX, n.aY, n.aZ, R, directions[c]); |
eisd | 3:9091adbed369 | 73 | |
eisd | 3:9091adbed369 | 74 | //radio.send(GATEWAY_ID, (const void*)"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 50, false); |
eisd | 3:9091adbed369 | 75 | #endif |
eisd | 3:9091adbed369 | 76 | radio.send(GATEWAY_ID, (const void*)&n, sizeof(struct nunchuk), false); |
eisd | 3:9091adbed369 | 77 | |
eisd | 1:de8c34c9ccdf | 78 | #ifdef TARGET_KL25Z |
eisd | 3:9091adbed369 | 79 | if (R < 20) { |
eisd | 3:9091adbed369 | 80 | if (!central) { |
eisd | 3:9091adbed369 | 81 | pc.printf("central\r\n"); |
eisd | 3:9091adbed369 | 82 | central = true; |
eisd | 3:9091adbed369 | 83 | } |
eisd | 1:de8c34c9ccdf | 84 | r = 1.0f; |
eisd | 1:de8c34c9ccdf | 85 | g = 1.0f; |
eisd | 1:de8c34c9ccdf | 86 | b = 1.0f; |
eisd | 1:de8c34c9ccdf | 87 | } else { |
eisd | 3:9091adbed369 | 88 | if (central) { |
eisd | 3:9091adbed369 | 89 | pc.printf("go\r\n"); |
eisd | 3:9091adbed369 | 90 | central = false; |
eisd | 3:9091adbed369 | 91 | } |
eisd | 3:9091adbed369 | 92 | R = R/20000; |
eisd | 1:de8c34c9ccdf | 93 | float pal[8][3] = { |
eisd | 1:de8c34c9ccdf | 94 | { 0, 0, 1 }, |
eisd | 1:de8c34c9ccdf | 95 | { 0, 1, 1 }, |
eisd | 1:de8c34c9ccdf | 96 | { 0, 1, 0 }, |
eisd | 1:de8c34c9ccdf | 97 | { 1, 1, 0 }, |
eisd | 1:de8c34c9ccdf | 98 | { 1, 0.5, 0 }, |
eisd | 1:de8c34c9ccdf | 99 | { 1, 0, 0 }, |
eisd | 1:de8c34c9ccdf | 100 | { 1, 0, 1 }, |
eisd | 1:de8c34c9ccdf | 101 | { 0.5, 0, 1 }, |
eisd | 1:de8c34c9ccdf | 102 | }; |
eisd | 1:de8c34c9ccdf | 103 | r = 1.0f - pal[c][0] * R; |
eisd | 1:de8c34c9ccdf | 104 | g = 1.0f - pal[c][1] * R; |
eisd | 1:de8c34c9ccdf | 105 | b = 1.0f - pal[c][2] * R; |
eisd | 1:de8c34c9ccdf | 106 | } |
eisd | 1:de8c34c9ccdf | 107 | #endif |
eisd | 1:de8c34c9ccdf | 108 | } |
eisd | 1:de8c34c9ccdf | 109 | else |
eisd | 1:de8c34c9ccdf | 110 | { |
eisd | 1:de8c34c9ccdf | 111 | pc.printf("Error\r\n"); |
eisd | 3:9091adbed369 | 112 | return 0; |
eisd | 1:de8c34c9ccdf | 113 | } |
eisd | 3:9091adbed369 | 114 | wait(0.01); |
eisd | 1:de8c34c9ccdf | 115 | } |
eisd | 1:de8c34c9ccdf | 116 | } |