diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 751a611..024c0a7 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -300,6 +300,19 @@ void Error_Handler(void);
#define SOAP_DATA HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin)
#endif
+#if defined(STS_WS)||defined(STS_R6)
+//#define HX711_SCK_PIN GPIO_PIN_5
+//#define HX711_DOUT_PIN GPIO_PIN_6
+//#define HX711_SCK_PORT GPIOA
+//#define HX711_DOUT_PORT GPIOA
+
+#define HX711_SCK_PIN GPIO_PIN_9
+#define HX711_DOUT_PIN GPIO_PIN_10
+#define HX711_SCK_PORT GPIOA
+#define HX711_DOUT_PORT GPIOA
+
+#endif
+
// STS_M1, WATER LEAKAGE PA1 READ DATA, PA1
#ifdef STS_M1
diff --git a/Core/Inc/utilities_def.h b/Core/Inc/utilities_def.h
index 35411f6..ac9c311 100644
--- a/Core/Inc/utilities_def.h
+++ b/Core/Inc/utilities_def.h
@@ -106,6 +106,9 @@ typedef enum
#ifdef STS_M7
CFG_SEQ_Task_YunhornSTSEventP8, /* ETR, PULSE COUNT */
#endif
+#ifdef STS_R6
+ CFG_SEQ_Task_YunhornSTSEventP9, /* WEIGHT SCALE SENSOR */
+#endif
#ifdef MODBUS_RS485
STS_YunhornSTSEventPIORS485_Process, /* RS485 MODBUS RTU */
#endif
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 287b9b3..e86e51a 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -174,6 +174,28 @@ void MX_GPIO_Init(void)
#endif
+#if defined(STS_WS)||defined(STS_R6)
+
+ // STS_Weight_Scale_Sensor
+ // HX711_SCK
+ GPIO_InitStruct.Pin = HX711_SCK_PIN;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_PULLUP; //GPIO_NOPULL
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(HX711_SCK_PORT, &GPIO_InitStruct);
+
+ // HX711_DOUT
+ GPIO_InitStruct.Pin = HX711_DOUT_PIN;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(HX711_DOUT_PORT, &GPIO_InitStruct);
+
+ HAL_GPIO_WritePin(HX711_SCK_PORT, HX711_SCK_PIN, GPIO_PIN_RESET);
+
+#endif
+
+
#if defined(STS_M1)
HAL_GPIO_WritePin(WATER_DETECT_Port, WATER_DETECT_Pin, GPIO_PIN_RESET);
diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c
index 110506c..50b87f0 100644
--- a/Core/Src/stm32wlxx_it.c
+++ b/Core/Src/stm32wlxx_it.c
@@ -293,8 +293,9 @@ void DMA1_Channel1_IRQHandler(void)
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
/* USER CODE END DMA1_Channel1_IRQn 0 */
+#if defined(STS_O6T)||defined(O1L)||defined(STS_O7)||defined(STS_T6)
HAL_DMA_IRQHandler(&hdma_tim1_ch1);
-
+#endif
//HAL_DMA_IRQHandler(&hdma_tim1_ch2);
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c
index 64cf9ae..afbbbb1 100644
--- a/Core/Src/sys_app.c
+++ b/Core/Src/sys_app.c
@@ -36,6 +36,9 @@
#include "app_tof_peoplecount.h"
#include "sts_lamp_bar.h"
#endif
+#if defined(STS_WS)||defined(STS_R6)
+#include "sts_weight_scale.h"
+#endif
//#ifdef L8
#include "app_tof.h"
//#endif
@@ -138,6 +141,11 @@ void SystemApp_Init(void)
STS_Lamp_Bar_Self_Test();
#endif
+#if defined(STS_WS)||defined(STS_R6)
+ // sts_weight_scale_init(); NO NEED TO INIT FROM VERY BEGINNING
+#endif
+
+
/*Init low power manager*/
UTIL_LPM_Init();
/* Disable Stand-by mode */
diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c
index ca02418..48b6b7c 100644
--- a/LoRaWAN/App/lora_app.c
+++ b/LoRaWAN/App/lora_app.c
@@ -49,8 +49,12 @@
/* USER CODE BEGIN EV */
uint8_t outbuf[128]={0x0};
extern volatile uint8_t sts_ac_code[20], sts_service_mask;
+
+#if defined(STS_O6T)||defined(O1L)||defined(STS_O7)||defined(STS_T6)
extern volatile uint8_t sts_work_mode, sts_cloud_netcolor, sts_lamp_bar_color, sts_status_color, luminance_level;
volatile static bool r_b=true;
+#endif
+
extern volatile sts_cfg_nvm_t sts_cfg_nvm;
extern volatile uint32_t rfac_timer;
extern volatile uint32_t STS_TOFScanPeriod_msec, STS_TxPeriod_sec, STS_HeartBeatTimerPeriod_sec;
@@ -548,6 +552,11 @@ void LoRaWAN_Init(void)
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP6), UTIL_SEQ_RFU, STS_YunhornSTSEventP6_Process);
#endif
+#ifdef STS_R6
+ UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP9), UTIL_SEQ_RFU, STS_YunhornSTSEventP9_Process);
+#endif
+
+
#ifdef VL53L0
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), UTIL_SEQ_RFU, STS_YunhornSTSEventP4_Process);
#endif
@@ -845,6 +854,8 @@ static void SendTxData(void)
sts_tof_range_data_t sts_rr_sensor_data={0x0,0x0,0x0};
#elif defined(STS_R4)
sts_r_sensor_data_t sts_r4_sensor_data={0};
+#elif defined(STS_R6)
+ sts_ws_sensor_data_t sts_r6_sensor_data={0};
#elif defined(STS_M1)
sts_r_sensor_data_t sts_m1_sensor_data={0};
#elif defined(STS_O5)
@@ -880,7 +891,9 @@ static void SendTxData(void)
STS_M1_sensor_read(&sts_m1_sensor_data);
#endif
-
+#if defined(STS_WS)||defined(STS_R6)
+ STS_WS_sensor_read(&sts_r6_sensor_data);
+#endif
#ifdef VL53LX
#ifdef STS_P2
@@ -910,6 +923,9 @@ static void SendTxData(void)
#ifdef STS_R4 //SOAP/SANITIZER LEVEL
AppData.Port = YUNHORN_STS_R4_LORA_APP_DATA_PORT; /* STS-R4 Data Port */
+#elif defined(STS_R6) // WEIGHT SCALE STS-R6
+ AppData.Port = YUNHORN_STS_R6_LORA_APP_DATA_PORT; /* STS-R6 Data Port */
+
#elif defined(STS_M1) // WATER LEAKAGE SENSOR
AppData.Port = YUNHORN_STS_M1_LORA_APP_DATA_PORT; /* STS-M1 Data Port */
@@ -1070,6 +1086,17 @@ static void SendTxData(void)
AppData.Buffer[i++] = (uint8_t)(sts_r4_sensor_data.on_off_event & 0xFF);
#endif //STS_R4
+/* STS-R6 WEIGHT SCALE SENSOR */
+#ifdef STS_R6
+ AppData.Buffer[i++] = 4;
+ AppData.Buffer[i++] = (uint8_t)((sts_r6_sensor_data.weight_g <<8)& 0xFF);
+ AppData.Buffer[i++] = (uint8_t)((sts_r6_sensor_data.weight_g)& 0xFF);
+ AppData.Buffer[i++] = (uint8_t)((sts_r6_sensor_data.tare_g <<8)& 0xFF);
+ AppData.Buffer[i++] = (uint8_t)((sts_r6_sensor_data.tare_g)& 0xFF);
+
+#endif //STS_R6
+
+
/* STS-M1 WATER LEAKAGE SENSOR */
#ifdef STS_M1
AppData.Buffer[i++] = 2;
@@ -1124,10 +1151,11 @@ static void OnTxTimerEvent(void *context)
#elif (defined(STS_R1D)||defined(STS_R5)||defined(STS_R1))
APP_LOG(TS_OFF, VLEVEL_H, "\nSET TASK P4\r\n");
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), CFG_SEQ_Prio_0);
+#elif (defined(STS_WS)||defined(STS_R6))
+ APP_LOG(TS_OFF, VLEVEL_H, "\nS TASK P9\r\n");
+ UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP9), CFG_SEQ_Prio_0);
#elif (defined(STS_P2))
-
UTIL_TIMER_Stop(&YunhornSTSWakeUpScanTimer);
-
APP_LOG(TS_OFF, VLEVEL_M, "\r\nTxTimer Event \r\n");
#endif
@@ -1477,8 +1505,9 @@ static void OnRestoreContextRequest(void *nvm, uint32_t nvm_size)
*/
static void OnYunhornSTSLampBarColorTimerEvent(void *context)
{
+#if defined(STS_O6)||defined(STS_T6)||defined(O1L)
uint8_t high4=(sts_lamp_bar_color>>4)&0x0f, low4=sts_lamp_bar_color&0x0f;
-#if defined(STS_O6)||defined(STS_T6) //||defined(O1L)
+
//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0);
UTIL_TIMER_Stop(&STSLampBarColorTimer);
@@ -1558,6 +1587,8 @@ static void OnYunhornSTSHeartBeatTimerEvent(void *context)
appHeartBeatDataPort = YUNHORN_STS_R5_LORA_APP_HTBT_PORT;
#elif defined(STS_R4)
appHeartBeatDataPort = YUNHORN_STS_R4_LORA_APP_HTBT_PORT;
+#elif defined(STS_R6)
+ appHeartBeatDataPort = YUNHORN_STS_R6_LORA_APP_HTBT_PORT;
#elif defined(STS_T6)
appHeartBeatDataPort = YUNHORN_STS_T6_LORA_APP_HTBT_PORT;
#elif defined(STS_O5)
diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject
index 8648789..33bbb77 100644
--- a/STM32CubeIDE/.cproject
+++ b/STM32CubeIDE/.cproject
@@ -99,7 +99,7 @@
-
+
@@ -136,7 +136,7 @@