Challenge

Project 2 Adaptive Cruise Control

Aim - Develop a Model for Adaptive Cruise Control feature used in Automotive Vehicle.

Objective,

> To develop a Adaptive Cruise Control feature as per the Requirement Document using MATLAB Simulink.

> While Developing the Adaptive Cruise Control Simulink Model, we have follow all the MBD related processes such as Requirement Tagging &
Traceability file.

> Creating a SLDD (Simulink Data Dictionary)file for storing the input/output signals and constant parameters.

Development of Adaptive Cruise Control Model:

Now double click on the subsystem

main model will be open

> In the Adaptive Cruise Control model, we have given the total 9 nos. of input signals i.e. CameraInput_LeadVehicle, RadarInput_LeadVehicle,
CameraInput_DriveVehicle, RadarInput_DriveVehicle, Time_Gap, Set_Speed, Set_Gap, CruiseSwitch, SetSwitch and with the logic, we are
getting one output signal i.e. Acceleration Mode.

> This control logic will take into consideration all these above input signals and if there is no lead vehicle detected by Camera and Radar sensor of
Drive Vehicle, then Adaptive Cruise Control (ACC) will will provide the required acceleration to the vehicle to meet the speed requirement set by
driver.

> This total 9 inputs signals are generated / used for first time hence, we will resolve the same by right clicking on the particular signal properties.

Requirement 1 - Lead Vehicle:

> Lead Vehicle is a vehicle which is driving in the road ahead of our drive vehicle. In the Lead Vehicle subsystem, two input signals i.e. Signal
Name: CameraInput_LeadVehicle & RadarInput_LeadVehicle are added and the corresponding output is read as Speed profile output

> Ideally sensor fusion techniques will be deployed to process & analyze data from camera & radar. For complexity reasons, let’s not adapt to any
such algorithms.

> Speed data of the lead vehicle is critical in implementing the Adaptive Cruise Control algorithm.

Requirement 2 – Drive Vehicle:

> Drive Vehicle is the vehicle driven by the user & this is the vehicle which has ACC algorithm in it.

> In the Drive Vehicle subsytem, there are total 2 input signals (Signal Name: CameraInput_DriveVehicle, RadarInput_DriveVehicle) & one
signal coming as an Input to this subsystem (Signal Name: Acceleration_Mode) . It means that total 3 nos. of signals are applied as an input to
Drive Vehicle Subsystem.

> In this, one output signal DriveVehicle_Speed is nothing but an addition of three input signals & other output signal i.e. LeadVehicle_Detected is renamed from Input Signal


Requirement 3 – Adaptive Cruise Control Algorithm:

> Now double click on it

> Adaptive Cruise Control feature has 3 major modes of operation: OFF Mode, STANDBY Mode & ON Mode. This particular requirement has to be
implemented as state machine logic in Simulink.

> The input signals to this state machine system are (Signal Name: Time_Gap, Set_Speed, Set_Gap, CruiseSwitch, SetSwitch).

> Also, the output signals (Signal Name: DriveVehicle_Speed & LeadVehicle_Detected) from Drive vehicle subsystem block is fed back as an
input signal into this state machine block. Additionally, output signal (Signal Name: LeadVehicle_Speed) from Lead vehicle subsystem is given
as an input signal to this state machine block as well.

> Output signal from this subsystem is Acceleration_Mode which governs the vehicular speed of the drive vehicle which automatically adjusts its
speed & velocity to match the lead vehicle.

Requirement 3a – ACC OFF MODE state logic:

> In the stateflow logic chart, ACC_OFF_MODE is the default state inside state machine logic. Output signal Acceleration_Mode is at value 0 in
this state.
> This state is governed by input signal CruiseSwitch. If CruiseSwitch is equal to 1, state ACC_STANDBY_MODE will get activated.
> If CruiseSwitch is equal to 0, state ACC_OFF_MODE will get activated, from either ACC_ON_MODE or ACC_STANDBY_MODE.

Requirement 3b – ACC STANDBY MODE state logic:

> This is the second activated state inside state machine logic. Output signal Acceleration_Mode is at value 1 in this state.
> This state is governed by both input signals CruiseSwitch & SetSwitch.
> If [CruiseSwitch==1], state ACC_STANDBY_MODE will get activated. If [CruiseSwitch==0], ACC_OFF_MODE state will get activated, from
either ACC_ON_MODE or ACC_STANDBY_MODE.
> If [SetSwitch==1], state ACC_ON_MODE state will get activated. If [SetSwitch==0], state ACC_STANDBY_MODE will get activated.

Requirement 3c – ACC_ON_MODE state logic:

> ACC_STANDBY_MODE state goes into ACC_ON_MODE state when input signal [SetSwitch==1].
> There are 6 sub states to this state logic: They are:

1. LeadVehicle_Detected_Follow (Default)
2. LeadVehicle_Not_Detected
3. LeadVehicle_Detected_Resume
4. LeadVehicle_Not_Detected_Resume
5. LeadVehicle_Speed_lessthan_Set_Speed
6. LeadVehicle_Speed_equal_Set_Speed

Requirement 3c (i) :– LeadVehicle_Detected_Follow (ACC_ON_MODE):

> This is the default sub state inside ACC_ON_MODE state. Output signal Acceleration_Mode is equal to 2.
> When input signal condition i.e. [LeadVehicle_Detected == 0] gets satisfied, there is a transition of
> state from LeadVehicle_Detected_Follow to LeadVehicle_Not_Detected.
>When input Signals condition (LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_Speed) || (Time_Gap < Set_Gap) gets satisfied,
there is a transition of state from LeadVehicle_Detected_Follow to LeadVehicle_Speed_lessthan_Set_Speed.

Requirement 3c (ii) – LeadVehicle_Not_Detected (ACC_ON_MODE):

> Output signal Acceleration_Mode is equal to 1.
> When input signals condition [(LeadVehicle_Detected==1) && (DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >= Set_Speed)
&& (Time_Gap >= Set_Gap)] gets satisifed, there is a transition of state from LeadVehicle_Not_Detected to LeadVehicle_Detected_Follow.
> When input signals condition [(LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_Speed) || (Time_Gap < Set_Gap)] gets satisfied,
there is a transition of state from LeadVehicle_Not_Detected to LeadVehicle_Speed_lessthan_Set_Speed.

Requirement 3c (iii) – LeadVehicle_Detected_Resume (ACC_ON_MODE):

> Output signal Acceleration_Mode is equal to 3.
> Condition to transit from LeadVehicle_Detected_Resume to LeadVehicle_Detected_Follow; When input signals condition [(DriveVehicle_Speed
== Set_Speed) && (LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)] gets satisfied, there is a transition of state
from LeadVehicle_Detected_Resume to LeadVehicle_Not_Detected_Resume.
> When input Signal condition [(DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed > DriveVehicle_Speed) && (Time_Gap >=
Set_Gap)] gets satisfied, there is a transition of state from LeadVehicle_Detected_Resume to LeadVehicle_Speed_equal_Set_Speed.

Requirement 3c (iv) - LeadVehicle_Not_Detected_Resume (ACC_ON_MODE):

> Output signal Acceleration_Mode is equal to 1.

Requirement 3c (v) - LeadVehicle_Speed_lessthan_Set_Speed (ACC_ON_MODE):

> Output signal Acceleration_Mode is equal to 4.
> When input Signal condition [(LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed)] gets satisfied, there is a transition of stat
from LeadVehicle_Speed_lessthan_Set_Speed to LeadVehicle_Not_Detected.
> When input signals condition [((LeadVehicle_Speed*1.25>=DriveVehicle_Speed) && (LeadVehicle_Speed * 0.75<=DriveVehicle_Speed)) &&
(DriveVehicle_Speed < Set_Speed) && ((Time_Gap<=1.25*Set_Gap) && (Time_Gap >=0.75*Set_Gap))] gets satisfied, there is a transition of
state from LeadVehicle_Speed_lessthan_Set_Speed to LeadVehicle_Speed_equal_Set_Speed.

Requirement 3c (vi) - LeadVehicle_Speed_equal_Set_Speed (ACC_ON_MODE):

> Output signal Acceleration_Mode is equal to 5.
> When input signal conditions [(LeadVehicle_Detected == 0) || (DriveVehicle_Speed <= Set_Speed)] gets satisfied, there is a transition of state
from LeadVehicle_Speed_equal_Set_Speed to LeadVehicle_Not_Detected_Resume.
> When input signal conditions [(DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed > DriveVehicle_Speed) || (Time_Gap >=
Set_Gap)] gets satisfied, there is a transition of state from LeadVehicle_Speed_equal_Set_Speed to LeadVehicle_Detected_Resume.
> When input signals conditions [(LeadVehicle_Speedgets satisfied, there is a transition of state from LeadVehicle_Speed_equal_Set_Spee
to LeadVehicle_Speed_lessthan_Set_Speed.

> After completing the connection as per requirement, Then go to modeling tab and click on symbols pane and select the for input and output

( input signals - Curise switch, time gap, set speed, set gap, setswitch, Lead vehile speed, Drive vehicle speed, Lead vehicle detected)

(output signals - Accleration mode)

> Now click on Model setting

Now Select the type as fixed and solver as discrete (no continuous state)

> Now click on code generation

and change the code type as ert.tlc ( embedded coder) and select ok.

Now need to create the SLDD file.

Select link to data dictionary

Now select new and create a data dictionary, also click on add to path.

Then it been added to the dd.

Now click on model explorer

now select the data dictonary which we created. and the signals as given in the questions.

Signals & Calibration Data List:

Signal / Calibration Name

Signal Type

Data Type

Dimension

Min

Max

Initial Value

Units

CameraInput_LeadVehicle

Input

Uint8

1

0

255

-

-

RadarInput_LeadVehicle

Input

Uint8

1

0

255

-

-

CameraInput_DriveVehicle

Input

Uint8

1

0

255

-

-

RadarInput_DriveVehicle

Input

Uint8

1

0

255

-

-

Time_Gap

Input

Uint8

1

0

255

-

-

Set_Speed

Input

Uint8

1

0

255

-

-

Set_Gap

Input

Uint8

1

0

255

-

-

CruiseSwitch

Input

Boolean

1

0

1

-

-

SetSwitch

Input

Boolean

1

0

1

-

-

Acceleration_Mode

Output

Uint8

1

0

255

-

-

LeadVehicle_Speed

Output

Uint8

1

0

255

-

-

DriveVehicle_Speed

Output

Uint8

1

0

255

-

-

LeadVehicle_Detected

Output

Uint8

1

0

255

-

-

Adding these all signals is going to same, but slight change in Accleration mode signal

for acclearation mode fil the given values in question, Change the storagee type as export to file

Requirement Tagging of Simulink Model:

> The requirements ‘Requirement 1’ , ‘Requirement 2’ , and ‘Requirement 3’ as provided in the Requirements Word document are tagged to their

Steps for tagging a requirement in Simulink model :


> First, we have highlight/ select the requirement statement in the Word document file. This word document file needs to be same MATLAB path.
> Then, we have to go in Simulink Model and right click on particular subsystem, we need to tag. After right clicking, we have to select
'Requirements' and then click on 'link to Selection in word'. Then, the particular subsytem will get tagged for the highlighted text on word
documents file.
> After doing sucessful tagging, MATLAB traceability file is generated in the same MATLAB path.
> We have considered above steps while tagging the Requirement1,Requirement2 and Requirement3 and the same are as under;
Tagging for Requirement - 1 (Lead Vehicle):-

Tagging for Requirement - 2 (Drive Vehicle):

Tagging for Requirement -3 Adaptive Cruise Control Algorithm:

Steps for Checking MAB Guidelines :

Steps for Generation of Code from model:

Now go to C code and click on it

now click on generate code

now the c code been generated and it has been attached below

*
 * File: adaptive_cruise_control_Finalproject.c
 *
 * Code generated for Simulink model 'adaptive_cruise_control_Finalproject'.
 *
 * Model version                  : 1.46
 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
 * C/C++ source code generated on : Fri Feb 25 15:10:38 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#include "adaptive_cruise_control_Finalproject.h"
#include "adaptive_cruise_control_Finalproject_private.h"

/* Named constants for Chart: '<S2>/ACC_Logic' */
#define IN_LeadVehicle_Detected_Follow ((uint8_T)1U)
#define IN_LeadVehicle_Detected_Resume ((uint8_T)2U)
#define IN_LeadVehicle_Not_Detected_Res ((uint8_T)4U)
#define IN_LeadVehicle_Speed_equal_Set_ ((uint8_T)5U)
#define IN_LeadVehicle_Speed_lessthan_S ((uint8_T)6U)
#define ada_IN_LeadVehicle_Not_Detected ((uint8_T)3U)
#define adaptive_cr_IN_ACC_STANDBY_MODE ((uint8_T)3U)
#define adaptive_cru_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
#define adaptive_cruise_IN_ACC_OFF_MODE ((uint8_T)1U)
#define adaptive_cruise__IN_ACC_ON_MODE ((uint8_T)2U)

/* Block states (default storage) */
DW_adaptive_cruise_control_Fi_T adaptive_cruise_control_Fina_DW;

/* External outputs (root outports fed by signals with default storage) */
ExtY_adaptive_cruise_control__T adaptive_cruise_control_Final_Y;

/* Real-time model */
static RT_MODEL_adaptive_cruise_cont_T adaptive_cruise_control_Fina_M_;
RT_MODEL_adaptive_cruise_cont_T *const adaptive_cruise_control_Fina_M =
  &adaptive_cruise_control_Fina_M_;
real_T rt_roundd_snf(real_T u)
{
  real_T y;
  if (fabs(u) < 4.503599627370496E+15) {
    if (u >= 0.5) {
      y = floor(u + 0.5);
    } else if (u > -0.5) {
      y = u * 0.0;
    } else {
      y = ceil(u - 0.5);
    }
  } else {
    y = u;
  }

  return y;
}

/* Model step function */
void adaptive_cruise_control_Finalproject_step(void)
{
  /* local block i/o variables */
  uint8_T LeadVehicle_Speed;
  uint8_T DriveVehicle_Speed;
  uint8_T LeadVehicle_Detected;
  int32_T tmp;
  int32_T tmp_0;
  uint8_T tmp_1;
  uint8_T tmp_2;

  /* Sum: '<S4>/Add' incorporates:
   *  Inport: '<Root>/CameraInput_LeadVehicle'
   *  Inport: '<Root>/RadarInput_LeadVehicle'
   */
  LeadVehicle_Speed = (uint8_T)((uint32_T)CameraInput_LeadVehicle +
    RadarInput_LeadVehicle);

  /* UnitDelay: '<S1>/Unit Delay' */
  Acceleration_Mode = adaptive_cruise_control_Final_Y.Acceleration_Mode_h;

  /* Sum: '<S3>/Add' incorporates:
   *  Inport: '<Root>/CameraInput_DriveVehicle'
   *  Inport: '<Root>/RadarInput_DriveVehicle'
   */
  DriveVehicle_Speed = (uint8_T)((uint32_T)(uint8_T)((uint32_T)
    CameraInput_DriveVehicle + RadarInput_DriveVehicle) + Acceleration_Mode);

  /* SignalConversion: '<S3>/Signal Conversion' incorporates:
   *  Inport: '<Root>/RadarInput_DriveVehicle'
   */
  LeadVehicle_Detected = RadarInput_DriveVehicle;

  /* Chart: '<S2>/ACC_Logic' incorporates:
   *  Inport: '<Root>/CruiseSwitch'
   *  Inport: '<Root>/SetSwitch'
   *  Inport: '<Root>/Set_Gap'
   *  Inport: '<Root>/Set_Speed'
   *  Inport: '<Root>/Time_Gap'
   *  UnitDelay: '<S1>/Unit Delay'
   */
  if (adaptive_cruise_control_Fina_DW.is_active_c3_adaptive_cruise_co == 0U) {
    adaptive_cruise_control_Fina_DW.is_active_c3_adaptive_cruise_co = 1U;
    adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
      adaptive_cruise_IN_ACC_OFF_MODE;
    adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 0U;
  } else {
    switch (adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F) {
     case adaptive_cruise_IN_ACC_OFF_MODE:
      adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 0U;
      if (CruiseSwitch) {
        adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
          adaptive_cr_IN_ACC_STANDBY_MODE;
        adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
      }
      break;

     case adaptive_cruise__IN_ACC_ON_MODE:
      if (!CruiseSwitch) {
        adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
          adaptive_cru_IN_NO_ACTIVE_CHILD;
        adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
          adaptive_cruise_IN_ACC_OFF_MODE;
        adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 0U;
      } else if (!SetSwitch) {
        adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
          adaptive_cru_IN_NO_ACTIVE_CHILD;
        adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
          adaptive_cr_IN_ACC_STANDBY_MODE;
        adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
      } else {
        switch (adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE) {
         case IN_LeadVehicle_Detected_Follow:
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 2U;
          if (LeadVehicle_Detected == 0) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              ada_IN_LeadVehicle_Not_Detected;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          } else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
                       Set_Speed)) || (Time_Gap < Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Speed_lessthan_S;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 4U;
          }
          break;

         case IN_LeadVehicle_Detected_Resume:
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 3U;
          if (LeadVehicle_Detected == 0) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Not_Detected_Res;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          } else if ((DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >=
                      Set_Speed) && (Time_Gap >= Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Detected_Follow;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 2U;
          } else if ((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
                      DriveVehicle_Speed) && (Time_Gap >= Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Speed_equal_Set_;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 5U;
          }
          break;

         case ada_IN_LeadVehicle_Not_Detected:
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          if ((LeadVehicle_Detected == 1) && (DriveVehicle_Speed == Set_Speed) &&
              (LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Detected_Follow;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 2U;
          } else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
                       Set_Speed)) || (Time_Gap < Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Speed_lessthan_S;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 4U;
          }
          break;

         case IN_LeadVehicle_Not_Detected_Res:
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          break;

         case IN_LeadVehicle_Speed_equal_Set_:
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 5U;
          if ((LeadVehicle_Detected == 0) || (DriveVehicle_Speed <= Set_Speed))
          {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Not_Detected_Res;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          } else if (((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
                       DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Detected_Resume;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 3U;
          } else if (((LeadVehicle_Speed < Set_Speed) && (LeadVehicle_Speed <
                       DriveVehicle_Speed)) || ((int32_T)rt_roundd_snf(0.75 *
                       (real_T)Set_Gap) == Time_Gap)) {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              IN_LeadVehicle_Speed_lessthan_S;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 4U;
          }
          break;

         default:
          /* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
          adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 4U;
          if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed))
          {
            adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
              ada_IN_LeadVehicle_Not_Detected;
            adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
          } else {
            tmp = (int32_T)rt_roundd_snf((real_T)LeadVehicle_Speed * 1.25);
            tmp_0 = (int32_T)rt_roundd_snf(1.25 * (real_T)Set_Gap);
            if (tmp < 256) {
              tmp_1 = (uint8_T)tmp;
            } else {
              tmp_1 = MAX_uint8_T;
            }

            if (tmp_0 < 256) {
              tmp_2 = (uint8_T)tmp_0;
            } else {
              tmp_2 = MAX_uint8_T;
            }

            if ((tmp_1 >= DriveVehicle_Speed) && ((int32_T)rt_roundd_snf((real_T)
                  LeadVehicle_Speed * 0.75) <= DriveVehicle_Speed) &&
                (DriveVehicle_Speed < Set_Speed) && (Time_Gap <= tmp_2) &&
                (Time_Gap >= (int32_T)rt_roundd_snf(0.75 * (real_T)Set_Gap))) {
              adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
                IN_LeadVehicle_Speed_equal_Set_;
              adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 5U;
            }
          }
          break;
        }
      }
      break;

     default:
      /* case IN_ACC_STANDBY_MODE: */
      adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 1U;
      if (!CruiseSwitch) {
        adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
          adaptive_cruise_IN_ACC_OFF_MODE;
        adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 0U;
      } else if (SetSwitch) {
        adaptive_cruise_control_Fina_DW.is_c3_adaptive_cruise_control_F =
          adaptive_cruise__IN_ACC_ON_MODE;
        adaptive_cruise_control_Fina_DW.is_ACC_ON_MODE =
          IN_LeadVehicle_Detected_Follow;
        adaptive_cruise_control_Final_Y.Acceleration_Mode_h = 2U;
      }
      break;
    }
  }

  /* End of Chart: '<S2>/ACC_Logic' */
}

/* Model initialize function */
void adaptive_cruise_control_Finalproject_initialize(void)
{
  /* (no initialization code required) */
}

/* Model terminate function */
void adaptive_cruise_control_Finalproject_terminate(void)
{
  /* (no terminate code required) */
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */
/*
 * File: adaptive_cruise_control_Finalproject.h
 *
 * Code generated for Simulink model 'adaptive_cruise_control_Finalproject'.
 *
 * Model version                  : 1.46
 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
 * C/C++ source code generated on : Fri Feb 25 15:10:38 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#ifndef RTW_HEADER_adaptive_cruise_control_Finalproject_h_
#define RTW_HEADER_adaptive_cruise_control_Finalproject_h_
#include <math.h>
#ifndef adaptive_cruise_control_Finalproject_COMMON_INCLUDES_
#define adaptive_cruise_control_Finalproject_COMMON_INCLUDES_
#include "rtwtypes.h"
#endif               /* adaptive_cruise_control_Finalproject_COMMON_INCLUDES_ */

#include "adaptive_cruise_control_Finalproject_types.h"

/* Includes for objects with custom storage classes. */
#include "cruise_head.h"

/* Macros for accessing real-time model data structure */
#ifndef rtmGetErrorStatus
#define rtmGetErrorStatus(rtm)         ((rtm)->errorStatus)
#endif

#ifndef rtmSetErrorStatus
#define rtmSetErrorStatus(rtm, val)    ((rtm)->errorStatus = (val))
#endif

/* Block states (default storage) for system '<Root>' */
typedef struct {
  uint8_T is_active_c3_adaptive_cruise_co;/* '<S2>/ACC_Logic' */
  uint8_T is_c3_adaptive_cruise_control_F;/* '<S2>/ACC_Logic' */
  uint8_T is_ACC_ON_MODE;              /* '<S2>/ACC_Logic' */
} DW_adaptive_cruise_control_Fi_T;

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  uint8_T Acceleration_Mode_h;         /* '<Root>/Acceleration_Mode' */
} ExtY_adaptive_cruise_control__T;

/* Real-time Model Data Structure */
struct tag_RTM_adaptive_cruise_contr_T {
  const char_T * volatile errorStatus;
};

/* Block states (default storage) */
extern DW_adaptive_cruise_control_Fi_T adaptive_cruise_control_Fina_DW;

/* External outputs (root outports fed by signals with default storage) */
extern ExtY_adaptive_cruise_control__T adaptive_cruise_control_Final_Y;

/* Model entry point functions */
extern void adaptive_cruise_control_Finalproject_initialize(void);
extern void adaptive_cruise_control_Finalproject_step(void);
extern void adaptive_cruise_control_Finalproject_terminate(void);

/* Real-time Model object */
extern RT_MODEL_adaptive_cruise_cont_T *const adaptive_cruise_control_Fina_M;

/*-
 * The generated code includes comments that allow you to trace directly
 * back to the appropriate location in the model.  The basic format
 * is <system>/block_name, where system is the system number (uniquely
 * assigned by Simulink) and block_name is the name of the block.
 *
 * Use the MATLAB hilite_system command to trace the generated code back
 * to the model.  For example,
 *
 * hilite_system('<S3>')    - opens system 3
 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
 *
 * Here is the system hierarchy for this model
 *
 * '<Root>' : 'adaptive_cruise_control_Finalproject'
 * '<S1>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control'
 * '<S2>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Cruise_Control_Algorithm'
 * '<S3>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Drive_Vehicle'
 * '<S4>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Lead_Vehicle'
 * '<S5>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Cruise_Control_Algorithm/ACC_Logic'
 */
#endif                  /* RTW_HEADER_adaptive_cruise_control_Finalproject_h_ */

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

/*
 * File: adaptive_cruise_control_Finalproject.h
 *
 * Code generated for Simulink model 'adaptive_cruise_control_Finalproject'.
 *
 * Model version                  : 1.46
 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
 * C/C++ source code generated on : Fri Feb 25 15:10:38 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#ifndef RTW_HEADER_adaptive_cruise_control_Finalproject_h_
#define RTW_HEADER_adaptive_cruise_control_Finalproject_h_
#include <math.h>
#ifndef adaptive_cruise_control_Finalproject_COMMON_INCLUDES_
#define adaptive_cruise_control_Finalproject_COMMON_INCLUDES_
#include "rtwtypes.h"
#endif               /* adaptive_cruise_control_Finalproject_COMMON_INCLUDES_ */

#include "adaptive_cruise_control_Finalproject_types.h"

/* Includes for objects with custom storage classes. */
#include "cruise_head.h"

/* Macros for accessing real-time model data structure */
#ifndef rtmGetErrorStatus
#define rtmGetErrorStatus(rtm)         ((rtm)->errorStatus)
#endif

#ifndef rtmSetErrorStatus
#define rtmSetErrorStatus(rtm, val)    ((rtm)->errorStatus = (val))
#endif

/* Block states (default storage) for system '<Root>' */
typedef struct {
  uint8_T is_active_c3_adaptive_cruise_co;/* '<S2>/ACC_Logic' */
  uint8_T is_c3_adaptive_cruise_control_F;/* '<S2>/ACC_Logic' */
  uint8_T is_ACC_ON_MODE;              /* '<S2>/ACC_Logic' */
} DW_adaptive_cruise_control_Fi_T;

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  uint8_T Acceleration_Mode_h;         /* '<Root>/Acceleration_Mode' */
} ExtY_adaptive_cruise_control__T;

/* Real-time Model Data Structure */
struct tag_RTM_adaptive_cruise_contr_T {
  const char_T * volatile errorStatus;
};

/* Block states (default storage) */
extern DW_adaptive_cruise_control_Fi_T adaptive_cruise_control_Fina_DW;

/* External outputs (root outports fed by signals with default storage) */
extern ExtY_adaptive_cruise_control__T adaptive_cruise_control_Final_Y;

/* Model entry point functions */
extern void adaptive_cruise_control_Finalproject_initialize(void);
extern void adaptive_cruise_control_Finalproject_step(void);
extern void adaptive_cruise_control_Finalproject_terminate(void);

/* Real-time Model object */
extern RT_MODEL_adaptive_cruise_cont_T *const adaptive_cruise_control_Fina_M;

/*-
 * The generated code includes comments that allow you to trace directly
 * back to the appropriate location in the model.  The basic format
 * is <system>/block_name, where system is the system number (uniquely
 * assigned by Simulink) and block_name is the name of the block.
 *
 * Use the MATLAB hilite_system command to trace the generated code back
 * to the model.  For example,
 *
 * hilite_system('<S3>')    - opens system 3
 * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
 *
 * Here is the system hierarchy for this model
 *
 * '<Root>' : 'adaptive_cruise_control_Finalproject'
 * '<S1>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control'
 * '<S2>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Cruise_Control_Algorithm'
 * '<S3>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Drive_Vehicle'
 * '<S4>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Lead_Vehicle'
 * '<S5>'   : 'adaptive_cruise_control_Finalproject/Adaptive_Cruise_Control/Cruise_Control_Algorithm/ACC_Logic'
 */
#endif                  /* RTW_HEADER_adaptive_cruise_control_Finalproject_h_ */

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

Hence the Final project for Adaptive Cruise Control been completed.

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.

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.