Sensor CDT / Mbed 2 deprecated SensorBox

Dependencies:   MMA8451Q mbed nRF24L01P

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "nRF24L01P.h"
00003 #include "MMA8451Q.h"
00004 #include <list>
00005 #include <math.h>
00006 #define MMA8451_I2C_ADDRESS (0x1d<<1)
00007 #define TRANSFER_SIZE   8
00008 
00009 Serial pc(USBTX, USBRX); // tx, rx
00010 
00011 PinName const SDA = PTE25;
00012 PinName const SCL = PTE24;
00013 
00014 //int foo=0;
00015 //float x;
00016 //float y;
00017 //float z;
00018 
00019 AnalogIn light_ain(A0);
00020 AnalogIn temp_ain(A1);
00021 AnalogIn pir_ain(A2);
00022 
00023 nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTE1, PTE0, PTD0);    // mosi, miso, sck, csn, ce, irq
00024 
00025 DigitalOut myled1(LED1);
00026 DigitalOut myled2(LED2);
00027 
00028 float light;
00029 float temp;
00030 float pir;
00031 
00032 std::list<float> light_data;
00033 std::list<float> temp_data;
00034 std::list<float> pir_data;
00035 
00036 float light_data2[20];
00037 float temp_data2[20];
00038 float pir_data2[20];
00039 short array_ind = 0;
00040 
00041 void getdata() {
00042         
00043         light = light_ain.read();
00044         temp = temp_ain.read();
00045         pir = pir_ain.read();
00046     
00047         light_data.push_back(light);
00048         temp_data.push_back(temp);
00049         pir_data.push_back(pir);
00050 
00051         light_data.pop_front();
00052         temp_data.pop_front();
00053         pir_data.pop_front();
00054     
00055         printf("Light reading: %f\n\r", light);  
00056         printf("Light list element : %f\n\r", light_data.back()); 
00057     
00058         printf("Temperature reading: %f\n\r", temp);  
00059         printf("Temperature list element : %f\n\r", temp_data.back()); 
00060     
00061         printf("Temperature reading: %f\n\r", light);
00062         printf("Pir reading: %f\n\r", pir_data.back());   
00063  
00064 }
00065 
00066 void getdata2() {
00067     light = light_ain.read();
00068     temp = temp_ain.read();
00069     pir = pir_ain.read();
00070     
00071     light_data2[array_ind] = light;
00072     temp_data2[array_ind] = temp;
00073     pir_data2[array_ind] = pir;
00074     
00075     array_ind = (array_ind + 1) % 20;
00076 }
00077 
00078 
00079 int main(){
00080         int txDataCnt=0 ;
00081         int rxDataCnt=0 ;
00082         char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
00083         my_nrf24l01p.powerUp();
00084         my_nrf24l01p.setRfFrequency (2501);
00085         my_nrf24l01p.setTransferSize(8);
00086         my_nrf24l01p.setCrcWidth(8);
00087         my_nrf24l01p.enableAutoAcknowledge(NRF24L01P_PIPE_P0);
00088         //my_nrf24l01p.setRxAddress(0x00F0F0F0F0);
00089         my_nrf24l01p.setRxAddress(0xF0F0F0F0E1ULL);
00090         my_nrf24l01p.setTxAddress(0x00F0F0F0F0);
00091         //Display the (default) setup of the nRF24L01+ chip
00092         pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
00093         pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
00094         pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
00095         pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
00096         pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
00097         pc.printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
00098         my_nrf24l01p.setTransmitMode();
00099         my_nrf24l01p.enable();
00100         pc.printf( "Setup complete, Starting While loop\r\n");
00101         
00102         //printf("MMA8451 ID: %d\n", acc.getWhoAmI());
00103         
00104     
00105 while(1){
00106         getdata2();
00107         //txDataCnt =  sprintf(txData, "  %1.4f   %1.4f   %1.4f  %1.4f\n", light_data.back(), light_data.back(), temp_data.back(), pir_data.back());
00108         //txDataCnt =  sprintf(txData,"  %1.3f   %1.3f   %1.3f\n", light_data2[19], temp_data2[19], pir_data2[19]);
00109         // Display the (default) setup of the nRF24L01+ chip
00110         //pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
00111         //pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
00112         //pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
00113         //pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
00114         //pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
00115         //txDataCnt= (txDataCnt+1);
00116         
00117         //txDataCnt =  sprintf(txData,"%7.3f\n", light_data2[19]);
00118         printf(txData,sizeof(&txDataCnt));
00119         my_nrf24l01p.write(NRF24L01P_PIPE_P0, "abcdefgh", 8*sizeof(char));
00120         wait(0.5);
00121         printf("Talking...\r\n");
00122         
00123         if ( my_nrf24l01p.readable() ) {
00124                 rxDataCnt = my_nrf24l01p.read(NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
00125                 unsigned long *time_ptr = (unsigned long*)rxData; // pointer manipulation split out to make working obvious
00126                 unsigned long time = *time_ptr;                   
00127                 pc.printf("Received %d bytes\n\r", rxDataCnt);
00128                 pc.printf("Value = %d\n\r", time);
00129                
00130                 txDataCnt=0;
00131                 myled1 = !myled1;
00132                 wait(0.5);
00133         }
00134 
00135 }}
00136 
00137