Working Version of Nerf Gun 2.0 Transmitter, uses wireless nRF24L01P

Dependencies:   DebounceIn FXOS8700Q mbed nRF24L01P

Files at this revision

API Documentation at this revision

Comitter:
clarkjarvis
Date:
Mon May 12 18:50:58 2014 +0000
Commit message:
Working Version of Nerf Gun 2.0 Transmitter, uses wireless nRF24L01P

Changed in this revision

DebounceIn.lib Show annotated file Show diff for this revision Revisions of this file
FXOS8700Q.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
nRF24L01P.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r b5e995814400 DebounceIn.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebounceIn.lib	Mon May 12 18:50:58 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/AjK/code/DebounceIn/#31ae5cfb44a4
diff -r 000000000000 -r b5e995814400 FXOS8700Q.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FXOS8700Q.lib	Mon May 12 18:50:58 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/JimCarver/code/FXOS8700Q/#52116f8fb3da
diff -r 000000000000 -r b5e995814400 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 12 18:50:58 2014 +0000
@@ -0,0 +1,125 @@
+#include "mbed.h"
+#include "nRF24L01P.h"
+#include "FXOS8700Q.h"
+#include "DebounceIn.h"
+
+#define ACC_SAMPLE_SIZE 200
+#define ACC_X_GAIN 1
+#define ACC_Y_GAIN 2
+#define TRANSFER_SIZE   9
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+nRF24L01P my_nrf24l01p(PTD6, PTD7, PTD5, PTD4, PTC12, PTC18);    // mosi, miso, sck, csn, ce, irq
+FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // Proper Ports and I2C Address for K64F Freedom board
+
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+MotionSensorDataCounts acc_raw;
+int16_t acc_x, acc_y;
+DebounceIn fire_button(PTA4);
+DebounceIn cal_button(PTC6);
+
+int main() {
+
+    char txData[TRANSFER_SIZE];
+    int txDataCnt = 0;
+
+    int acc_x_array[ACC_SAMPLE_SIZE];
+    int acc_y_array[ACC_SAMPLE_SIZE];
+    int acc_sample_cnt = 0;
+
+    int acc_x_avg = 0;
+    int acc_y_avg = 0;
+    
+    int acc_x_cal = 0;
+    int acc_y_cal = 0;
+
+    pc.baud(115200);
+    
+    my_nrf24l01p.setTxAddress(0xDEADBEEF01);
+    my_nrf24l01p.powerUp();
+    myled1 = 1;
+    myled2 = 1;
+    
+    // Display the setup of the nRF24L01+ chip
+    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
+    pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
+    pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
+    pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
+    pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
+
+    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
+    my_nrf24l01p.enable();
+
+    acc.enable();
+    
+    myled3 = 0;
+    
+    for (int x=0; x<ACC_SAMPLE_SIZE; x++) {
+        acc_x_array[x]=0;
+        acc_y_array[x]=0;
+    }
+    
+    while (1) {
+        acc.getAxis(acc_raw);
+        
+        acc_x = acc_raw.x - acc_x_cal;
+        acc_y = acc_raw.y - acc_y_cal;
+
+        acc_x_array[acc_sample_cnt]=(int)(acc_x>>2);
+        acc_y_array[acc_sample_cnt]=(int)(acc_y>>2);
+
+        acc_sample_cnt++;
+        if (acc_sample_cnt>=ACC_SAMPLE_SIZE) acc_sample_cnt = 0;
+
+        acc_x_avg=0;
+        acc_y_avg=0;
+        for (int x=0; x<ACC_SAMPLE_SIZE; x++) {
+            acc_x_avg=acc_x_avg+acc_x_array[x];
+            acc_y_avg=acc_y_avg+acc_y_array[x];
+        }
+        acc_x_avg = (int)(acc_x_avg/ACC_SAMPLE_SIZE);
+        acc_y_avg = (int)(acc_y_avg/ACC_SAMPLE_SIZE);
+
+        //pc.printf("%d (%d)\t%d (%d)\n\r",acc_x_avg,acc_raw.x,acc_y_avg,acc_raw.y);
+
+        txData[0] = (acc_x_avg) & 0xff;
+        txData[1] = (acc_x_avg>>8)  & 0xff;
+        txData[2] = (acc_x_avg>>16)  & 0xff;
+        txData[3] = (acc_x_avg>>24)  & 0xff;
+    
+        txData[4] = (acc_y_avg) & 0xff;
+        txData[5] = (acc_y_avg>>8)  & 0xff;
+        txData[6] = (acc_y_avg>>16)  & 0xff;
+        txData[7] = (acc_y_avg>>24)  & 0xff;
+        
+        txData[8] = (char)(fire_button.read());
+        myled1 = fire_button.read();
+        myled3 = !myled1;
+        
+        my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, sizeof( txData ) );
+        
+        wait(0.001);
+        
+        if (cal_button.read()==0) {
+            myled2 = 0;
+            myled3 = 1;
+            
+            acc_x_avg=0;
+            acc_y_avg=0;
+            for (int x=0; x<ACC_SAMPLE_SIZE; x++) {
+                acc.getAxis(acc_raw);
+                acc_x_avg=acc_x_avg+acc_raw.x;
+                acc_y_avg=acc_y_avg+acc_raw.y;
+                wait(0.01);
+            }
+            acc_x_cal = (int)(acc_x_avg/ACC_SAMPLE_SIZE);
+            acc_y_cal = (int)(acc_y_avg/ACC_SAMPLE_SIZE);
+            myled2 = 1;
+            myled3 = 0;
+        }
+    
+    }
+}
diff -r 000000000000 -r b5e995814400 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon May 12 18:50:58 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file
diff -r 000000000000 -r b5e995814400 nRF24L01P.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF24L01P.lib	Mon May 12 18:50:58 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Owen/code/nRF24L01P/#8ae48233b4e4