IoT - Kubus / Mbed 2 deprecated Kubus

Dependencies:   mbed nRF24L01P

Committer:
pannaannap
Date:
Mon Jan 09 23:26:52 2017 +0000
Revision:
27:27cffdb2e9d3
Child:
28:80bc5ebf3ae0
all sensor boards

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pannaannap 27:27cffdb2e9d3 1 #include "sensor_board.h"
pannaannap 27:27cffdb2e9d3 2
pannaannap 27:27cffdb2e9d3 3 bool send_from_digital_sensor = false;
pannaannap 27:27cffdb2e9d3 4 bool send_from_analog_sensor = false;
pannaannap 27:27cffdb2e9d3 5
pannaannap 27:27cffdb2e9d3 6 void setSentFromDigitalSensor() {
pannaannap 27:27cffdb2e9d3 7 send_from_digital_sensor = true;
pannaannap 27:27cffdb2e9d3 8 }
pannaannap 27:27cffdb2e9d3 9
pannaannap 27:27cffdb2e9d3 10 void setSentFromAnalogSensor() {
pannaannap 27:27cffdb2e9d3 11 send_from_analog_sensor = true;
pannaannap 27:27cffdb2e9d3 12 }
pannaannap 27:27cffdb2e9d3 13
pannaannap 27:27cffdb2e9d3 14 Board::Board(unsigned long long rx_address, DigitalSensor* digital_sensor,
pannaannap 27:27cffdb2e9d3 15 AnalogSensor* analog_sensor, unsigned long long tx_address) :
pannaannap 27:27cffdb2e9d3 16 pc_(USBTX, USBRX), radio_(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2),
pannaannap 27:27cffdb2e9d3 17 analog_sensor_(analog_sensor), digital_sensor_(digital_sensor),
pannaannap 27:27cffdb2e9d3 18 analog_ticker_(Ticker()), digital_ticker_(Ticker()) {
pannaannap 27:27cffdb2e9d3 19 pc_.baud(115200);
pannaannap 27:27cffdb2e9d3 20 radio_init(&radio_, rx_address, tx_address);
pannaannap 27:27cffdb2e9d3 21 displayRadioSetup();
pannaannap 27:27cffdb2e9d3 22 analog_ticker_.attach(&setSentFromAnalogSensor, analog_sensor->SEND_INTERVAL);
pannaannap 27:27cffdb2e9d3 23 digital_ticker_.attach(&setSentFromDigitalSensor, digital_sensor->SEND_INTERVAL);
pannaannap 27:27cffdb2e9d3 24 }
pannaannap 27:27cffdb2e9d3 25
pannaannap 27:27cffdb2e9d3 26 void Board::updateSensor(Sensor* sensor, bool* should_send_data) {
pannaannap 27:27cffdb2e9d3 27 if (sensor) {
pannaannap 27:27cffdb2e9d3 28 sensor->updateState();
pannaannap 27:27cffdb2e9d3 29 if (*should_send_data) {
pannaannap 27:27cffdb2e9d3 30 Data data_to_send = sensor->dataToSend();
pannaannap 27:27cffdb2e9d3 31 if (send(data_to_send)) {
pannaannap 27:27cffdb2e9d3 32 *should_send_data = false;
pannaannap 27:27cffdb2e9d3 33 sensor->resetState();
pannaannap 27:27cffdb2e9d3 34 }
pannaannap 27:27cffdb2e9d3 35 }
pannaannap 27:27cffdb2e9d3 36 }
pannaannap 27:27cffdb2e9d3 37 }
pannaannap 27:27cffdb2e9d3 38
pannaannap 27:27cffdb2e9d3 39 void Board::run() {
pannaannap 27:27cffdb2e9d3 40 while(true) {
pannaannap 27:27cffdb2e9d3 41 updateSensor(analog_sensor_, &send_from_analog_sensor);
pannaannap 27:27cffdb2e9d3 42 updateSensor(digital_sensor_, &send_from_digital_sensor);
pannaannap 27:27cffdb2e9d3 43 }
pannaannap 27:27cffdb2e9d3 44 }
pannaannap 27:27cffdb2e9d3 45
pannaannap 27:27cffdb2e9d3 46 void Board::displayRadioSetup() {
pannaannap 27:27cffdb2e9d3 47 // Display the (default) setup of the nRF24L01+ chip
pannaannap 27:27cffdb2e9d3 48 pc_.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio_.getRfFrequency() );
pannaannap 27:27cffdb2e9d3 49 pc_.printf( "nRF24L01+ Output power : %d dBm\r\n", radio_.getRfOutputPower() );
pannaannap 27:27cffdb2e9d3 50 pc_.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio_.getAirDataRate() );
pannaannap 27:27cffdb2e9d3 51 pc_.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio_.getTxAddress() );
pannaannap 27:27cffdb2e9d3 52 pc_.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio_.getRxAddress(NRF24L01P_PIPE_P0) );
pannaannap 27:27cffdb2e9d3 53 pc_.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio_.getRxAddress(NRF24L01P_PIPE_P1) );
pannaannap 27:27cffdb2e9d3 54 }
pannaannap 27:27cffdb2e9d3 55
pannaannap 27:27cffdb2e9d3 56 bool Board::send(Data data) {
pannaannap 27:27cffdb2e9d3 57 std::string serialized_data = data.serialize();
pannaannap 27:27cffdb2e9d3 58 pc_.printf("string data '%s', len %d\r\n", serialized_data.c_str(), serialized_data.size());
pannaannap 27:27cffdb2e9d3 59
pannaannap 27:27cffdb2e9d3 60 char message[TRANSFER_SIZE];
pannaannap 27:27cffdb2e9d3 61 memset(message, 0, sizeof(message));
pannaannap 27:27cffdb2e9d3 62 memcpy(message, serialized_data.c_str(), serialized_data.length());
pannaannap 27:27cffdb2e9d3 63 int tx_bytes = radio_.write(NRF24L01P_PIPE_P0, message, TRANSFER_SIZE);
pannaannap 27:27cffdb2e9d3 64
pannaannap 27:27cffdb2e9d3 65 if (tx_bytes >= 0) {
pannaannap 27:27cffdb2e9d3 66 pc_.printf("RETR: %d\r\n", radio_.getRetrCount());
pannaannap 27:27cffdb2e9d3 67 }
pannaannap 27:27cffdb2e9d3 68
pannaannap 27:27cffdb2e9d3 69 if(tx_bytes < 0)
pannaannap 27:27cffdb2e9d3 70 pc_.printf("TX ERROR\r\n");
pannaannap 27:27cffdb2e9d3 71 return tx_bytes;
pannaannap 27:27cffdb2e9d3 72 }