IoT - Kubus / Mbed 2 deprecated Kubus

Dependencies:   mbed nRF24L01P

Committer:
pannaannap
Date:
Thu Jan 05 14:11:31 2017 +0000
Revision:
11:4c3876be77b1
Parent:
7:e51d0fbb1a25
memcpy fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pannaannap 7:e51d0fbb1a25 1 #include "sensor_main.h"
pannaannap 7:e51d0fbb1a25 2
pannaannap 7:e51d0fbb1a25 3 const double SEND_INTERVAL = 5.0;
pannaannap 7:e51d0fbb1a25 4
pannaannap 7:e51d0fbb1a25 5 Serial pc(USBTX, USBRX); // tx, rx
pannaannap 7:e51d0fbb1a25 6 nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2); // mosi, miso, sck, csn, ce, irq
pannaannap 7:e51d0fbb1a25 7 DigitalIn sensor(PA_10);
pannaannap 7:e51d0fbb1a25 8
pannaannap 7:e51d0fbb1a25 9 Ticker sender;
pannaannap 7:e51d0fbb1a25 10 bool send_acc_results = false;
pannaannap 7:e51d0fbb1a25 11
pannaannap 7:e51d0fbb1a25 12 void set_send() {
pannaannap 7:e51d0fbb1a25 13 send_acc_results = true;
pannaannap 7:e51d0fbb1a25 14 }
pannaannap 7:e51d0fbb1a25 15
pannaannap 7:e51d0fbb1a25 16 void init(unsigned long long rx_address, unsigned long long tx_address) {
pannaannap 7:e51d0fbb1a25 17 sensor.mode(PullDown);
pannaannap 7:e51d0fbb1a25 18 pc.baud(115200);
pannaannap 7:e51d0fbb1a25 19 sender.attach(&set_send, SEND_INTERVAL);
pannaannap 7:e51d0fbb1a25 20 radio_init(&radio, rx_address, tx_address);
pannaannap 7:e51d0fbb1a25 21 }
pannaannap 7:e51d0fbb1a25 22
pannaannap 7:e51d0fbb1a25 23 int sensor_loop(SensorDescription description) {
pannaannap 7:e51d0fbb1a25 24 const unsigned long long RX_ADDRESS = description.rx_address;
pannaannap 7:e51d0fbb1a25 25 const unsigned long long TX_ADDRESS = description.tx_address;
pannaannap 7:e51d0fbb1a25 26 const uint8_t SENSOR_ID = description.sensor_id;
pannaannap 7:e51d0fbb1a25 27
pannaannap 7:e51d0fbb1a25 28 init(RX_ADDRESS, TX_ADDRESS);
pannaannap 7:e51d0fbb1a25 29
pannaannap 7:e51d0fbb1a25 30 // Display the (default) setup of the nRF24L01+ chip
pannaannap 7:e51d0fbb1a25 31 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() );
pannaannap 7:e51d0fbb1a25 32 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() );
pannaannap 7:e51d0fbb1a25 33 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() );
pannaannap 7:e51d0fbb1a25 34 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() );
pannaannap 7:e51d0fbb1a25 35 pc.printf( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) );
pannaannap 7:e51d0fbb1a25 36 pc.printf( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) );
pannaannap 7:e51d0fbb1a25 37
pannaannap 7:e51d0fbb1a25 38 uint8_t count_changes;
pannaannap 7:e51d0fbb1a25 39 int last_state;
pannaannap 7:e51d0fbb1a25 40
pannaannap 7:e51d0fbb1a25 41 while (1) {
pannaannap 7:e51d0fbb1a25 42 int state;
pannaannap 7:e51d0fbb1a25 43 if (sensor.read()) {
pannaannap 7:e51d0fbb1a25 44 state = 1;
pannaannap 7:e51d0fbb1a25 45 } else {
pannaannap 7:e51d0fbb1a25 46 state = 0;
pannaannap 7:e51d0fbb1a25 47 }
pannaannap 7:e51d0fbb1a25 48
pannaannap 7:e51d0fbb1a25 49 if (last_state != state) {
pannaannap 7:e51d0fbb1a25 50 last_state = state;
pannaannap 7:e51d0fbb1a25 51 count_changes++;
pannaannap 7:e51d0fbb1a25 52 }
pannaannap 7:e51d0fbb1a25 53
pannaannap 7:e51d0fbb1a25 54 if (send_acc_results) {
pannaannap 7:e51d0fbb1a25 55 Data data(SENSOR_ID, count_changes);
pannaannap 7:e51d0fbb1a25 56 std::string serialized_data = data.serialize();
pannaannap 7:e51d0fbb1a25 57 pc.printf("string data '%s', len %d\r\n", serialized_data.c_str(), serialized_data.size());
pannaannap 7:e51d0fbb1a25 58
pannaannap 7:e51d0fbb1a25 59 char message[TRANSFER_SIZE];
pannaannap 11:4c3876be77b1 60 memset(message, 0, sizeof(message));
pannaannap 11:4c3876be77b1 61 memcpy(message, serialized_data.c_str(), serialized_data.length());
pannaannap 7:e51d0fbb1a25 62 int tx_bytes = radio.write(NRF24L01P_PIPE_P0, message, TRANSFER_SIZE);
pannaannap 7:e51d0fbb1a25 63
pannaannap 7:e51d0fbb1a25 64 if (tx_bytes > 0) {
pannaannap 7:e51d0fbb1a25 65 pc.printf("Counter: %d\r\n", count_changes);
pannaannap 7:e51d0fbb1a25 66 pc.printf("RETR: %d\r\n", radio.getRetrCount());
pannaannap 7:e51d0fbb1a25 67 count_changes = 0;
pannaannap 7:e51d0fbb1a25 68 send_acc_results = false;
pannaannap 7:e51d0fbb1a25 69 }
pannaannap 7:e51d0fbb1a25 70 if(tx_bytes < 0)
pannaannap 7:e51d0fbb1a25 71 pc.printf("TX ERROR\r\n");
pannaannap 7:e51d0fbb1a25 72 }
pannaannap 7:e51d0fbb1a25 73
pannaannap 7:e51d0fbb1a25 74 }
pannaannap 7:e51d0fbb1a25 75 }
pannaannap 7:e51d0fbb1a25 76