Sensor Box version 090715 17:06

Dependencies:   MMA8451Q mbed nRF24L01P

main.cpp

Committer:
eleim
Date:
2015-07-31
Revision:
3:391141bdd69a
Parent:
2:3779f28a6bf0

File content as of revision 3:391141bdd69a:

#include "mbed.h"
#include "nRF24L01P.h"
#include "MMA8451Q.h"
#include <list>
#include <math.h>
#define MMA8451_I2C_ADDRESS (0x1d<<1)
#define TRANSFER_SIZE   8

Serial pc(USBTX, USBRX); // tx, rx

PinName const SDA = PTE25;
PinName const SCL = PTE24;

//int foo=0;
//float x;
//float y;
//float z;

AnalogIn light_ain(A0);
AnalogIn temp_ain(A1);
AnalogIn pir_ain(A2);

nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTE1, PTE0, PTD0);    // mosi, miso, sck, csn, ce, irq

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);

float light;
float temp;
float pir;

std::list<float> light_data;
std::list<float> temp_data;
std::list<float> pir_data;

float light_data2[20];
float temp_data2[20];
float pir_data2[20];
short array_ind = 0;

void getdata() {
        
        light = light_ain.read();
        temp = temp_ain.read();
        pir = pir_ain.read();
    
        light_data.push_back(light);
        temp_data.push_back(temp);
        pir_data.push_back(pir);

        light_data.pop_front();
        temp_data.pop_front();
        pir_data.pop_front();
    
        printf("Light reading: %f\n\r", light);  
        printf("Light list element : %f\n\r", light_data.back()); 
    
        printf("Temperature reading: %f\n\r", temp);  
        printf("Temperature list element : %f\n\r", temp_data.back()); 
    
        printf("Temperature reading: %f\n\r", light);
        printf("Pir reading: %f\n\r", pir_data.back());   
 
}

void getdata2() {
    light = light_ain.read();
    temp = temp_ain.read();
    pir = pir_ain.read();
    
    light_data2[array_ind] = light;
    temp_data2[array_ind] = temp;
    pir_data2[array_ind] = pir;
    
    array_ind = (array_ind + 1) % 20;
}


int main(){
        int txDataCnt=0 ;
        int rxDataCnt=0 ;
        char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
        my_nrf24l01p.powerUp();
        my_nrf24l01p.setRfFrequency (2501);
        my_nrf24l01p.setTransferSize(8);
        my_nrf24l01p.setCrcWidth(8);
        my_nrf24l01p.enableAutoAcknowledge(NRF24L01P_PIPE_P0);
        //my_nrf24l01p.setRxAddress(0x00F0F0F0F0);
        my_nrf24l01p.setRxAddress(0xF0F0F0F0E1ULL);
        my_nrf24l01p.setTxAddress(0x00F0F0F0F0);
        //Display the (default) 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() );
        pc.printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
        my_nrf24l01p.setTransmitMode();
        my_nrf24l01p.enable();
        pc.printf( "Setup complete, Starting While loop\r\n");
        
        //printf("MMA8451 ID: %d\n", acc.getWhoAmI());
        
    
while(1){
        getdata2();
        //txDataCnt =  sprintf(txData, "  %1.4f   %1.4f   %1.4f  %1.4f\n", light_data.back(), light_data.back(), temp_data.back(), pir_data.back());
        //txDataCnt =  sprintf(txData,"  %1.3f   %1.3f   %1.3f\n", light_data2[19], temp_data2[19], pir_data2[19]);
        // Display the (default) 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() );
        //txDataCnt= (txDataCnt+1);
        
        //txDataCnt =  sprintf(txData,"%7.3f\n", light_data2[19]);
        printf(txData,sizeof(&txDataCnt));
        my_nrf24l01p.write(NRF24L01P_PIPE_P0, "abcdefgh", 8*sizeof(char));
        wait(0.5);
        printf("Talking...\r\n");
        
        if ( my_nrf24l01p.readable() ) {
                rxDataCnt = my_nrf24l01p.read(NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
                unsigned long *time_ptr = (unsigned long*)rxData; // pointer manipulation split out to make working obvious
                unsigned long time = *time_ptr;                   
                pc.printf("Received %d bytes\n\r", rxDataCnt);
                pc.printf("Value = %d\n\r", time);
               
                txDataCnt=0;
                myled1 = !myled1;
                wait(0.5);
        }

}}