Project 2 Adaptive Cruise Control
- Adoptive Cruise control Model
- Lead Vehicle
- Derive vehicle
- Code Generation
.C File
File: PROJECT_MBD.c
1 /*
2 * File: PROJECT_MBD.c
3 *
4 * Code generated for Simulink model 'PROJECT_MBD'.
5 *
6 * Model version : 1.47
7 * Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
8 * C/C++ source code generated on : Mon Jan 23 22:58:07 2023
9 *
10 * Target selection: ert.tlc
11 * Embedded hardware selection: Intel->x86-64 (Windows64)
12 * Code generation objectives: Unspecified
13 * Validation result: Not run
14 */
15
16 #include "PROJECT_MBD.h"
17 #include "PROJECT_MBD_private.h"
18
19 /* Named constants for Chart: '/Chart' */
20 #define IN_LeadVehicle_Detected_Follow ((uint8_T)1U)
21 #define IN_LeadVehicle_Detected_Resume ((uint8_T)2U)
22 #define IN_LeadVehicle_Not_Detected_Res ((uint8_T)4U)
23 #define IN_LeadVehicle_Speed_equal_Set_ ((uint8_T)5U)
24 #define IN_LeadVehicle_Speed_lessthan_S ((uint8_T)6U)
25 #define PROJECT_MBD_IN_ACC_OFF ((uint8_T)1U)
26 #define PROJECT_MBD_IN_ACC_ON ((uint8_T)2U)
27 #define PROJECT_MBD_IN_ACC_STANDBY ((uint8_T)3U)
28 #define PROJECT_MBD_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
29 #define PRO_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
30
31 /* Block states (default storage) */
32 DW_PROJECT_MBD_T PROJECT_MBD_DW;
33
34 /* External outputs (root outports fed by signals with default storage) */
35 ExtY_PROJECT_MBD_T PROJECT_MBD_Y;
36 real_T rt_roundd(real_T u)
37 {
38 real_T y;
39 if (fabs(u) < 4>= 0.5) {
41 y = floor(u + 0.5);
42 } else if (u > -0.5) {
43 y = 0.0;
44 } else {
45 y = ceil(u - 0.5);
46 }
47 } else {
48 y = u;
49 }
50
51 return y;
52 }
53
54 /* Model step function */
55 void PROJECT_MBD_step(void)
56 {
57 /* local block i/o variables */
58 uint8_T LeadVehicle_Speed;
59 uint8_T DriveVehicle_Speed;
60 uint8_T LeadVehicle_Detected;
61 int32_T tmp;
62 int32_T tmp_0;
63 uint8_T tmp_1;
64 uint8_T tmp_2;
65
66 /* Outputs for Atomic SubSystem: '/Subsystem' */
67 /* Outputs for Atomic SubSystem: '/Drive Vehicle'
68 *
69 * Block description for '/Drive Vehicle':
70 * Drive Vehicle is the vehicle driven by the user & this is the vehicle
71 * which has ACC algorithm in it.
72 */
73 /* Sum: '/Add' incorporates:
74 * Inport: '/ CameraInput_DriveVehicle'
75 * Inport: '/RadarInput_DriveVehicle'
76 * UnitDelay: '/ Unit Delay'
77 */
78 DriveVehicle_Speed = (uint8_T)(((uint32_T)((uint8_T)(((uint32_T)
79 CameraInput_DriveVehicle) + RadarInput_DriveVehicle))) +
80 PROJECT_MBD_Y.Acceleration_Mode);
81
82 /* SignalConversion: '/Signal Conversion' incorporates:
83 * Inport: '/RadarInput_DriveVehicle'
84 */
85 LeadVehicle_Detected = RadarInput_DriveVehicle;
86
87 /* End of Outputs for SubSystem: '/Drive Vehicle' */
88
89 /* Outputs for Atomic SubSystem: '/Lead Vehicle'
90 *
91 * Block description for '/Lead Vehicle':
92 * Lead Vehicle is a vehicle which is driving in the road ahead of our
93 * drive vehicle. Two input signals (Signal Name: CameraInput_LeadVehicle
94 * & RadarInput_LeadVehicle).
95 */
96 /* Sum: '/Add' incorporates:
97 * Inport: '/ CameraInput_LeadVehicle'
98 * Inport: '/RadarInput_LeadVehicle'
99 *
100 * Block description for '/Add':
101 * hSDZnhjfdsb
102 */
103 LeadVehicle_Speed = (uint8_T)(((uint32_T)CameraInput_LeadVehicle) +
104 RadarInput_LeadVehicle);
105
106 /* End of Outputs for SubSystem: '/Lead Vehicle' */
107
108 /* Outputs for Atomic SubSystem: '/ACC_Subsystem'
109 *
110 * Block description for '/ACC_Subsystem':
111 * Adaptive Cruise Control feature has 3 major modes of operation: OFF
112 * Mode, STANDBY Mode & ON Mode. This particular requirement has to be
113 * implemented as state machine logic in Simulink.
114 */
115 /* Chart: '/Chart' incorporates:
116 * Inport: '/CruiseSwitch'
117 * Inport: '/SetSwitch'
118 * Inport: '/Set_Gap'
119 * Inport: '/Set_Speed'
120 * Inport: '/Time_Gap'
121 * UnitDelay: '/ Unit Delay'
122 */
123 if (PROJECT_MBD_DW.is_active_c3_PROJECT_MBD == 0U) {
124 PROJECT_MBD_DW.is_active_c3_PROJECT_MBD = 1U;
125 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_ACC_OFF;
126 PROJECT_MBD_Y.Acceleration_Mode = 0U;
127 } else {
128 switch (PROJECT_MBD_DW.is_c3_PROJECT_MBD) {
129 case PROJECT_MBD_IN_ACC_OFF:
130 if (CruiseSwitch) {
131 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_ACC_STANDBY;
132 PROJECT_MBD_Y.Acceleration_Mode = 1U;
133 } else {
134 PROJECT_MBD_Y.Acceleration_Mode = 0U;
135 }
136 break;
137
138 case PROJECT_MBD_IN_ACC_ON:
139 if (!SetSwitch) {
140 PROJECT_MBD_DW.is_ACC_ON = PROJECT_MBD_IN_NO_ACTIVE_CHILD;
141 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_ACC_STANDBY;
142 PROJECT_MBD_Y.Acceleration_Mode = 1U;
143 } else {
144 switch (PROJECT_MBD_DW.is_ACC_ON) {
145 case IN_LeadVehicle_Detected_Follow:
146 if (LeadVehicle_Detected == 0) {
147 PROJECT_MBD_DW.is_ACC_ON = PRO_IN_LeadVehicle_Not_Detected;
148 PROJECT_MBD_Y.Acceleration_Mode = 1U;
149 } else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
150 xss=removed xss=removed xss=removed xss=removed>=
160 Set_Speed)) && (Time_Gap >= Set_Gap)) {
161 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Detected_Follow;
162 PROJECT_MBD_Y.Acceleration_Mode = 2U;
163 } else if (LeadVehicle_Detected == 0) {
164 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Not_Detected_Res;
165 PROJECT_MBD_Y.Acceleration_Mode = 1U;
166 } else if (((DriveVehicle_Speed < Set>
167 DriveVehicle_Speed)) && (Time_Gap >= Set_Gap)) {
168 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Speed_equal_Set_;
169 PROJECT_MBD_Y.Acceleration_Mode = 5U;
170 } else {
171 PROJECT_MBD_Y.Acceleration_Mode = 3U;
172 }
173 break;
174
175 case PRO_IN_LeadVehicle_Not_Detected:
176 if ((((LeadVehicle_Detected == 1) && (DriveVehicle_Speed == Set_Speed))
177 && (LeadVehicle_Speed >= Set_Speed)) && (Time_Gap >= Set_Gap)) {
178 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Detected_Follow;
179 PROJECT_MBD_Y.Acceleration_Mode = 2U;
180 } else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
181 xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed>
199 DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
200 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Detected_Resume;
201 PROJECT_MBD_Y.Acceleration_Mode = 3U;
202 } else if (((LeadVehicle_Speed < Set xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed>= DriveVehicle_Speed) && (((int32_T)rt_roundd(((real_T)
229 LeadVehicle_Speed) * 0.75)) <= DriveVehicle_Speed)) &&
230 (DriveVehicle_Speed < Set xss=removed>= ((int32_T)rt_roundd(0.75 * ((real_T)Set_Gap))))) {
232 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Speed_equal_Set_;
233 PROJECT_MBD_Y.Acceleration_Mode = 5U;
234 } else if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed ==
235 Set_Speed)) {
236 PROJECT_MBD_DW.is_ACC_ON = PRO_IN_LeadVehicle_Not_Detected;
237 PROJECT_MBD_Y.Acceleration_Mode = 1U;
238 } else {
239 PROJECT_MBD_Y.Acceleration_Mode = 4U;
240 }
241 break;
242 }
243 }
244 break;
245
246 default:
247 /* case IN_ACC_STANDBY: */
248 if (!CruiseSwitch) {
249 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_ACC_OFF;
250 PROJECT_MBD_Y.Acceleration_Mode = 0U;
251 } else if (SetSwitch) {
252 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_ACC_ON;
253 PROJECT_MBD_DW.is_ACC_ON = IN_LeadVehicle_Detected_Follow;
254 PROJECT_MBD_Y.Acceleration_Mode = 2U;
255 } else {
256 PROJECT_MBD_Y.Acceleration_Mode = 1U;
257 }
258 break;
259 }
260 }
261
262 /* End of Chart: '/Chart' */
263 /* End of Outputs for SubSystem: '/ACC_Subsystem' */
264 /* End of Outputs for SubSystem: '/Subsystem' */
265 }
266
267 /* Model initialize function */
268 void PROJECT_MBD_initialize(void)
269 {
270 /* Registration code */
271
272 /* states (dwork) */
273 (void) memset((void *)&PROJECT_MBD_DW, 0,
274 sizeof(DW_PROJECT_MBD_T));
275
276 /* external outputs */
277 PROJECT_MBD_Y.Acceleration_Mode = 0U;
278
279 /* SystemInitialize for Atomic SubSystem: '/Subsystem' */
280 /* SystemInitialize for Atomic SubSystem: '/ACC_Subsystem'
281 *
282 * Block description for '/ACC_Subsystem':
283 * Adaptive Cruise Control feature has 3 major modes of operation: OFF
284 * Mode, STANDBY Mode & ON Mode. This particular requirement has to be
285 * implemented as state machine logic in Simulink.
286 */
287 /* SystemInitialize for Chart: '/Chart' */
288 PROJECT_MBD_DW.is_ACC_ON = PROJECT_MBD_IN_NO_ACTIVE_CHILD;
289 PROJECT_MBD_DW.is_active_c3_PROJECT_MBD = 0U;
290 PROJECT_MBD_DW.is_c3_PROJECT_MBD = PROJECT_MBD_IN_NO_ACTIVE_CHILD;
291
292 /* End of SystemInitialize for SubSystem: '/ACC_Subsystem' */
293 /* End of SystemInitialize for SubSystem: '/Subsystem' */
294 }
295
296 /*
297 * File trailer for generated code.
298 *
299 * [EOF]
300 */
301
. H File
File: PROJECT_MBD.h
1 /*
2 * File: PROJECT_MBD.h
3 *
4 * Code generated for Simulink model 'PROJECT_MBD'.
5 *
6 * Model version : 1.47
7 * Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
8 * C/C++ source code generated on : Mon Jan 23 22:58:07 2023
9 *
10 * Target selection: ert.tlc
11 * Embedded hardware selection: Intel->x86-64 (Windows64)
12 * Code generation objectives: Unspecified
13 * Validation result: Not run
14 */
15
16 #ifndef RTW_HEADER_PROJECT_MBD_h_
17 #define RTW_HEADER_PROJECT_MBD_h_
18 #include
19 #include
20 #ifndef PROJECT_MBD_COMMON_INCLUDES_
21 #define PROJECT_MBD_COMMON_INCLUDES_
22 #include "rtwtypes.h"
23 #endif /* PROJECT_MBD_COMMON_INCLUDES_ */
24
25 #include "PROJECT_MBD_types.h"
26
27 /* Macros for accessing real-time model data structure */
28
29 /* Block states (default storage) for system '' */
30 typedef struct {
31 uint8_T is_active_c3_PROJECT_MBD; /* '/Chart' */
32 uint8_T is_c3_PROJECT_MBD; /* '/Chart' */
33 uint8_T is_ACC_ON; /* '/Chart' */
34 } DW_PROJECT_MBD_T;
35
36 /* External outputs (root outports fed by signals with default storage) */
37 typedef struct {
38 uint8_T Acceleration_Mode; /* '/Acceleration_Mode' */
39 } ExtY_PROJECT_MBD_T;
40
41 /* Block states (default storage) */
42 extern DW_PROJECT_MBD_T PROJECT_MBD_DW;
43
44 /* External outputs (root outports fed by signals with default storage) */
45 extern ExtY_PROJECT_MBD_T PROJECT_MBD_Y;
46
47 /* Model entry point functions */
48 extern void PROJECT_MBD_initialize(void);
49 extern void PROJECT_MBD_step(void);
50
51 /*-
52 * The generated code includes comments that allow you to trace directly
53 * back to the appropriate location in the model. The basic format
54 * is /block_name, where system is the system number (uniquely
55 * assigned by Simulink) and block_name is the name of the block.
56 *
57 * Use the MATLAB hilite_system command to trace the generated code back
58 * to the model. For example,
59 *
60 * hilite_system('') - opens system 3
61 * hilite_system('/Kp') - opens and selects block Kp which resides in S3
62 *
63 * Here is the system hierarchy for this model
64 *
65 * '' : 'PROJECT_MBD'
66 * '' : 'PROJECT_MBD/Subsystem'
67 * '' : 'PROJECT_MBD/Subsystem/ACC_Subsystem'
68 * '' : 'PROJECT_MBD/Subsystem/Drive Vehicle'
69 * '' : 'PROJECT_MBD/Subsystem/Lead Vehicle'
70 * '' : 'PROJECT_MBD/Subsystem/ACC_Subsystem/Chart'
71 */
72
73 /*-
74 * Requirements for '': PROJECT_MBD
75 */
76 #endif /* RTW_HEADER_PROJECT_MBD_h_ */
77
78 /*
79 * File trailer for generated code.
80 *
81 * [EOF]
82 */