This is example code that can get you started with building your own IR vision robot that communicates over LoRa

Dependencies:   Adafruit-MotorShield Adafruit-PWM-Servo-Driver Adafruit_GFX BufferedSerial MAX17055_EZconfig NEO-6m-GPS SX1276GenericLib USBDeviceHT max32630fthr max77650_charger_sample

Fork of MAX326xxFTHR_LoRa_Example_test by Devin Alexander

Committer:
dev_alexander
Date:
Thu Jul 19 21:13:19 2018 +0000
Revision:
25:1a031add188a
Parent:
24:e8d03912f303
Child:
26:69aba05f010f
Got messages of different sizes to send to each other.  Changed maximum number of bytes per payload to a max value of 255 for more sensor data to be added. Also began debugging the grid eye sensor data acquisition issue.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dev_alexander 23:f74a50977593 1 /** Description:
dev_alexander 23:f74a50977593 2 * This File is responsible for defining the buffers that will be used in
dev_alexander 23:f74a50977593 3 * various areas of the program. The buffers that are defined here will be
dev_alexander 23:f74a50977593 4 * refferenced in the main.cpp and will be filled with data in one of two ways:
dev_alexander 23:f74a50977593 5 *
dev_alexander 23:f74a50977593 6 * 1. The buffers will be filled with data upon receiving a successful payload
dev_alexander 23:f74a50977593 7 * transmission over LoRa. In GenericPingPong.cpp, the function OnRxDone()
dev_alexander 23:f74a50977593 8 * will call the function fillGlobalBufsWithPayload() that is responsible for
dev_alexander 23:f74a50977593 9 * filling the appropriate buffers with the payload data that was received
dev_alexander 23:f74a50977593 10 * by either the master or slave device by the other device that sent it.
dev_alexander 23:f74a50977593 11 *
dev_alexander 23:f74a50977593 12 * 2. The buffers will be used to fill up a payload buffer that will be sent
dev_alexander 23:f74a50977593 13 * over LoRa by either the master or slave device to the receiving device.
dev_alexander 23:f74a50977593 14 * The function fillPayloadWithGlobalBufs() will use the global buffers that
dev_alexander 23:f74a50977593 15 * are filled with data for various sensors in the main.cpp to construct a
dev_alexander 23:f74a50977593 16 * payload to deliver to the other device when SX1276PingPong() is called
dev_alexander 23:f74a50977593 17 * in file GenericPingPong.cpp.
dev_alexander 23:f74a50977593 18 *
dev_alexander 23:f74a50977593 19 */
dev_alexander 23:f74a50977593 20
dev_alexander 23:f74a50977593 21 #ifndef __GLOBAL_BUFFERS_H__
dev_alexander 25:1a031add188a 22 #define __GLOBAL_BUFFERS_H__\
dev_alexander 25:1a031add188a 23
dev_alexander 25:1a031add188a 24 #include "mbed.h"
dev_alexander 25:1a031add188a 25 #include "GenericPingPong.h"
dev_alexander 25:1a031add188a 26
dev_alexander 23:f74a50977593 27
dev_alexander 23:f74a50977593 28 /***************************************************************************
dev_alexander 24:e8d03912f303 29 * Indexes for which byte specific data begins at in the payload buffer
dev_alexander 23:f74a50977593 30 **************************************************************************/
dev_alexander 25:1a031add188a 31 /* size of ID data that defines what the signature of the device is */
dev_alexander 25:1a031add188a 32 const uint8_t size_signature = 8;
dev_alexander 24:e8d03912f303 33
dev_alexander 24:e8d03912f303 34 /* size of data in bytes that is acquired by the master device */
dev_alexander 25:1a031add188a 35 const uint8_t size_of_ble = 2;
dev_alexander 25:1a031add188a 36
dev_alexander 24:e8d03912f303 37 /* size of data in bytes that is acquired by the slave device */
dev_alexander 24:e8d03912f303 38 const uint8_t size_of_grid_eye = 128;
dev_alexander 24:e8d03912f303 39 const uint8_t size_of_gps = 20;
dev_alexander 24:e8d03912f303 40 const uint8_t size_of_MAX17055 = 5;
dev_alexander 24:e8d03912f303 41 const uint8_t size_of_MAX77650 = 5;
dev_alexander 24:e8d03912f303 42
dev_alexander 25:1a031add188a 43 /* These are the sizes of each payload in bytes. Since there is different amount
dev_alexander 25:1a031add188a 44 * of data being sent in each direction, we need to declare the total size of
dev_alexander 25:1a031add188a 45 * the payload so we can instatiate the correct buffer sizes to store data that
dev_alexander 25:1a031add188a 46 * is to be delivered and for data that is received.
dev_alexander 25:1a031add188a 47 */
dev_alexander 25:1a031add188a 48
dev_alexander 25:1a031add188a 49 const uint16_t PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE = size_signature + size_of_ble;
dev_alexander 25:1a031add188a 50 const uint16_t PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER = size_signature + size_of_grid_eye + size_of_gps + size_of_MAX17055 + size_of_MAX77650;
dev_alexander 24:e8d03912f303 51
dev_alexander 23:f74a50977593 52 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 24:e8d03912f303 53 /* These are indexs used to create the payload buffer to send to Slave */
dev_alexander 25:1a031add188a 54 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 55 const uint8_t tx_idx_ble = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 24:e8d03912f303 56
dev_alexander 25:1a031add188a 57 /* These are indexs used to deconstruct received payload buffer sent by the Slave */
dev_alexander 25:1a031add188a 58 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 59 const uint8_t rx_idx_grid_eye = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 25:1a031add188a 60 const uint8_t rx_idx_gps = rx_idx_grid_eye + size_of_grid_eye; // 3rd buf in rx payload
dev_alexander 25:1a031add188a 61 const uint8_t rx_idx_MAX17055 = rx_idx_gps + size_of_gps; // 4th buf in rx payload
dev_alexander 25:1a031add188a 62 const uint8_t rx_idx_MAX77650 = rx_idx_MAX17055 + size_of_MAX17055; // 5th buf in rx payload
dev_alexander 24:e8d03912f303 63
dev_alexander 23:f74a50977593 64 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 24:e8d03912f303 65 /* These are indexs used to create the payload buffer to send to Master */
dev_alexander 25:1a031add188a 66 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 67 const uint8_t tx_idx_grid_eye = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 25:1a031add188a 68 const uint8_t tx_idx_gps = tx_idx_grid_eye + size_of_grid_eye; // 3rd buf in tx payload
dev_alexander 25:1a031add188a 69 const uint8_t tx_idx_MAX17055 = tx_idx_gps + size_of_gps; // 4th buf in tx payload
dev_alexander 25:1a031add188a 70 const uint8_t tx_idx_MAX77650 = tx_idx_MAX17055 + size_of_MAX17055; // 5th buf in tx payload
dev_alexander 24:e8d03912f303 71
dev_alexander 24:e8d03912f303 72 /* These are indexs used to deconstruct received payload buffer sent by the Master */
dev_alexander 25:1a031add188a 73 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 74 const uint8_t rx_idx_ble = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 23:f74a50977593 75 #endif
dev_alexander 23:f74a50977593 76
dev_alexander 23:f74a50977593 77
dev_alexander 24:e8d03912f303 78 /***************************************************************************
dev_alexander 25:1a031add188a 79 * BLE Data Buffers
dev_alexander 25:1a031add188a 80 **************************************************************************/
dev_alexander 25:1a031add188a 81 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 25:1a031add188a 82 static char curr_ble_data_to_slave[size_of_ble];
dev_alexander 25:1a031add188a 83 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 25:1a031add188a 84 static char curr_ble_data_from_master[size_of_ble];
dev_alexander 25:1a031add188a 85 static char prev_ble_data_from_master[size_of_ble];
dev_alexander 25:1a031add188a 86 #endif
dev_alexander 25:1a031add188a 87
dev_alexander 25:1a031add188a 88 /***************************************************************************
dev_alexander 24:e8d03912f303 89 * Grid Eye Sensor Data Buffers
dev_alexander 24:e8d03912f303 90 **************************************************************************/
dev_alexander 24:e8d03912f303 91 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 25:1a031add188a 92 static char curr_raw_frame_data_from_slave[size_of_grid_eye];
dev_alexander 25:1a031add188a 93 static char prev_raw_frame_data_from_slave[size_of_grid_eye];
dev_alexander 24:e8d03912f303 94 static int16_t conv_frame_data_from_slave[64];
dev_alexander 24:e8d03912f303 95 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 25:1a031add188a 96 static char curr_raw_frame_data_to_master[size_of_grid_eye];
dev_alexander 25:1a031add188a 97 static char prev_raw_frame_data_to_master[size_of_grid_eye];
dev_alexander 25:1a031add188a 98 static int16_t conv_frame_data_to_master[64];
dev_alexander 24:e8d03912f303 99 #endif
dev_alexander 24:e8d03912f303 100
dev_alexander 24:e8d03912f303 101 /***************************************************************************
dev_alexander 25:1a031add188a 102 * GPS Data Buffers
dev_alexander 25:1a031add188a 103 **************************************************************************/
dev_alexander 25:1a031add188a 104 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 25:1a031add188a 105 static char curr_gps_data_from_slave[size_of_gps];
dev_alexander 25:1a031add188a 106 static char prev_gps_data_from_slave[size_of_gps];
dev_alexander 25:1a031add188a 107 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 25:1a031add188a 108 static char curr_gps_data_to_master[size_of_gps];
dev_alexander 25:1a031add188a 109 #endif
dev_alexander 25:1a031add188a 110
dev_alexander 25:1a031add188a 111 /***************************************************************************
dev_alexander 25:1a031add188a 112 * MAX17055 Data Buffers
dev_alexander 24:e8d03912f303 113 **************************************************************************/
dev_alexander 24:e8d03912f303 114 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 25:1a031add188a 115 static char curr_MAX17055_from_slave[size_of_MAX17055];
dev_alexander 25:1a031add188a 116 static char prev_MAX17055_from_slave[size_of_MAX17055];
dev_alexander 24:e8d03912f303 117 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 25:1a031add188a 118 static char curr_MAX17055_to_master[size_of_MAX17055];
dev_alexander 24:e8d03912f303 119 #endif
dev_alexander 24:e8d03912f303 120
dev_alexander 25:1a031add188a 121 /***************************************************************************
dev_alexander 25:1a031add188a 122 * MAX77650 Data Buffers
dev_alexander 25:1a031add188a 123 **************************************************************************/
dev_alexander 25:1a031add188a 124 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 25:1a031add188a 125 static char curr_MAX77650_from_slave[size_of_MAX77650];
dev_alexander 25:1a031add188a 126 static char prev_MAX77650_from_slave[size_of_MAX77650];
dev_alexander 25:1a031add188a 127 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 25:1a031add188a 128 static char curr_MAX77650_to_master[size_of_MAX77650];
dev_alexander 25:1a031add188a 129 #endif
dev_alexander 24:e8d03912f303 130
dev_alexander 24:e8d03912f303 131 /**
dev_alexander 24:e8d03912f303 132 * @brief This function constructs a payload buffer that is used in transmitting data in a LoRa Message
dev_alexander 24:e8d03912f303 133 */
dev_alexander 25:1a031add188a 134 void fillPayloadWithGlobalBufs(uint8_t * payload_buffer_tx);
dev_alexander 24:e8d03912f303 135
dev_alexander 24:e8d03912f303 136 /**
dev_alexander 24:e8d03912f303 137 * @brief This function deconstructs a payload buffer that contains data from a received LoRa Message
dev_alexander 24:e8d03912f303 138 */
dev_alexander 25:1a031add188a 139 void fillGlobalBufsWithPayload(uint8_t * payload_buffer_rx);
dev_alexander 24:e8d03912f303 140
dev_alexander 23:f74a50977593 141 #endif // __GLOBAL_BUFFERS_H__