Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: sensor_board.cpp
- Revision:
- 27:27cffdb2e9d3
- Child:
- 28:80bc5ebf3ae0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sensor_board.cpp Mon Jan 09 23:26:52 2017 +0000
@@ -0,0 +1,72 @@
+#include "sensor_board.h"
+
+bool send_from_digital_sensor = false;
+bool send_from_analog_sensor = false;
+
+void setSentFromDigitalSensor() {
+ send_from_digital_sensor = true;
+}
+
+void setSentFromAnalogSensor() {
+ send_from_analog_sensor = true;
+}
+
+Board::Board(unsigned long long rx_address, DigitalSensor* digital_sensor,
+ AnalogSensor* analog_sensor, unsigned long long tx_address) :
+ pc_(USBTX, USBRX), radio_(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2),
+ analog_sensor_(analog_sensor), digital_sensor_(digital_sensor),
+ analog_ticker_(Ticker()), digital_ticker_(Ticker()) {
+ pc_.baud(115200);
+ radio_init(&radio_, rx_address, tx_address);
+ displayRadioSetup();
+ analog_ticker_.attach(&setSentFromAnalogSensor, analog_sensor->SEND_INTERVAL);
+ digital_ticker_.attach(&setSentFromDigitalSensor, digital_sensor->SEND_INTERVAL);
+}
+
+void Board::updateSensor(Sensor* sensor, bool* should_send_data) {
+ if (sensor) {
+ sensor->updateState();
+ if (*should_send_data) {
+ Data data_to_send = sensor->dataToSend();
+ if (send(data_to_send)) {
+ *should_send_data = false;
+ sensor->resetState();
+ }
+ }
+ }
+}
+
+void Board::run() {
+ while(true) {
+ updateSensor(analog_sensor_, &send_from_analog_sensor);
+ updateSensor(digital_sensor_, &send_from_digital_sensor);
+ }
+}
+
+void Board::displayRadioSetup() {
+ // Display the (default) setup of the nRF24L01+ chip
+ pc_.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio_.getRfFrequency() );
+ pc_.printf( "nRF24L01+ Output power : %d dBm\r\n", radio_.getRfOutputPower() );
+ pc_.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio_.getAirDataRate() );
+ pc_.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio_.getTxAddress() );
+ pc_.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio_.getRxAddress(NRF24L01P_PIPE_P0) );
+ pc_.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio_.getRxAddress(NRF24L01P_PIPE_P1) );
+}
+
+bool Board::send(Data data) {
+ std::string serialized_data = data.serialize();
+ pc_.printf("string data '%s', len %d\r\n", serialized_data.c_str(), serialized_data.size());
+
+ char message[TRANSFER_SIZE];
+ memset(message, 0, sizeof(message));
+ memcpy(message, serialized_data.c_str(), serialized_data.length());
+ int tx_bytes = radio_.write(NRF24L01P_PIPE_P0, message, TRANSFER_SIZE);
+
+ if (tx_bytes >= 0) {
+ pc_.printf("RETR: %d\r\n", radio_.getRetrCount());
+ }
+
+ if(tx_bytes < 0)
+ pc_.printf("TX ERROR\r\n");
+ return tx_bytes;
+}
\ No newline at end of file