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:
Wed Aug 15 04:12:27 2018 +0000
Revision:
43:b38b934d82e6
Parent:
41:1381a49e019e
Commit after publishing fork of Adafruit_GFX library

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 28:0ed92c590607 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 41:1381a49e019e 40 const uint8_t size_of_MAX17055 = 22;
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 28:0ed92c590607 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 28:0ed92c590607 52 /* determine the appropriate buffer sizes */
dev_alexander 26:69aba05f010f 53 #if defined(TARGET_MAX32630FTHR) // Master Device: Bluetooth Gateway
dev_alexander 26:69aba05f010f 54 const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
dev_alexander 26:69aba05f010f 55 const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
dev_alexander 26:69aba05f010f 56 #elif defined(TARGET_MAX32620FTHR) // Slave Device: Robot
dev_alexander 26:69aba05f010f 57 const uint16_t BufferSizeTx = PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER;
dev_alexander 26:69aba05f010f 58 const uint16_t BufferSizeRx = PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE;
dev_alexander 26:69aba05f010f 59 #endif
dev_alexander 26:69aba05f010f 60
dev_alexander 23:f74a50977593 61 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 24:e8d03912f303 62 /* These are indexs used to create the payload buffer to send to Slave */
dev_alexander 25:1a031add188a 63 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 64 const uint8_t tx_idx_ble = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 24:e8d03912f303 65
dev_alexander 25:1a031add188a 66 /* These are indexs used to deconstruct received payload buffer sent by the Slave */
dev_alexander 25:1a031add188a 67 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 68 const uint8_t rx_idx_grid_eye = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 25:1a031add188a 69 const uint8_t rx_idx_gps = rx_idx_grid_eye + size_of_grid_eye; // 3rd buf in rx payload
dev_alexander 25:1a031add188a 70 const uint8_t rx_idx_MAX17055 = rx_idx_gps + size_of_gps; // 4th buf in rx payload
dev_alexander 25:1a031add188a 71 const uint8_t rx_idx_MAX77650 = rx_idx_MAX17055 + size_of_MAX17055; // 5th buf in rx payload
dev_alexander 24:e8d03912f303 72
dev_alexander 23:f74a50977593 73 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 24:e8d03912f303 74 /* These are indexs used to create the payload buffer to send to Master */
dev_alexander 25:1a031add188a 75 const uint8_t tx_idx_signature = 0; // 1st buf in tx payload (begins at byte 0)
dev_alexander 25:1a031add188a 76 const uint8_t tx_idx_grid_eye = tx_idx_signature + size_signature; // 2nd buf in tx payload
dev_alexander 25:1a031add188a 77 const uint8_t tx_idx_gps = tx_idx_grid_eye + size_of_grid_eye; // 3rd buf in tx payload
dev_alexander 25:1a031add188a 78 const uint8_t tx_idx_MAX17055 = tx_idx_gps + size_of_gps; // 4th buf in tx payload
dev_alexander 25:1a031add188a 79 const uint8_t tx_idx_MAX77650 = tx_idx_MAX17055 + size_of_MAX17055; // 5th buf in tx payload
dev_alexander 24:e8d03912f303 80
dev_alexander 24:e8d03912f303 81 /* These are indexs used to deconstruct received payload buffer sent by the Master */
dev_alexander 25:1a031add188a 82 const uint8_t rx_idx_signature = 0; // 1st buf in rx payload (begins at byte 0)
dev_alexander 25:1a031add188a 83 const uint8_t rx_idx_ble = rx_idx_signature + size_signature; // 2nd buf in rx payload
dev_alexander 23:f74a50977593 84 #endif
dev_alexander 23:f74a50977593 85
dev_alexander 27:6b549f838f0a 86
dev_alexander 28:0ed92c590607 87 /***************************************************************************
dev_alexander 28:0ed92c590607 88 * BLE Data Buffers
dev_alexander 28:0ed92c590607 89 **************************************************************************/
dev_alexander 28:0ed92c590607 90 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 28:0ed92c590607 91 static char curr_ble_data_to_slave[size_of_ble];
dev_alexander 28:0ed92c590607 92 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 28:0ed92c590607 93 static char curr_ble_data_from_master[size_of_ble];
dev_alexander 28:0ed92c590607 94 static char prev_ble_data_from_master[size_of_ble];
dev_alexander 28:0ed92c590607 95 #endif
dev_alexander 27:6b549f838f0a 96
dev_alexander 28:0ed92c590607 97 /***************************************************************************
dev_alexander 28:0ed92c590607 98 * Grid Eye Sensor Data Buffers
dev_alexander 28:0ed92c590607 99 **************************************************************************/
dev_alexander 27:6b549f838f0a 100 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 28:0ed92c590607 101 static char curr_raw_frame_data_from_slave[size_of_grid_eye];
dev_alexander 28:0ed92c590607 102 static char prev_raw_frame_data_from_slave[size_of_grid_eye];
dev_alexander 28:0ed92c590607 103 static int16_t conv_frame_data_from_slave[64];
dev_alexander 28:0ed92c590607 104 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
dev_alexander 28:0ed92c590607 105 static char curr_raw_frame_data_to_master[size_of_grid_eye];
dev_alexander 28:0ed92c590607 106 static char prev_raw_frame_data_to_master[size_of_grid_eye];
dev_alexander 28:0ed92c590607 107 static int16_t conv_frame_data_to_master[64];
dev_alexander 28:0ed92c590607 108 #endif
dev_alexander 28:0ed92c590607 109
dev_alexander 28:0ed92c590607 110 /***************************************************************************
dev_alexander 28:0ed92c590607 111 * GPS Data Buffers
dev_alexander 28:0ed92c590607 112 **************************************************************************/
dev_alexander 28:0ed92c590607 113 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 28:0ed92c590607 114 static char curr_gps_data_from_slave[size_of_gps];
dev_alexander 28:0ed92c590607 115 static char prev_gps_data_from_slave[size_of_gps];
dev_alexander 27:6b549f838f0a 116 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 28:0ed92c590607 117 static char curr_gps_data_to_master[size_of_gps];
dev_alexander 28:0ed92c590607 118 #endif
dev_alexander 28:0ed92c590607 119
dev_alexander 28:0ed92c590607 120 /***************************************************************************
dev_alexander 28:0ed92c590607 121 * MAX17055 Data Buffers
dev_alexander 28:0ed92c590607 122 **************************************************************************/
dev_alexander 28:0ed92c590607 123 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 28:0ed92c590607 124 static char curr_MAX17055_from_slave[size_of_MAX17055];
dev_alexander 28:0ed92c590607 125 static char prev_MAX17055_from_slave[size_of_MAX17055];
dev_alexander 28:0ed92c590607 126 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 28:0ed92c590607 127 static char curr_MAX17055_to_master[size_of_MAX17055];
dev_alexander 28:0ed92c590607 128 #endif
dev_alexander 28:0ed92c590607 129
dev_alexander 28:0ed92c590607 130 /***************************************************************************
dev_alexander 28:0ed92c590607 131 * MAX77650 Data Buffers
dev_alexander 28:0ed92c590607 132 **************************************************************************/
dev_alexander 28:0ed92c590607 133 #if defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
dev_alexander 28:0ed92c590607 134 static char curr_MAX77650_from_slave[size_of_MAX77650];
dev_alexander 28:0ed92c590607 135 static char prev_MAX77650_from_slave[size_of_MAX77650];
dev_alexander 28:0ed92c590607 136 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
dev_alexander 28:0ed92c590607 137 static char curr_MAX77650_to_master[size_of_MAX77650];
dev_alexander 27:6b549f838f0a 138 #endif
dev_alexander 24:e8d03912f303 139
dev_alexander 24:e8d03912f303 140 /**
dev_alexander 24:e8d03912f303 141 * @brief This function constructs a payload buffer that is used in transmitting data in a LoRa Message
dev_alexander 24:e8d03912f303 142 */
dev_alexander 28:0ed92c590607 143 void fillPayloadWithGlobalBufs(uint8_t * payload_buffer_tx);
dev_alexander 24:e8d03912f303 144
dev_alexander 24:e8d03912f303 145 /**
dev_alexander 24:e8d03912f303 146 * @brief This function deconstructs a payload buffer that contains data from a received LoRa Message
dev_alexander 24:e8d03912f303 147 */
dev_alexander 28:0ed92c590607 148 void fillGlobalBufsWithPayload(uint8_t * payload_buffer_rx);
dev_alexander 24:e8d03912f303 149
dev_alexander 23:f74a50977593 150 #endif // __GLOBAL_BUFFERS_H__