Challenge

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  */
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.