Procházet zdrojové kódy

Lora Data 변할 때만 데이터전송

june9152 před 6 roky
rodič
revize
eaff57f912

binární
Debug/STM32F103_RGB_Controller.bin


binární
Debug/STM32F103_RGB_Controller.binary


binární
Debug/STM32F103_RGB_Controller.elf


Diff nebyl zobrazen, protože je příliš veliký
+ 4491 - 4343
Debug/STM32F103_RGB_Controller.list


Diff nebyl zobrazen, protože je příliš veliký
+ 533 - 527
Debug/STM32F103_RGB_Controller.map


binární
Debug/Src/GPIO_SPI.o


binární
Debug/Src/M24C32.o


binární
Debug/Src/RGB_Controller.o


+ 10 - 9
Debug/Src/RGB_Controller.su

@@ -1,12 +1,13 @@
1 1
 RGB_Controller.c:43:10:RGB_Limit_Address_Check	0	static
2 2
 RGB_Controller.c:57:10:RGB_Location_Address_Check	0	static
3 3
 RGB_Controller.c:17:6:RGB_Data_Init	48	static
4
-RGB_Controller.c:72:6:RGB_Response_Func	8	static
5
-RGB_Controller.c:125:6:RGB_Sensor_LED_Alarm_ON	8	static
6
-RGB_Controller.c:163:6:RGB_Sensor_LED_Alarm_OFF	8	static
7
-RGB_Controller.c:202:6:RGB_Alarm_Operate	32	static
8
-RGB_Controller.c:239:9:RGB_DeviceStatusCheck	12	static
9
-RGB_Controller.c:313:9:RGB_BufCal	0	static
10
-RGB_Controller.c:286:6:RGB_Data_Stack	24	static
11
-RGB_Controller.c:218:6:RGB_Alarm_Check	96	static
12
-RGB_Controller.c:330:6:RGB_Controller_Func	120	static
4
+RGB_Controller.c:72:6:RGB_Response_Func	128	static
5
+RGB_Controller.c:131:6:RGB_Sensor_LED_Alarm_ON	8	static
6
+RGB_Controller.c:169:6:RGB_Sensor_LED_Alarm_OFF	8	static
7
+RGB_Controller.c:208:6:RGB_Alarm_Operate	32	static
8
+RGB_Controller.c:251:9:RGB_DeviceStatusCheck	12	static
9
+RGB_Controller.c:325:9:RGB_BufCal	0	static
10
+RGB_Controller.c:298:6:RGB_Data_Stack	24	static
11
+RGB_Controller.c:224:6:RGB_Alarm_Check	104	static
12
+RGB_Controller.c:339:9:RGB_LimitData_Get	0	static
13
+RGB_Controller.c:350:6:RGB_Controller_Func	120	static

binární
Debug/Src/RGB_Lora.o


binární
Debug/Src/SX1276.o


binární
Debug/Src/main.o


+ 20 - 20
Debug/Src/main.su

@@ -1,20 +1,20 @@
1
-main.c:119:6:HAL_UART_RxCpltCallback	8	static
2
-main.c:159:6:HAL_TIM_PeriodElapsedCallback	0	static
3
-main.c:168:6:LoraDataSendSet	0	static
4
-main.c:171:9:LoraDataSendGet	0	static
5
-main.c:175:6:UartDataRecvSet	0	static
6
-main.c:178:9:UartDataRecvGet	0	static
7
-main.c:181:6:RGB_SensorIDAutoSet	0	static
8
-main.c:184:9:RGB_SensorIDAutoGet	0	static
9
-main.c:188:6:Uart2_Data_Send	0	static
10
-main.c:191:6:Uart1_Data_Send	0	static
11
-main.c:195:5:_write	8	static
12
-main.c:200:6:Uart_dataCheck	24	static
13
-main.c:229:6:RGB_Sensor_PowerOnOff	8	static
14
-main.c:383:6:test_read	24	static
15
-main.c:402:6:Flash_RGB_Data_Write	16	static
16
-main.c:415:6:Flash_write	24	static
17
-main.c:468:6:Flash_InitRead	12	static
18
-main.c:729:6:SystemClock_Config	72	static
19
-main.c:506:5:main	112	static
20
-main.c:1003:6:Error_Handler	0	static
1
+main.c:121:6:HAL_UART_RxCpltCallback	8	static
2
+main.c:161:6:HAL_TIM_PeriodElapsedCallback	0	static
3
+main.c:170:6:LoraDataSendSet	0	static
4
+main.c:173:9:LoraDataSendGet	0	static
5
+main.c:177:6:UartDataRecvSet	0	static
6
+main.c:180:9:UartDataRecvGet	0	static
7
+main.c:183:6:RGB_SensorIDAutoSet	0	static
8
+main.c:186:9:RGB_SensorIDAutoGet	0	static
9
+main.c:190:6:Uart2_Data_Send	0	static
10
+main.c:193:6:Uart1_Data_Send	0	static
11
+main.c:197:5:_write	8	static
12
+main.c:202:6:Uart_dataCheck	24	static
13
+main.c:231:6:RGB_Sensor_PowerOnOff	8	static
14
+main.c:385:6:test_read	24	static
15
+main.c:404:6:Flash_RGB_Data_Write	16	static
16
+main.c:417:6:Flash_write	24	static
17
+main.c:470:6:Flash_InitRead	12	static
18
+main.c:668:6:SystemClock_Config	72	static
19
+main.c:508:5:main	112	static
20
+main.c:942:6:Error_Handler	0	static

binární
Debug/Src/stm32f1xx_hal_msp.o


binární
Debug/Src/stm32f1xx_it.o


+ 3 - 0
Inc/main.h

@@ -82,6 +82,7 @@ typedef enum{ //LIMIT SET enum
82 82
     Location_stx = 0,
83 83
     Location_type,
84 84
     Location_length,
85
+    Location_srcid,
85 86
     Location_Data,
86 87
 }RGB_Location_Protocol_t;    
87 88
 /* USER CODE END ET */
@@ -131,6 +132,8 @@ typedef enum{
131 132
     RGB_Location_Report,           //14
132 133
     RGB_Location_Response,           //15
133 134
     RGB_ControllerID_GET,           //16
135
+    RGB_Controller_Update_Ack,      //17
136
+    RGB_ControllerLimitGet ,        //18    
134 137
 }RGB_CMD_T;
135 138
 #define     RGB_ControllerID_SET_Length         10 
136 139
 #define     RGB_SensorID_SET_Length             10 

+ 45 - 12
Src/RGB_Controller.c

@@ -71,6 +71,7 @@ uint16_t RGB_Location_Address_Check(uint8_t id){
71 71
 
72 72
 void RGB_Response_Func(uint8_t* data){

73 73
 	RGB_CMD_T type = data[bluecell_type];
74
+    uint8_t temp_data[100] = {0,};
74 75
 #if 0
75 76
 for(uint8_t i = 0; i < 10; i++){
76 77
             printf("%02x ",data[i]);
@@ -107,20 +108,25 @@ for(uint8_t i = 0; i < 10; i++){
107 108
             case RGB_Lora_Data_Report:
108 109
             break;
109 110
         case RGB_Location_Report:
111
+            M24C32_Data_Write(&hi2c2,&data[Location_stx],RGB_Location_Address_Check(data[data[bluecell_length]]),data[bluecell_length] + 3); // EEPROM Controller ID Save 
112
+            break;
110 113
         case RGB_Location_Response:
111
-            M24C32_Data_Write(&hi2c2,&data[Location_Data],RGB_Location_Address_Check(data[bluecell_dstid]),data[bluecell_length] - 2); // EEPROM Controller ID Save 
114
+            temp_data[bluecell_length] = M24C32_Data_Read(&hi2c2,RGB_Location_Address_Check(data[bluecell_dstid]) + 2); // EEPROM Controller ID Save 
115
+            for(uint8_t i = 0; i < temp_data[bluecell_length] + 3; i++)
116
+                temp_data[i] = M24C32_Data_Read(&hi2c2,RGB_Location_Address_Check(data[bluecell_dstid]) + i); // EEPROM Controller ID Save 
117
+            temp_data[bluecell_type] = RGB_Location_Response;
118
+            temp_data[temp_data[bluecell_length] + 1] = STH30_CreateCrc(&temp_data[bluecell_type],temp_data[bluecell_length]);
119
+            Uart1_Data_Send(temp_data,temp_data[bluecell_length] + 3);    
112 120
             break;
113 121
          case RGB_ControllerID_GET:
114 122
              Uart1_Data_Send(data,data[bluecell_length] + 3);
115 123
              break;
124
+         case RGB_ControllerLimitGet:
125
+             Uart1_Data_Send(data,data[bluecell_length] + 3);
126
+             break;
116 127
     }
117
-
118 128
 }
119 129
 
120
-
121
-
122
-
123
-
124 130
 void RGB_Sensor_LED_Alarm_ON(uint8_t id ){
125 131
     switch(id){
126 132
         case 0:// 모든 LED의 전원을 ON
@@ -218,7 +224,8 @@ void RGB_Alarm_Check(uint8_t* data){
218 224
     uint16_t Sensor_red[9] = {0,};
219 225
     uint16_t Sensor_green[9] = {0,};
220 226
     uint16_t Sensor_blue[9] = {0,};    
221
-
227
+    uint8_t Alarm_occur = 0;
228
+    static uint8_t Prev_Alarm_occur;
222 229
     Sensor_red[data[bluecell_srcid]] = ((data[bluecell_red_H + 2] << 8)| data[bluecell_red_L + 2]);
223 230
     Sensor_green[data[bluecell_srcid]] = ((data[bluecell_green_H + 2] << 8)| data[bluecell_green_L + 2]);
224 231
     Sensor_blue[data[bluecell_srcid]] = ((data[bluecell_blue_H + 2] << 8)| data[bluecell_blue_L + 2]);  
@@ -228,11 +235,16 @@ void RGB_Alarm_Check(uint8_t* data){
228 235
             || RGB_SensorGreenLimit_Buf[SensorID_buf[i]]  >= Sensor_green[SensorID_buf[i]]
229 236
             || RGB_SensorBlueLimit_Buf[SensorID_buf[i]]  >= Sensor_blue[SensorID_buf[i]]) {
230 237
             LED_Alarm[SensorID_buf[i]] = 1;
238
+            Alarm_occur = 1;
231 239
         }else{
232 240
             LED_Alarm[SensorID_buf[i]] = 0;
233 241
         }
234 242
     }
235 243
     RGB_Data_Stack(&LED_Alarm[1]);
244
+    if(Prev_Alarm_occur != Alarm_occur){
245
+         LoraDataSendSet(1);
246
+         Prev_Alarm_occur = Alarm_occur;
247
+    }
236 248
 }
237 249
 
238 250
 uint8_t RGB_DeviceStatusCheck(void){
@@ -303,7 +315,7 @@ void RGB_Data_Stack(uint8_t* rgb_buf){
303 315
         Lora_Buf[bluecell_srcid + 2] |= rgb_buf[i] << i ;
304 316
     }
305 317
     Lora_Buf[bluecell_srcid + 3]= STH30_CreateCrc(&Lora_Buf[bluecell_type],Lora_Buf[bluecell_length]);
306
-    LoraDataSendSet(1);
318
+   
307 319
 }
308 320
 /*
309 321
     RGB_Data_Stack에 Lora에 Data를 보내기 위해 Buffer에 Data를 쌓을 때 
@@ -323,13 +335,22 @@ uint8_t RGB_BufCal(uint8_t srcid){
323 335
     }
324 336
     return ret;
325 337
 }
338
+uint8_t RGB_LimitData_Get(uint8_t id){
339
+
340
+    switch(id){
326 341
 
342
+
343
+    }
344
+
345
+
346
+}
327 347
 #endif // PYJ.2019.04.14_END -- 
328 348
 uint8_t datalosscnt[9] = {0,};
329 349
 void RGB_Controller_Func(uint8_t* data){
330 350
 	RGB_CMD_T type = data[bluecell_type];
331 351
    // static uint8_t temp_sensorid;
332 352
     uint8_t Result_buf[100] = {0,};
353
+    uint8_t i = 0;
333 354
     switch(type){
334 355
         case RGB_Status_Data_Request:           
335 356
             datalosscnt[data[bluecell_srcid + 1]]++;
@@ -343,7 +364,6 @@ void RGB_Controller_Func(uint8_t* data){
343 364
         case RGB_ControllerID_SET:        
344 365
             memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
345 366
             MyControllerID = data[bluecell_srcid]; // �긽��諛⑹쓽 SRC ID�뒗 �굹�쓽 DST ID�씠�떎.
346
-            
347 367
             break;
348 368
         case RGB_SensorID_SET:        
349 369
             RGB_SensorIDAutoSet(1);
@@ -376,7 +396,7 @@ void RGB_Controller_Func(uint8_t* data){
376 396
         case RGB_ID_Allocate_Request:
377 397
             break;
378 398
         case RGB_Location_Report:
379
-            break;
399
+            memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
380 400
         case RGB_Location_Response:
381 401
             break;
382 402
         case RGB_ControllerID_GET:
@@ -387,10 +407,23 @@ void RGB_Controller_Func(uint8_t* data){
387 407
             Result_buf[bluecell_srcid + 1]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
388 408
             Result_buf[bluecell_srcid + 2]   = 0xeb;
389 409
             break;
410
+            
411
+        case RGB_ControllerLimitGet:
412
+            Result_buf[bluecell_stx]         = 0xbe;
413
+            Result_buf[bluecell_type]        = RGB_ControllerLimitGet;
414
+            Result_buf[bluecell_length]      = 8;
415
+            Result_buf[bluecell_srcid + 0]   = (RGB_SensorRedLimit_Buf[data[bluecell_srcid]]   & 0xFF00) >> 8;      
416
+            Result_buf[bluecell_srcid + 1]   = RGB_SensorRedLimit_Buf[data[bluecell_srcid]]   & 0x00FF;  
417
+            Result_buf[bluecell_srcid + 2]   = (RGB_SensorGreenLimit_Buf[data[bluecell_srcid]] & 0xFF00) >> 8;      
418
+            Result_buf[bluecell_srcid + 3]   = RGB_SensorGreenLimit_Buf[data[bluecell_srcid]] & 0x00FF;
419
+            Result_buf[bluecell_srcid + 4]   = (RGB_SensorBlueLimit_Buf[data[bluecell_srcid]]  & 0xFF00) >> 8;      
420
+            Result_buf[bluecell_srcid + 5]   = RGB_SensorBlueLimit_Buf[data[bluecell_srcid]]  & 0x00FF;
421
+            Result_buf[bluecell_srcid + 6]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
422
+            Result_buf[bluecell_srcid + 7]   = 0xeb;
423
+            break;
390 424
         default:
391
-        break;
425
+            break;
392 426
     }
393
-  
394 427
     RGB_Response_Func(&Result_buf[bluecell_stx]);
395 428
     return;
396 429
 }

+ 8 - 69
Src/main.c

@@ -53,7 +53,7 @@
53 53
 
54 54
 /* Private define ------------------------------------------------------------*/
55 55
 /* USER CODE BEGIN PD */
56
-
56
+#define LORA_TIMER_CNT 600000 / 2
57 57
 /* USER CODE END PD */
58 58
 
59 59
 /* Private macro -------------------------------------------------------------*/
@@ -87,6 +87,8 @@ uint8_t RGB_SensorIDAutoset = 0;
87 87
 
88 88
 volatile uint32_t UartTimerCnt = 0;
89 89
 volatile uint32_t LedTimerCnt = 0;
90
+volatile uint32_t LoraTxTimerCnt = 0;
91
+
90 92
 
91 93
 uint8_t buf[buf_size] = {0,};
92 94
 
@@ -162,7 +164,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
162 164
     if(htim->Instance == TIM6){
163 165
         UartTimerCnt++;
164 166
         LedTimerCnt++;
165
-        
167
+        LoraTxTimerCnt++;
166 168
     }
167 169
 }
168 170
 void LoraDataSendSet(uint8_t val){
@@ -589,10 +591,11 @@ int main(void)
589 591
 
590 592
   while (1)
591 593
   {
592
-#if 1 // PYJ.2019.04.11_BEGIN -- 
594
+     if(LoraTxTimerCnt > LORA_TIMER_CNT){
595
+        LoraTxTimerCnt = 0;
596
+        LoraDataSendSet(1);
597
+    }
593 598
     RGB_Alarm_Operate();//LED ALARM CHECK
594
-
595
-#if 1 // PYJ.2019.04.14_BEGIN -- 
596 599
     if(LoraDataSendGet() == 1){
597 600
         LoraDataSendSet(0);
598 601
         memcpy(&buffer[0],&Lora_Buf[0],LORA_MAX_DATA_CNT);
@@ -615,40 +618,6 @@ int main(void)
615 618
            }
616 619
        
617 620
        }
618
-#else
619
-    if (master == 1) {
620
-        printf("Master ...\r\n");
621
-        HAL_Delay(2500);
622
-        printf("Sending package...\r\n");
623
-    
624
-        message_length = sprintf(buffer, "Hello %d", message);
625
-        ret = SX1276_LoRaEntryTx(&SX1276, message_length, 2000);
626
-        printf("Entry: %d\r\n", ret);
627
-    
628
-        printf("Sending %s\r\n", buffer);
629
-        ret = SX1276_LoRaTxPacket(&SX1276, (uint8_t *) buffer, message_length,
630
-                2000);
631
-        message += 1;
632
-    
633
-        printf("Transmission: %d\r\n", ret);
634
-        printf("Package sent...\r\n");
635
-    
636
-    } else {
637
-        printf("Slave ...\r\n");
638
-        HAL_Delay(1000);
639
-        printf("Receiving package...\r\n");
640
-    
641
-        ret = SX1276_LoRaRxPacket(&SX1276);
642
-        printf("Received: %d\r\n", ret);
643
-        if (ret > 0) {
644
-            SX1276_read(&SX1276, (uint8_t *) buffer, ret);
645
-            printf("Content (%d): %s\r\n", ret, buffer);
646
-        }
647
-        printf("Package received ...\r\n");
648
-    
649
-    }
650
-
651
-#endif // PYJ.2019.04.14_END -- 
652 621
     uartdatarecv = UartDataRecvGet(); 
653 622
     if(uartdatarecv != 0){
654 623
         if(uartdatarecv == 1){
@@ -658,36 +627,6 @@ int main(void)
658 627
         }  
659 628
         UartDataRecvSet(0);
660 629
     }
661
-#else
662
-
663
-#if 0 // PYJ.2019.04.13_BEGIN -- 
664
-    if (master == 1) {
665
-        message_length = sprintf(buffer, "Hello %d", message);
666
-        ret = SX1276_LoRaEntryTx(&SX1276, message_length, 2000);
667
-        ret = SX1276_LoRaTxPacket(&SX1276, (uint8_t *) buffer, message_length,
668
-                2000);
669
-        message += 1;
670
-        printf("Transmission: %d\r\n", ret);
671
-    
672
-    } else {
673
-        ret = SX1276_LoRaRxPacket(&SX1276);
674
-        printf("Received: %d\r\n", ret);
675
-        if (ret > 0) {
676
-            SX1276_read(&SX1276, (uint8_t *) buffer, ret);
677
-            printf("Content (%d): %s\r\n", ret, buffer);
678
-        }
679
-    }
680
-#endif // PYJ.2019.04.13_END -- 
681
-
682
-    
683
-
684
-    UartDataBufferCheck();
685
-    if(UartDataRecvGet() >= 1 && UartTimerCnt > 100){
686
-        Uart_dataCheck(USART1_CNT,&count_in1);
687
-    }
688
-
689
-
690
-#endif // PYJ.2019.04.11_END -- 
691 630
     else{
692 631
         if(LedTimerCnt > 500){
693 632
             if(RGB_SensorIDAutoGet() == 1){