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

Revision:
25:1a031add188a
Parent:
24:e8d03912f303
Child:
26:69aba05f010f
--- a/global_buffers.h	Wed Jul 18 21:25:17 2018 +0000
+++ b/global_buffers.h	Thu Jul 19 21:13:19 2018 +0000
@@ -19,76 +19,123 @@
  */
 
 #ifndef __GLOBAL_BUFFERS_H__
-#define __GLOBAL_BUFFERS_H__
+#define __GLOBAL_BUFFERS_H__\
+ 
+#include "mbed.h"
+#include "GenericPingPong.h"
+
 
 /***************************************************************************
  * Indexes for which byte specific data begins at in the payload buffer
  **************************************************************************/
+/* size of ID data that defines what the signature of the device is */
+const uint8_t size_signature = 8;
 
 /* size of data in bytes that is acquired by the master device */
-const uint8_t size_of_ble  = 2;
+const uint8_t size_of_ble       = 2;
+
 /* size of data in bytes that is acquired by the slave device */
 const uint8_t size_of_grid_eye  = 128; 
 const uint8_t size_of_gps       = 20;
 const uint8_t size_of_MAX17055  = 5;
 const uint8_t size_of_MAX77650  = 5;
 
-const uint16_t PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE = size_of_ble;
-const uint16_t PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER = size_of_grid_eye + size_of_gps + size_of_MAX17055 + size_of_MAX77650;
+/* These are the sizes of each payload in bytes. Since there is different amount 
+ * of data being sent in each direction, we need to declare the total size of 
+ * the payload so we can instatiate the correct buffer sizes to store data that 
+ * is to be delivered and for data that is received. 
+ */
+
+const uint16_t PAYLOAD_BUFFER_SIZE_MASTER_TO_SLAVE = size_signature + size_of_ble;
+const uint16_t PAYLOAD_BUFFER_SIZE_SLAVE_TO_MASTER = size_signature + size_of_grid_eye + size_of_gps + size_of_MAX17055 + size_of_MAX77650;
 
 #if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
     /* These are indexs used to create the payload buffer to send to Slave */  
-    const uint8_t tx_idx_ble = 0;                                       // 1st buf in tx payload (begins at byte 0)
+    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+    const uint8_t tx_idx_ble       = tx_idx_signature + size_signature;   // 2nd buf in tx payload
     
-    /* These are indexs used to deconstruct received payload buffer sent by the Slave */   
-    const uint8_t rx_idx_grid_eye = 0;                                  // 1st buf in rx payload (begins at byte 0)
-    const uint8_t rx_idx_gps      = rx_idx_grid_eye + size_of_grid_eye; // 2nd buf in rx payload
-    const uint8_t rx_idx_MAX17055 = rx_idx_gps      + size_of_gps;      // 3rd buf in rx payload
-    const uint8_t rx_idx_MAX77650 = rx_idx_MAX17055 + size_of_MAX17055; // 4th buf in rx payload
+    /* These are indexs used to deconstruct received payload buffer sent by the Slave */
+    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+    const uint8_t rx_idx_grid_eye  = rx_idx_signature + size_signature;   // 2nd buf in rx payload
+    const uint8_t rx_idx_gps       = rx_idx_grid_eye  + size_of_grid_eye; // 3rd buf in rx payload
+    const uint8_t rx_idx_MAX17055  = rx_idx_gps       + size_of_gps;      // 4th buf in rx payload
+    const uint8_t rx_idx_MAX77650  = rx_idx_MAX17055  + size_of_MAX17055; // 5th buf in rx payload
         
 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
-    
     /* These are indexs used to create the payload buffer to send to Master */
-    const uint8_t tx_idx_grid_eye = 0;                                  // 1st buf in tx payload (begins at byte 0)
-    const uint8_t tx_idx_gps      = tx_idx_grid_eye + size_of_grid_eye; // 2nd buf in tx payload
-    const uint8_t tx_idx_MAX17055 = tx_idx_gps      + size_of_gps;      // 3rd buf in tx payload
-    const uint8_t tx_idx_MAX77650 = tx_idx_MAX17055 + size_of_MAX17055; // 4th buf in tx payload
+    const uint8_t tx_idx_signature = 0;                                   // 1st buf in tx payload (begins at byte 0)
+    const uint8_t tx_idx_grid_eye  = tx_idx_signature + size_signature;   // 2nd buf in tx payload
+    const uint8_t tx_idx_gps       = tx_idx_grid_eye  + size_of_grid_eye; // 3rd buf in tx payload
+    const uint8_t tx_idx_MAX17055  = tx_idx_gps       + size_of_gps;      // 4th buf in tx payload
+    const uint8_t tx_idx_MAX77650  = tx_idx_MAX17055  + size_of_MAX17055; // 5th buf in tx payload
     
     /* These are indexs used to deconstruct received payload buffer sent by the Master */
-    const uint8_t rx_idx_ble = 0;                                       // 1st buf in rx payload (begins at byte 0)
+    const uint8_t rx_idx_signature = 0;                                   // 1st buf in rx payload (begins at byte 0)
+    const uint8_t rx_idx_ble       = rx_idx_signature + size_signature;   // 2nd buf in rx payload
 #endif
 
 
 /***************************************************************************
+ * BLE Data Buffers
+ **************************************************************************/
+#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+    static char curr_ble_data_to_slave[size_of_ble];
+#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+    static char curr_ble_data_from_master[size_of_ble];
+    static char prev_ble_data_from_master[size_of_ble];
+#endif
+
+/***************************************************************************
  * Grid Eye Sensor Data Buffers
  **************************************************************************/
 #if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
-    static char curr_raw_frame_data_from_slave[payload_grid_eye_size];
-    static char prev_raw_frame_data_from_slave[payload_grid_eye_size];
+    static char curr_raw_frame_data_from_slave[size_of_grid_eye];
+    static char prev_raw_frame_data_from_slave[size_of_grid_eye];
     static int16_t conv_frame_data_from_slave[64];
 #elif defined(TARGET_MAX32620FTHR) // Client Device: LoRa Controlled Robot
-    static char curr_raw_frame_data_to_master[128];
+    static char curr_raw_frame_data_to_master[size_of_grid_eye];
+    static char prev_raw_frame_data_to_master[size_of_grid_eye];
+    static int16_t conv_frame_data_to_master[64];
 #endif
 
 /***************************************************************************
- * BLE Data Buffers
+ * GPS Data Buffers
+ **************************************************************************/
+#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+    static char curr_gps_data_from_slave[size_of_gps];
+    static char prev_gps_data_from_slave[size_of_gps];
+#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+    static char curr_gps_data_to_master[size_of_gps];
+#endif
+
+/***************************************************************************
+ * MAX17055 Data Buffers
  **************************************************************************/
 #if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
-    static char curr_ble_data_to_slave[2];
+    static char curr_MAX17055_from_slave[size_of_MAX17055];
+    static char prev_MAX17055_from_slave[size_of_MAX17055];
 #elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
-    static char curr_ble_data_from_master[2];
-    static char prev_ble_data_from_master[2];
+    static char curr_MAX17055_to_master[size_of_MAX17055];
 #endif
 
+/***************************************************************************
+ * MAX77650 Data Buffers
+ **************************************************************************/
+#if   defined(TARGET_MAX32630FTHR) // Master Device: BLE-to-LoRa Gateway
+    static char curr_MAX77650_from_slave[size_of_MAX77650];
+    static char prev_MAX77650_from_slave[size_of_MAX77650];
+#elif defined(TARGET_MAX32620FTHR) // Slave Device: LoRa Controlled Robot
+    static char curr_MAX77650_to_master[size_of_MAX77650];
+#endif
 
 /** 
  * @brief This function constructs a payload buffer that is used in transmitting data in a LoRa Message
  */
-int fillPayloadWithGlobalBufs(); 
+void fillPayloadWithGlobalBufs(uint8_t * payload_buffer_tx); 
 
 /** 
  * @brief This function deconstructs a payload buffer that contains data from a received LoRa Message
  */
-int fillGlobalBufsWithPayload(); 
+void fillGlobalBufsWithPayload(uint8_t * payload_buffer_rx); 
 
 #endif // __GLOBAL_BUFFERS_H__
\ No newline at end of file