|
@@ -2,6 +2,8 @@
|
2
|
2
|
|
3
|
3
|
void RGB_Response_Func(uint8_t* data);
|
4
|
4
|
uint8_t RGB_BufCal(uint8_t srcid);
|
|
5
|
+void RGB_Alarm_Operate(void);
|
|
6
|
+void RGB_Data_Stack(uint8_t* rgb_buf);
|
5
|
7
|
|
6
|
8
|
|
7
|
9
|
|
|
@@ -53,32 +55,116 @@ uint16_t RGB_SensorBlueLimit_Buf[9]={0,};
|
53
|
55
|
uint16_t Sensor_red[9] = {0,};
|
54
|
56
|
uint16_t Sensor_green[9] = {0,};
|
55
|
57
|
uint16_t Sensor_blue[9] = {0,};
|
|
58
|
+
|
|
59
|
+uint8_t LED_Alarm[9] = {0,};
|
|
60
|
+void RGB_Sensor_LED_Alarm_ON(uint8_t id ){
|
|
61
|
+ switch(id){
|
|
62
|
+ case 0:// 모든 LED의 전원을 ON
|
|
63
|
+ HAL_GPIO_WritePin(LED_CH1_GPIO_Port,LED_CH1_Pin,GPIO_PIN_RESET);
|
|
64
|
+ HAL_GPIO_WritePin(LED_CH2_GPIO_Port,LED_CH2_Pin,GPIO_PIN_RESET);
|
|
65
|
+ HAL_GPIO_WritePin(LED_CH3_GPIO_Port,LED_CH3_Pin,GPIO_PIN_RESET);
|
|
66
|
+ HAL_GPIO_WritePin(LED_CH4_GPIO_Port,LED_CH4_Pin,GPIO_PIN_RESET);
|
|
67
|
+ HAL_GPIO_WritePin(LED_CH5_GPIO_Port,LED_CH5_Pin,GPIO_PIN_RESET);
|
|
68
|
+ HAL_GPIO_WritePin(LED_CH6_GPIO_Port,LED_CH6_Pin,GPIO_PIN_RESET);
|
|
69
|
+ HAL_GPIO_WritePin(LED_CH7_GPIO_Port,LED_CH7_Pin,GPIO_PIN_RESET);
|
|
70
|
+ HAL_GPIO_WritePin(LED_CH8_GPIO_Port,LED_CH8_Pin,GPIO_PIN_RESET);
|
|
71
|
+ break;
|
|
72
|
+ case 1:
|
|
73
|
+ HAL_GPIO_WritePin(LED_CH1_GPIO_Port,LED_CH1_Pin,GPIO_PIN_RESET);
|
|
74
|
+ break;
|
|
75
|
+ case 2:
|
|
76
|
+ HAL_GPIO_WritePin(LED_CH2_GPIO_Port,LED_CH2_Pin,GPIO_PIN_RESET);
|
|
77
|
+ break;
|
|
78
|
+ case 3:
|
|
79
|
+ HAL_GPIO_WritePin(LED_CH3_GPIO_Port,LED_CH3_Pin,GPIO_PIN_RESET);
|
|
80
|
+ break;
|
|
81
|
+ case 4:
|
|
82
|
+ HAL_GPIO_WritePin(LED_CH4_GPIO_Port,LED_CH4_Pin,GPIO_PIN_RESET);
|
|
83
|
+ break;
|
|
84
|
+ case 5:
|
|
85
|
+ HAL_GPIO_WritePin(LED_CH5_GPIO_Port,LED_CH5_Pin,GPIO_PIN_RESET);
|
|
86
|
+ break;
|
|
87
|
+ case 6:
|
|
88
|
+ HAL_GPIO_WritePin(LED_CH6_GPIO_Port,LED_CH6_Pin,GPIO_PIN_RESET);
|
|
89
|
+ break;
|
|
90
|
+ case 7:
|
|
91
|
+ HAL_GPIO_WritePin(LED_CH7_GPIO_Port,LED_CH7_Pin,GPIO_PIN_RESET);
|
|
92
|
+ break;
|
|
93
|
+ case 8:
|
|
94
|
+ HAL_GPIO_WritePin(LED_CH8_GPIO_Port,LED_CH8_Pin,GPIO_PIN_RESET);
|
|
95
|
+ break;
|
|
96
|
+ }
|
|
97
|
+}
|
|
98
|
+void RGB_Sensor_LED_Alarm_OFF(uint8_t id ){
|
|
99
|
+ switch(id){
|
|
100
|
+ case 0:// 모든 LED의 전원을 OFF
|
|
101
|
+ HAL_GPIO_WritePin(LED_CH1_GPIO_Port,LED_CH1_Pin,GPIO_PIN_SET);
|
|
102
|
+ HAL_GPIO_WritePin(LED_CH2_GPIO_Port,LED_CH2_Pin,GPIO_PIN_SET);
|
|
103
|
+ HAL_GPIO_WritePin(LED_CH3_GPIO_Port,LED_CH3_Pin,GPIO_PIN_SET);
|
|
104
|
+ HAL_GPIO_WritePin(LED_CH4_GPIO_Port,LED_CH4_Pin,GPIO_PIN_SET);
|
|
105
|
+ HAL_GPIO_WritePin(LED_CH5_GPIO_Port,LED_CH5_Pin,GPIO_PIN_SET);
|
|
106
|
+ HAL_GPIO_WritePin(LED_CH6_GPIO_Port,LED_CH6_Pin,GPIO_PIN_SET);
|
|
107
|
+ HAL_GPIO_WritePin(LED_CH7_GPIO_Port,LED_CH7_Pin,GPIO_PIN_SET);
|
|
108
|
+ HAL_GPIO_WritePin(LED_CH8_GPIO_Port,LED_CH8_Pin,GPIO_PIN_SET);
|
|
109
|
+ break;
|
|
110
|
+ case 1:
|
|
111
|
+ HAL_GPIO_WritePin(LED_CH1_GPIO_Port,LED_CH1_Pin,GPIO_PIN_SET);
|
|
112
|
+ break;
|
|
113
|
+ case 2:
|
|
114
|
+ HAL_GPIO_WritePin(LED_CH2_GPIO_Port,LED_CH2_Pin,GPIO_PIN_SET);
|
|
115
|
+ break;
|
|
116
|
+ case 3:
|
|
117
|
+ HAL_GPIO_WritePin(LED_CH3_GPIO_Port,LED_CH3_Pin,GPIO_PIN_SET);
|
|
118
|
+ break;
|
|
119
|
+ case 4:
|
|
120
|
+ HAL_GPIO_WritePin(LED_CH4_GPIO_Port,LED_CH4_Pin,GPIO_PIN_SET);
|
|
121
|
+ break;
|
|
122
|
+ case 5:
|
|
123
|
+ HAL_GPIO_WritePin(LED_CH5_GPIO_Port,LED_CH5_Pin,GPIO_PIN_SET);
|
|
124
|
+ break;
|
|
125
|
+ case 6:
|
|
126
|
+ HAL_GPIO_WritePin(LED_CH6_GPIO_Port,LED_CH6_Pin,GPIO_PIN_SET);
|
|
127
|
+ break;
|
|
128
|
+ case 7:
|
|
129
|
+ HAL_GPIO_WritePin(LED_CH7_GPIO_Port,LED_CH7_Pin,GPIO_PIN_SET);
|
|
130
|
+ break;
|
|
131
|
+ case 8:
|
|
132
|
+ HAL_GPIO_WritePin(LED_CH8_GPIO_Port,LED_CH8_Pin,GPIO_PIN_SET);
|
|
133
|
+ break;
|
|
134
|
+ }
|
|
135
|
+}
|
|
136
|
+
|
|
137
|
+void RGB_Alarm_Operate(void){
|
|
138
|
+ uint8_t temp_warning = 0;
|
|
139
|
+ for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
|
|
140
|
+ if(LED_Alarm[SensorID_buf[i]] == 1){
|
|
141
|
+ HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_SET); //표지 LED
|
|
142
|
+ RGB_Sensor_LED_Alarm_ON(SensorID_buf[i]);
|
|
143
|
+ temp_warning = 1;
|
|
144
|
+ }else{
|
|
145
|
+ RGB_Sensor_LED_Alarm_OFF(SensorID_buf[i]);
|
|
146
|
+ }
|
|
147
|
+ }
|
|
148
|
+ if(temp_warning == 0){ // 8개의 Sensor가 전부 정상일 때 만 동작
|
|
149
|
+ HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_RESET); //표지 LED
|
|
150
|
+ RGB_Sensor_LED_Alarm_OFF(0); //모든 Sensor가 정상일 때는 LED 가 켜지지 않는다.
|
|
151
|
+ }
|
|
152
|
+}
|
56
|
153
|
void RGB_Alarm_Check(uint8_t* data){
|
57
|
|
-
|
58
|
154
|
Sensor_red[data[bluecell_srcid]] = ((data[bluecell_red_H + 2] << 8)| data[bluecell_red_L + 2]);
|
59
|
155
|
Sensor_green[data[bluecell_srcid]] = ((data[bluecell_green_H + 2] << 8)| data[bluecell_green_L + 2]);
|
60
|
156
|
Sensor_blue[data[bluecell_srcid]] = ((data[bluecell_blue_H + 2] << 8)| data[bluecell_blue_L + 2]);
|
61
|
157
|
|
62
|
|
- uint8_t LED_Alarm = 0;
|
63
|
158
|
for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
|
64
|
159
|
if(RGB_SensorRedLimit_Buf[SensorID_buf[i]] >= Sensor_red[SensorID_buf[i]]
|
65
|
160
|
|| RGB_SensorGreenLimit_Buf[SensorID_buf[i]] >= Sensor_green[SensorID_buf[i]]
|
66
|
161
|
|| RGB_SensorBlueLimit_Buf[SensorID_buf[i]] >= Sensor_blue[SensorID_buf[i]]) {
|
67
|
|
- LED_Alarm = 1;
|
68
|
|
- break;
|
|
162
|
+ LED_Alarm[SensorID_buf[i]] = 1;
|
69
|
163
|
}else{
|
70
|
|
- LED_Alarm = 0;
|
|
164
|
+ LED_Alarm[SensorID_buf[i]] = 0;
|
71
|
165
|
}
|
72
|
166
|
}
|
73
|
|
- if(LED_Alarm == 1){
|
74
|
|
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
|
75
|
|
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
|
76
|
|
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET);
|
77
|
|
- }else{
|
78
|
|
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
|
79
|
|
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);
|
80
|
|
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_RESET);
|
81
|
|
- }
|
|
167
|
+ RGB_Data_Stack(&LED_Alarm[1]);
|
82
|
168
|
}
|
83
|
169
|
|
84
|
170
|
uint8_t RGB_DeviceStatusCheck(void){
|
|
@@ -92,6 +178,7 @@ uint8_t RGB_DeviceStatusCheck(void){
|
92
|
178
|
}
|
93
|
179
|
uint8_t Lora_Buf[100] = {0,};
|
94
|
180
|
|
|
181
|
+#if 0 // PYJ.2019.04.14_BEGIN -- //Uart Value Data
|
95
|
182
|
void RGB_Data_Stack(uint8_t* rgb_buf){
|
96
|
183
|
uint8_t mynumcnt = RGB_BufCal(rgb_buf[bluecell_srcid]);
|
97
|
184
|
Lora_Buf[bluecell_stx] = 0xbe;
|
|
@@ -122,6 +209,54 @@ uint8_t RGB_BufCal(uint8_t srcid){
|
122
|
209
|
}
|
123
|
210
|
return ret;
|
124
|
211
|
}
|
|
212
|
+#else //Uart Flag Data
|
|
213
|
+/*
|
|
214
|
+ 현재 Controller 가지고 있는 RGB Sensor ID Check
|
|
215
|
+ 현재 비정상적인 동작을 하는 Sensor 에대한 Flag 정보
|
|
216
|
+*/
|
|
217
|
+void RGB_Data_Stack(uint8_t* rgb_buf){
|
|
218
|
+ memset(&Lora_Buf[0],0x00,8);
|
|
219
|
+ /*********************FIX DATA*************************************/
|
|
220
|
+ Lora_Buf[bluecell_stx] = 0xbe;
|
|
221
|
+ Lora_Buf[bluecell_srcid + 4] = 0xeb;
|
|
222
|
+
|
|
223
|
+ Lora_Buf[bluecell_type] = RGB_Lora_Data_Report;
|
|
224
|
+ Lora_Buf[bluecell_length] = Lora_Max_Amount;// RGB Data 5byte
|
|
225
|
+ Lora_Buf[bluecell_srcid] = MyControllerID;
|
|
226
|
+ /*********************FIX DATA*************************************/
|
|
227
|
+ if(RGB_BufCal(SensorID_buf[1]) == 0){//아무런 Device가 존재 하지않을 때
|
|
228
|
+ printf("Not Exist Device \n");
|
|
229
|
+ return;
|
|
230
|
+ }
|
|
231
|
+ for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
|
|
232
|
+ Lora_Buf[bluecell_srcid + 1] |= 0x01 << (SensorID_buf[i] - 1);
|
|
233
|
+ }
|
|
234
|
+ for(uint8_t i = 0; i < 8; i++){
|
|
235
|
+ Lora_Buf[bluecell_srcid + 2] |= rgb_buf[i] << i ;
|
|
236
|
+ }
|
|
237
|
+ Lora_Buf[bluecell_srcid + 3]= STH30_CreateCrc(&Lora_Buf[bluecell_type],Lora_Buf[bluecell_length]);
|
|
238
|
+ LoraDataSendSet(1);
|
|
239
|
+}
|
|
240
|
+/*
|
|
241
|
+ RGB_Data_Stack에 Lora에 Data를 보내기 위해 Buffer에 Data를 쌓을 때
|
|
242
|
+ ID 마다 Location Cnt
|
|
243
|
+*/
|
|
244
|
+uint8_t RGB_BufCal(uint8_t srcid){
|
|
245
|
+ uint8_t ret = 0;
|
|
246
|
+ switch(srcid){
|
|
247
|
+ case 1:ret = 4;break;
|
|
248
|
+ case 2:ret = 7;break;
|
|
249
|
+ case 3:ret = 10;break;
|
|
250
|
+ case 4:ret = 13;break;
|
|
251
|
+ case 5:ret = 16;break;
|
|
252
|
+ case 6:ret = 29;break;
|
|
253
|
+ case 7:ret = 32;break;
|
|
254
|
+ case 8:ret = 35;break;
|
|
255
|
+ }
|
|
256
|
+ return ret;
|
|
257
|
+}
|
|
258
|
+
|
|
259
|
+#endif // PYJ.2019.04.14_END --
|
125
|
260
|
uint8_t datalosscnt[9] = {0,};
|
126
|
261
|
void RGB_Controller_Func(uint8_t* data){
|
127
|
262
|
RGB_CMD_T type = data[bluecell_type];
|
|
@@ -153,12 +288,12 @@ void RGB_Controller_Func(uint8_t* data){
|
153
|
288
|
break;
|
154
|
289
|
case RGB_Status_Data_Response:
|
155
|
290
|
datalosscnt[data[bluecell_srcid]] = 0;
|
156
|
|
- RGB_Data_Stack(&data[0]);
|
157
|
291
|
data[bluecell_length] += 1;// Device On OFF status Send byte
|
158
|
292
|
data[bluecell_srcid + 9] = RGB_DeviceStatusCheck();// Device On OFF status Send byte
|
159
|
293
|
memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
|
160
|
294
|
Result_buf[5] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
|
161
|
295
|
RGB_Alarm_Check(&data[bluecell_stx]);
|
|
296
|
+
|
162
|
297
|
break;
|
163
|
298
|
case RGB_ControllerLimitSet:
|
164
|
299
|
memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
|