Sensor Box version 090715 17:06

Dependencies:   MMA8451Q mbed nRF24L01P

Committer:
eleim
Date:
Fri Jul 31 15:53:25 2015 +0000
Revision:
3:391141bdd69a
Parent:
2:3779f28a6bf0
Trying to transmit data from mbed to Spark through nRF;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eleim 0:84ecd53a6958 1 #include "mbed.h"
eleim 0:84ecd53a6958 2 #include "nRF24L01P.h"
eleim 0:84ecd53a6958 3 #include "MMA8451Q.h"
eleim 1:00312af3c20e 4 #include <list>
eleim 0:84ecd53a6958 5 #include <math.h>
eleim 0:84ecd53a6958 6 #define MMA8451_I2C_ADDRESS (0x1d<<1)
eleim 3:391141bdd69a 7 #define TRANSFER_SIZE 8
eleim 0:84ecd53a6958 8
eleim 0:84ecd53a6958 9 Serial pc(USBTX, USBRX); // tx, rx
eleim 0:84ecd53a6958 10
eleim 0:84ecd53a6958 11 PinName const SDA = PTE25;
eleim 0:84ecd53a6958 12 PinName const SCL = PTE24;
eleim 0:84ecd53a6958 13
eleim 3:391141bdd69a 14 //int foo=0;
eleim 3:391141bdd69a 15 //float x;
eleim 3:391141bdd69a 16 //float y;
eleim 3:391141bdd69a 17 //float z;
eleim 3:391141bdd69a 18
eleim 0:84ecd53a6958 19 AnalogIn light_ain(A0);
eleim 0:84ecd53a6958 20 AnalogIn temp_ain(A1);
eleim 1:00312af3c20e 21 AnalogIn pir_ain(A2);
eleim 0:84ecd53a6958 22
eleim 0:84ecd53a6958 23 nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTE1, PTE0, PTD0); // mosi, miso, sck, csn, ce, irq
eleim 0:84ecd53a6958 24
eleim 0:84ecd53a6958 25 DigitalOut myled1(LED1);
eleim 0:84ecd53a6958 26 DigitalOut myled2(LED2);
eleim 0:84ecd53a6958 27
eleim 1:00312af3c20e 28 float light;
eleim 1:00312af3c20e 29 float temp;
eleim 1:00312af3c20e 30 float pir;
eleim 0:84ecd53a6958 31
eleim 1:00312af3c20e 32 std::list<float> light_data;
eleim 1:00312af3c20e 33 std::list<float> temp_data;
eleim 1:00312af3c20e 34 std::list<float> pir_data;
eleim 0:84ecd53a6958 35
eleim 3:391141bdd69a 36 float light_data2[20];
eleim 3:391141bdd69a 37 float temp_data2[20];
eleim 3:391141bdd69a 38 float pir_data2[20];
eleim 3:391141bdd69a 39 short array_ind = 0;
eleim 1:00312af3c20e 40
eleim 1:00312af3c20e 41 void getdata() {
eleim 3:391141bdd69a 42
eleim 3:391141bdd69a 43 light = light_ain.read();
eleim 3:391141bdd69a 44 temp = temp_ain.read();
eleim 3:391141bdd69a 45 pir = pir_ain.read();
eleim 3:391141bdd69a 46
eleim 3:391141bdd69a 47 light_data.push_back(light);
eleim 3:391141bdd69a 48 temp_data.push_back(temp);
eleim 3:391141bdd69a 49 pir_data.push_back(pir);
eleim 3:391141bdd69a 50
eleim 3:391141bdd69a 51 light_data.pop_front();
eleim 3:391141bdd69a 52 temp_data.pop_front();
eleim 3:391141bdd69a 53 pir_data.pop_front();
eleim 3:391141bdd69a 54
eleim 3:391141bdd69a 55 printf("Light reading: %f\n\r", light);
eleim 3:391141bdd69a 56 printf("Light list element : %f\n\r", light_data.back());
eleim 3:391141bdd69a 57
eleim 3:391141bdd69a 58 printf("Temperature reading: %f\n\r", temp);
eleim 3:391141bdd69a 59 printf("Temperature list element : %f\n\r", temp_data.back());
eleim 3:391141bdd69a 60
eleim 3:391141bdd69a 61 printf("Temperature reading: %f\n\r", light);
eleim 3:391141bdd69a 62 printf("Pir reading: %f\n\r", pir_data.back());
eleim 3:391141bdd69a 63
eleim 3:391141bdd69a 64 }
eleim 3:391141bdd69a 65
eleim 3:391141bdd69a 66 void getdata2() {
eleim 0:84ecd53a6958 67 light = light_ain.read();
eleim 0:84ecd53a6958 68 temp = temp_ain.read();
eleim 0:84ecd53a6958 69 pir = pir_ain.read();
eleim 1:00312af3c20e 70
eleim 3:391141bdd69a 71 light_data2[array_ind] = light;
eleim 3:391141bdd69a 72 temp_data2[array_ind] = temp;
eleim 3:391141bdd69a 73 pir_data2[array_ind] = pir;
eleim 2:3779f28a6bf0 74
eleim 3:391141bdd69a 75 array_ind = (array_ind + 1) % 20;
eleim 0:84ecd53a6958 76 }
eleim 0:84ecd53a6958 77
eleim 0:84ecd53a6958 78
eleim 3:391141bdd69a 79 int main(){
eleim 3:391141bdd69a 80 int txDataCnt=0 ;
eleim 3:391141bdd69a 81 int rxDataCnt=0 ;
eleim 3:391141bdd69a 82 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
eleim 3:391141bdd69a 83 my_nrf24l01p.powerUp();
eleim 3:391141bdd69a 84 my_nrf24l01p.setRfFrequency (2501);
eleim 3:391141bdd69a 85 my_nrf24l01p.setTransferSize(8);
eleim 3:391141bdd69a 86 my_nrf24l01p.setCrcWidth(8);
eleim 3:391141bdd69a 87 my_nrf24l01p.enableAutoAcknowledge(NRF24L01P_PIPE_P0);
eleim 3:391141bdd69a 88 //my_nrf24l01p.setRxAddress(0x00F0F0F0F0);
eleim 3:391141bdd69a 89 my_nrf24l01p.setRxAddress(0xF0F0F0F0E1ULL);
eleim 3:391141bdd69a 90 my_nrf24l01p.setTxAddress(0x00F0F0F0F0);
eleim 3:391141bdd69a 91 //Display the (default) setup of the nRF24L01+ chip
eleim 3:391141bdd69a 92 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
eleim 3:391141bdd69a 93 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
eleim 3:391141bdd69a 94 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
eleim 3:391141bdd69a 95 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
eleim 3:391141bdd69a 96 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
eleim 3:391141bdd69a 97 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
eleim 3:391141bdd69a 98 my_nrf24l01p.setTransmitMode();
eleim 3:391141bdd69a 99 my_nrf24l01p.enable();
eleim 3:391141bdd69a 100 pc.printf( "Setup complete, Starting While loop\r\n");
eleim 3:391141bdd69a 101
eleim 3:391141bdd69a 102 //printf("MMA8451 ID: %d\n", acc.getWhoAmI());
eleim 3:391141bdd69a 103
eleim 3:391141bdd69a 104
eleim 3:391141bdd69a 105 while(1){
eleim 3:391141bdd69a 106 getdata2();
eleim 3:391141bdd69a 107 //txDataCnt = sprintf(txData, " %1.4f %1.4f %1.4f %1.4f\n", light_data.back(), light_data.back(), temp_data.back(), pir_data.back());
eleim 3:391141bdd69a 108 //txDataCnt = sprintf(txData," %1.3f %1.3f %1.3f\n", light_data2[19], temp_data2[19], pir_data2[19]);
eleim 3:391141bdd69a 109 // Display the (default) setup of the nRF24L01+ chip
eleim 3:391141bdd69a 110 //pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
eleim 3:391141bdd69a 111 //pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
eleim 3:391141bdd69a 112 //pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
eleim 3:391141bdd69a 113 //pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
eleim 3:391141bdd69a 114 //pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
eleim 3:391141bdd69a 115 //txDataCnt= (txDataCnt+1);
eleim 3:391141bdd69a 116
eleim 3:391141bdd69a 117 //txDataCnt = sprintf(txData,"%7.3f\n", light_data2[19]);
eleim 3:391141bdd69a 118 printf(txData,sizeof(&txDataCnt));
eleim 3:391141bdd69a 119 my_nrf24l01p.write(NRF24L01P_PIPE_P0, "abcdefgh", 8*sizeof(char));
eleim 3:391141bdd69a 120 wait(0.5);
eleim 3:391141bdd69a 121 printf("Talking...\r\n");
eleim 3:391141bdd69a 122
eleim 3:391141bdd69a 123 if ( my_nrf24l01p.readable() ) {
eleim 3:391141bdd69a 124 rxDataCnt = my_nrf24l01p.read(NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
eleim 3:391141bdd69a 125 unsigned long *time_ptr = (unsigned long*)rxData; // pointer manipulation split out to make working obvious
eleim 3:391141bdd69a 126 unsigned long time = *time_ptr;
eleim 3:391141bdd69a 127 pc.printf("Received %d bytes\n\r", rxDataCnt);
eleim 3:391141bdd69a 128 pc.printf("Value = %d\n\r", time);
eleim 3:391141bdd69a 129
eleim 3:391141bdd69a 130 txDataCnt=0;
eleim 3:391141bdd69a 131 myled1 = !myled1;
eleim 3:391141bdd69a 132 wait(0.5);
eleim 3:391141bdd69a 133 }
eleim 0:84ecd53a6958 134
eleim 3:391141bdd69a 135 }}
eleim 0:84ecd53a6958 136
eleim 0:84ecd53a6958 137