A wireless accelerometer based joypad using FRDM-KL25Z for the Gameduino based space invaders.
Dependencies: MMA8451Q mbed nRF2401A
Fork of nRF2401A_Hello_World by
nRF2401A connected to the KL25Z board:
main.cpp@4:4a84fcba7bd4, 2013-10-26 (annotated)
- Committer:
- TheChrisyd
- Date:
- Sat Oct 26 22:43:56 2013 +0000
- Revision:
- 4:4a84fcba7bd4
- Parent:
- 3:34ae527e9d41
- Child:
- 5:8e11050f1464
Forked Hello world to create a wireless joypad for space invaders on the gameduino
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TheChrisyd | 0:8fcb46c5fa63 | 1 | #include "mbed.h" |
TheChrisyd | 0:8fcb46c5fa63 | 2 | #include "nRF2401A.h" |
TheChrisyd | 4:4a84fcba7bd4 | 3 | #include "MMA8451Q.h" |
TheChrisyd | 0:8fcb46c5fa63 | 4 | |
TheChrisyd | 4:4a84fcba7bd4 | 5 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
TheChrisyd | 4:4a84fcba7bd4 | 6 | #define STICK_LEFT_BIT 0x01 |
TheChrisyd | 4:4a84fcba7bd4 | 7 | #define STICK_RIGHT_BIT 0x02 |
TheChrisyd | 4:4a84fcba7bd4 | 8 | #define STICK_UP_BIT 0x04 |
TheChrisyd | 4:4a84fcba7bd4 | 9 | #define STICK_DOWN_BIT 0x08 |
TheChrisyd | 3:34ae527e9d41 | 10 | |
TheChrisyd | 4:4a84fcba7bd4 | 11 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
TheChrisyd | 4:4a84fcba7bd4 | 12 | Serial pc(USBTX, USBRX); |
TheChrisyd | 4:4a84fcba7bd4 | 13 | nRF2401A rf1(PTD0, PTD5, PTA13, PTC12, PTC13); |
TheChrisyd | 4:4a84fcba7bd4 | 14 | PwmOut rled(LED_RED); |
TheChrisyd | 4:4a84fcba7bd4 | 15 | PwmOut gled(LED_GREEN); |
TheChrisyd | 4:4a84fcba7bd4 | 16 | PwmOut bled(LED_BLUE); |
TheChrisyd | 0:8fcb46c5fa63 | 17 | |
TheChrisyd | 3:34ae527e9d41 | 18 | int main() |
TheChrisyd | 3:34ae527e9d41 | 19 | { |
TheChrisyd | 0:8fcb46c5fa63 | 20 | wait(0.005); |
TheChrisyd | 0:8fcb46c5fa63 | 21 | pc.printf("Hello nRF2401A\n\r"); |
TheChrisyd | 4:4a84fcba7bd4 | 22 | |
TheChrisyd | 0:8fcb46c5fa63 | 23 | rf1.setDataPayloadLength(4 << 3) |
TheChrisyd | 0:8fcb46c5fa63 | 24 | .setAddress(0x0, 0x0, 0xa6, 0xa6, 0xa6, 3 << 3) |
TheChrisyd | 0:8fcb46c5fa63 | 25 | .setCRCMode(nRF2401A::NO_CRC) |
TheChrisyd | 0:8fcb46c5fa63 | 26 | .setDataRate(nRF2401A::BIT_RATE_250KBITS) |
TheChrisyd | 0:8fcb46c5fa63 | 27 | .setChannel(0x02); |
TheChrisyd | 0:8fcb46c5fa63 | 28 | |
TheChrisyd | 3:34ae527e9d41 | 29 | rf1.printControlPacket(pc); |
TheChrisyd | 3:34ae527e9d41 | 30 | rf1.flushControlPacket(); |
TheChrisyd | 3:34ae527e9d41 | 31 | |
TheChrisyd | 3:34ae527e9d41 | 32 | nRF2401A::address_t rf2_addr = {0x0, 0x0, 0x53, 0x53, 0x53}; |
TheChrisyd | 4:4a84fcba7bd4 | 33 | uint8_t msg[] = {0x00, 0x00, 0x00, 0x00, 0x00}; |
TheChrisyd | 0:8fcb46c5fa63 | 34 | |
TheChrisyd | 3:34ae527e9d41 | 35 | while(1) |
TheChrisyd | 3:34ae527e9d41 | 36 | { |
TheChrisyd | 4:4a84fcba7bd4 | 37 | #if 0 |
TheChrisyd | 4:4a84fcba7bd4 | 38 | if ( acc.getAccZ() < -0.1) |
TheChrisyd | 4:4a84fcba7bd4 | 39 | { |
TheChrisyd | 4:4a84fcba7bd4 | 40 | msg[0] |= STICK_UP_BIT; |
TheChrisyd | 4:4a84fcba7bd4 | 41 | } |
TheChrisyd | 4:4a84fcba7bd4 | 42 | else if ( acc.getAccZ() > 0.1) |
TheChrisyd | 4:4a84fcba7bd4 | 43 | { |
TheChrisyd | 4:4a84fcba7bd4 | 44 | msg[0] |= STICK_DOWN_BIT; |
TheChrisyd | 4:4a84fcba7bd4 | 45 | } |
TheChrisyd | 4:4a84fcba7bd4 | 46 | #endif |
TheChrisyd | 4:4a84fcba7bd4 | 47 | if ( acc.getAccY() < -0.1) |
TheChrisyd | 4:4a84fcba7bd4 | 48 | { |
TheChrisyd | 4:4a84fcba7bd4 | 49 | msg[0] |= STICK_LEFT_BIT; |
TheChrisyd | 4:4a84fcba7bd4 | 50 | } |
TheChrisyd | 4:4a84fcba7bd4 | 51 | else if ( acc.getAccY() > 0.1) |
TheChrisyd | 4:4a84fcba7bd4 | 52 | { |
TheChrisyd | 4:4a84fcba7bd4 | 53 | msg[0] |= STICK_RIGHT_BIT; |
TheChrisyd | 4:4a84fcba7bd4 | 54 | } |
TheChrisyd | 4:4a84fcba7bd4 | 55 | if ( ( acc.getAccX() > 0.1) || (acc.getAccY() < -0.1) ) |
TheChrisyd | 4:4a84fcba7bd4 | 56 | { |
TheChrisyd | 4:4a84fcba7bd4 | 57 | msg[1] |= 0x01; |
TheChrisyd | 4:4a84fcba7bd4 | 58 | } |
TheChrisyd | 3:34ae527e9d41 | 59 | |
TheChrisyd | 4:4a84fcba7bd4 | 60 | |
TheChrisyd | 4:4a84fcba7bd4 | 61 | msg[2] = (uint8_t) ((acc.getAccX() + 1) * 127); |
TheChrisyd | 4:4a84fcba7bd4 | 62 | msg[3] = (uint8_t) ((acc.getAccY() + 1) * 127); |
TheChrisyd | 4:4a84fcba7bd4 | 63 | msg[4] = (uint8_t) ((acc.getAccZ() + 1) * 127); |
TheChrisyd | 4:4a84fcba7bd4 | 64 | |
TheChrisyd | 4:4a84fcba7bd4 | 65 | rf1.sendMsg(rf2_addr, 3 << 3, msg, 4 << 3); |
TheChrisyd | 4:4a84fcba7bd4 | 66 | |
TheChrisyd | 4:4a84fcba7bd4 | 67 | msg[0] = 0; |
TheChrisyd | 4:4a84fcba7bd4 | 68 | msg[1] = 0; |
TheChrisyd | 4:4a84fcba7bd4 | 69 | |
TheChrisyd | 4:4a84fcba7bd4 | 70 | rled = 1.0 - abs(acc.getAccX()); |
TheChrisyd | 4:4a84fcba7bd4 | 71 | gled = 1.0 - abs(acc.getAccY()); |
TheChrisyd | 4:4a84fcba7bd4 | 72 | bled = 1.0 - abs(acc.getAccZ()); |
TheChrisyd | 4:4a84fcba7bd4 | 73 | wait(0.1); |
TheChrisyd | 0:8fcb46c5fa63 | 74 | } |
TheChrisyd | 4:4a84fcba7bd4 | 75 | |
TheChrisyd | 0:8fcb46c5fa63 | 76 | } |