Challenge

Project 2 Adaptive Cruise Control

The main Aim to Develop a Model for Adaptive Cruise Control is developed as per requirement given.

Seperrate model have been made for both requirements.

1.Firstly made model for the Requirement.

2.SLDD file have been made as per the parameter given and used, Reuirement tagging has been done.

3. Model Advisory report have been generated and attached

4. C code have been generated and attached

5. photos of all steps have been taken and attached with MODEL,SLDD,MODEL ADVISORYREPORT AND C CODE

6. A Unit Delay Block has been added as in Starting value of Acceleration_Mode is nothing and we have made a loop out of it'

NOTE:- All Files Attached with photos please attach once again if not able to open. All files are made with same name .

C Code is:-

/*
* File: Mini_Project2_model.c
*
* Code generated for Simulink model 'Mini_Project2_model'.
*
* Model version : 1.18
* Simulink Coder version : 9.9 (R2023a) 19-Nov-2022
* C/C++ source code generated on : Sun Jun 18 12:08:15 2023
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "Mini_Project2_model.h"
#include "rtwtypes.h"
#include "Mini_Project2_model_private.h"
#include <math.h>
/* Named constants for Chart: '<S1>/Chart' */
#define IN_LeadVehicle_Detected_Follow ((uint8_T)1U)
#define IN_LeadVehicle_Detected_Resume ((uint8_T)2U)
#define IN_LeadVehicle_NOT_Detected_Res ((uint8_T)3U)
#define IN_LeadVehicle_Speed_equal_Set_ ((uint8_T)5U)
#define IN_LeadVehicle_Speed_lessthan_S ((uint8_T)6U)
#define Min_IN_LeadVehicle_Not_Detected ((uint8_T)4U)
#define Mini_Projec_IN_ACC_STANDBY_MODE ((uint8_T)3U)
#define Mini_Project2_m_IN_ACC_OFF_MODE ((uint8_T)1U)
#define Mini_Project2_mo_IN_ACC_ON_MODE ((uint8_T)2U)
#define Mini_Project_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
/* Exported data definition */
/* Definition for custom storage class: ExportToFile */
uint8_T Acceleration_Mode; /* '<S1>/Chart' */
/* Block states (default storage) */
DW_Mini_Project2_model_T Mini_Project2_model_DW;
/* Real-time model */
static RT_MODEL_Mini_Project2_model_T Mini_Project2_model_M_;
RT_MODEL_Mini_Project2_model_T *const Mini_Project2_model_M =
&Mini_Project2_model_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 Mini_Project2_model_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: '<S3>/Sum' incorporates:
* Inport: '<Root>/CameraInput_LeadVehicle'
* Inport: '<Root>/RadarInput_LeadVehicle'
*/
LeadVehicle_Speed = (uint8_T)(CameraInput_LeadVehicle + RadarInput_LeadVehicle);
/* Sum: '<S4>/Sum' incorporates:
* Inport: '<Root>/CameraInput_DriveVehicle'
* Inport: '<Root>/RadarInput_DriveVehicle'
* UnitDelay: '<S1>/Unit Delay'
*/
DriveVehicle_Speed = (uint8_T)((uint8_T)(CameraInput_DriveVehicle +
Acceleration_Mode) + RadarInput_DriveVehicle);
/* SignalConversion: '<S4>/Signal Conversion' incorporates:
* Inport: '<Root>/RadarInput_DriveVehicle'
*/
LeadVehicle_Detected = RadarInput_DriveVehicle;
/* Chart: '<S1>/Chart' incorporates:
* Inport: '<Root>/CruiseSwitch'
* Inport: '<Root>/SetSwitch'
* Inport: '<Root>/Set_Gap'
* Inport: '<Root>/Set_Speed'
* Inport: '<Root>/Time_Gap'
*/
if (Mini_Project2_model_DW.is_active_c3_Mini_Project2_mode == 0U) {
Mini_Project2_model_DW.is_active_c3_Mini_Project2_mode = 1U;
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Project2_m_IN_ACC_OFF_MODE;
Acceleration_Mode = 0U;
} else {
switch (Mini_Project2_model_DW.is_c3_Mini_Project2_model) {
case Mini_Project2_m_IN_ACC_OFF_MODE:
Acceleration_Mode = 0U;
if (CruiseSwitch) {
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Projec_IN_ACC_STANDBY_MODE;
Acceleration_Mode = 1U;
}
break;
case Mini_Project2_mo_IN_ACC_ON_MODE:
if (!CruiseSwitch) {
Mini_Project2_model_DW.is_ACC_ON_MODE = Mini_Project_IN_NO_ACTIVE_CHILD;
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Project2_m_IN_ACC_OFF_MODE;
Acceleration_Mode = 0U;
} else if (!SetSwitch) {
Mini_Project2_model_DW.is_ACC_ON_MODE = Mini_Project_IN_NO_ACTIVE_CHILD;
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Projec_IN_ACC_STANDBY_MODE;
Acceleration_Mode = 1U;
} else {
switch (Mini_Project2_model_DW.is_ACC_ON_MODE) {
case IN_LeadVehicle_Detected_Follow:
Acceleration_Mode = 2U;
if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed < Set_Speed)) ||
(Time_Gap < Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
} else if (LeadVehicle_Detected == 0) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
Min_IN_LeadVehicle_Not_Detected;
Acceleration_Mode = 1U;
}
break;
case IN_LeadVehicle_Detected_Resume:
Acceleration_Mode = 3U;
if ((DriveVehicle_Speed == Set_Speed) && (LeadVehicle_Speed >=
Set_Speed) && (Time_Gap >= Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
} else if ((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed) && (Time_Gap >= Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_equal_Set_;
Acceleration_Mode = 1U;
} else if (LeadVehicle_Detected == 0) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_NOT_Detected_Res;
Acceleration_Mode = 1U;
}
break;
case IN_LeadVehicle_NOT_Detected_Res:
Acceleration_Mode = 1U;
break;
case Min_IN_LeadVehicle_Not_Detected:
Acceleration_Mode = 1U;
if ((LeadVehicle_Detected == 1) && (DriveVehicle_Speed == Set_Speed) &&
(LeadVehicle_Speed >= Set_Speed) && (Time_Gap >= Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
} else if (((LeadVehicle_Detected == 1) && (LeadVehicle_Speed <
Set_Speed)) || (Time_Gap < Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
}
break;
case IN_LeadVehicle_Speed_equal_Set_:
Acceleration_Mode = 1U;
if (((LeadVehicle_Speed < Set_Speed) && (LeadVehicle_Speed <
DriveVehicle_Speed)) || ((int32_T)rt_roundd_snf(0.75 * (real_T)
Set_Gap) == Time_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_lessthan_S;
Acceleration_Mode = 4U;
} else if (((DriveVehicle_Speed < Set_Speed) && (LeadVehicle_Speed >
DriveVehicle_Speed)) || (Time_Gap >= Set_Gap)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Detected_Resume;
Acceleration_Mode = 3U;
} else if ((LeadVehicle_Detected == 0) || (DriveVehicle_Speed <=
Set_Speed)) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_NOT_Detected_Res;
}
break;
default:
/* case IN_LeadVehicle_Speed_lessthan_Set_Speed: */
Acceleration_Mode = 4U;
if ((LeadVehicle_Detected == 0) && (DriveVehicle_Speed == Set_Speed))
{
Mini_Project2_model_DW.is_ACC_ON_MODE =
Min_IN_LeadVehicle_Not_Detected;
Acceleration_Mode = 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))) {
Mini_Project2_model_DW.is_ACC_ON_MODE =
IN_LeadVehicle_Speed_equal_Set_;
Acceleration_Mode = 1U;
}
}
break;
}
}
break;
default:
/* case IN_ACC_STANDBY_MODE: */
Acceleration_Mode = 1U;
if (!CruiseSwitch) {
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Project2_m_IN_ACC_OFF_MODE;
Acceleration_Mode = 0U;
} else if (SetSwitch) {
Mini_Project2_model_DW.is_c3_Mini_Project2_model =
Mini_Project2_mo_IN_ACC_ON_MODE;
Mini_Project2_model_DW.is_ACC_ON_MODE = IN_LeadVehicle_Detected_Follow;
Acceleration_Mode = 2U;
}
break;
}
}
/* End of Chart: '<S1>/Chart' */
}
/* Model initialize function */
void Mini_Project2_model_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void Mini_Project2_model_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/
C:\Users\user\Downloads\Mini_project2\Mini_Project2_model_ert_rtw\Mini_Project2_model.c
Ln22Col19
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.