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.
sensor_main.cpp@11:4c3876be77b1, 2017-01-05 (annotated)
- 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?
| User | Revision | Line number | New 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 |