Challenge

Project 1 - Wiper control system and Vehicle speed calculation for ABS using Wheel Speed sensor

/*
 * File: module_three_project_one_question_one.c
 *
 * Code generated for Simulink model 'module_three_project_one_question_one'.
 *
 * Model version                  : 1.23
 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
 * C/C++ source code generated on : Wed Sep 28 16:27:36 2022
 *
 * Target selection: ert.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#include "module_three_project_one_question_one.h"
#include "module_three_project_one_question_one_private.h"

/* Named constants for Chart: '/Chart' */
#define module_three_project__IN_Mode10 ((uint8_T)2U)
#define module_three_project__IN_Mode11 ((uint8_T)3U)
#define module_three_project__IN_Mode12 ((uint8_T)4U)
#define module_three_project__IN_Mode13 ((uint8_T)5U)
#define module_three_project_o_IN_Mode1 ((uint8_T)1U)
#define module_three_project_o_IN_Mode2 ((uint8_T)6U)
#define module_three_project_o_IN_Mode3 ((uint8_T)7U)
#define module_three_project_o_IN_Mode4 ((uint8_T)8U)
#define module_three_project_o_IN_Mode5 ((uint8_T)9U)
#define module_three_project_o_IN_Mode6 ((uint8_T)10U)
#define module_three_project_o_IN_Mode7 ((uint8_T)11U)
#define module_three_project_o_IN_Mode8 ((uint8_T)12U)
#define module_three_project_o_IN_Mode9 ((uint8_T)13U)
#define module_three_project_o_IN_START ((uint8_T)14U)

/* Block states (default storage) */
DW_module_three_project_one_q_T module_three_project_one_que_DW;

/* External inputs (root inport signals with default storage) */
ExtU_module_three_project_one_T module_three_project_one_ques_U;

/* External outputs (root outports fed by signals with default storage) */
ExtY_module_three_project_one_T module_three_project_one_ques_Y;

/* Real-time model */
static RT_MODEL_module_three_project_T module_three_project_one_que_M_;
RT_MODEL_module_three_project_T *const module_three_project_one_que_M =
  &module_three_project_one_que_M_;

/* Model step function */
void module_three_project_one_question_one_step(void)
{
  /* Chart: '/Chart' incorporates:
   *  Inport: '/FR'
   *  Inport: '/Fl'
   *  Inport: '/RL'
   *  Inport: '/RR'
   */
  if (module_three_project_one_que_DW.is_active_c1_module_three_proje == 0U) {
    module_three_project_one_que_DW.is_active_c1_module_three_proje = 1U;
    module_three_project_one_que_DW.is_c1_module_three_project_one_ =
      module_three_project_o_IN_START;
  } else {
    switch (module_three_project_one_que_DW.is_c1_module_three_project_one_) {
     case module_three_project_o_IN_Mode1:
     case module_three_project__IN_Mode10:
     case module_three_project__IN_Mode11:
     case module_three_project__IN_Mode12:
     case module_three_project__IN_Mode13:
     case module_three_project_o_IN_Mode2:
     case module_three_project_o_IN_Mode3:
     case module_three_project_o_IN_Mode4:
     case module_three_project_o_IN_Mode5:
     case module_three_project_o_IN_Mode6:
     case module_three_project_o_IN_Mode7:
     case module_three_project_o_IN_Mode8:
     case module_three_project_o_IN_Mode9:
      break;

     default:
      /* case IN_START: */
      if ((module_three_project_one_ques_U.Fl > 0.0) &&
          (module_three_project_one_ques_U.FR > 0.0) &&
          (module_three_project_one_ques_U.RL > 0.0) &&
          (module_three_project_one_ques_U.RR > 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode1;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (((module_three_project_one_ques_U.Fl +
             module_three_project_one_ques_U.FR) +
            module_three_project_one_ques_U.RL) +
           module_three_project_one_ques_U.RR) / 4.0;
      } else if (((module_three_project_one_ques_U.Fl == 0.0) &&
                  (module_three_project_one_ques_U.FR == 0.0) &&
                  (module_three_project_one_ques_U.RL == 0.0)) ||
                 ((module_three_project_one_ques_U.RR == 0.0) &&
                  (module_three_project_one_ques_U.RL == 0.0) &&
                  (module_three_project_one_ques_U.RR == 0.0)) ||
                 ((module_three_project_one_ques_U.Fl == 0.0) &&
                  (module_three_project_one_ques_U.FR == 0.0) &&
                  (module_three_project_one_ques_U.RR == 0.0)) ||
                 ((module_three_project_one_ques_U.RL == 0.0) &&
                  (module_three_project_one_ques_U.RR == 0.0) &&
                  (module_three_project_one_ques_U.Fl == 0.0))) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode2;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed = 0.0;
      } else if ((module_three_project_one_ques_U.Fl == 0.0) &&
                 (module_three_project_one_ques_U.FR == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode3;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.RL +
           module_three_project_one_ques_U.RR) / 2.0;
      } else if ((module_three_project_one_ques_U.Fl == 0.0) &&
                 (module_three_project_one_ques_U.RL == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode4;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.RR +
           module_three_project_one_ques_U.FR) / 2.0;
      } else if ((module_three_project_one_ques_U.Fl == 0.0) &&
                 (module_three_project_one_ques_U.RR == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode5;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.FR +
           module_three_project_one_ques_U.RL) / 2.0;
      } else if ((module_three_project_one_ques_U.FR == 0.0) &&
                 (module_three_project_one_ques_U.RR == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode6;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.RL +
           module_three_project_one_ques_U.Fl) / 2.0;
      } else if ((module_three_project_one_ques_U.FR == 0.0) &&
                 (module_three_project_one_ques_U.Fl == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode7;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.RL +
           module_three_project_one_ques_U.RR) / 2.0;
      } else if ((module_three_project_one_ques_U.RL == 0.0) &&
                 (module_three_project_one_ques_U.RR == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode8;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          (module_three_project_one_ques_U.Fl +
           module_three_project_one_ques_U.FR) / 2.0;
      } else if ((module_three_project_one_ques_U.Fl == 0.0) &&
                 (module_three_project_one_ques_U.FR == 0.0) &&
                 (module_three_project_one_ques_U.RL == 0.0) &&
                 (module_three_project_one_ques_U.RR == 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project_o_IN_Mode9;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed = 0.0;
      } else if ((module_three_project_one_ques_U.FR == 0.0) &&
                 (module_three_project_one_ques_U.Fl > 0.0) &&
                 (module_three_project_one_ques_U.RR > 0.0) &&
                 (module_three_project_one_ques_U.RL > 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project__IN_Mode10;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          ((module_three_project_one_ques_U.RL +
            module_three_project_one_ques_U.Fl) +
           module_three_project_one_ques_U.RR) / 3.0;
      } else if ((module_three_project_one_ques_U.RR == 0.0) &&
                 (module_three_project_one_ques_U.FR > 0.0) &&
                 (module_three_project_one_ques_U.Fl > 0.0) &&
                 (module_three_project_one_ques_U.RL > 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project__IN_Mode11;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          ((module_three_project_one_ques_U.RL +
            module_three_project_one_ques_U.FR) +
           module_three_project_one_ques_U.RR) / 3.0;
      } else if ((module_three_project_one_ques_U.RR == 0.0) &&
                 (module_three_project_one_ques_U.FR > 0.0) &&
                 (module_three_project_one_ques_U.Fl > 0.0) &&
                 (module_three_project_one_ques_U.RL > 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project__IN_Mode12;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          ((module_three_project_one_ques_U.Fl +
            module_three_project_one_ques_U.FR) +
           module_three_project_one_ques_U.RL) / 3.0;
      } else if ((module_three_project_one_ques_U.RL == 0.0) &&
                 (module_three_project_one_ques_U.RR > 0.0) &&
                 (module_three_project_one_ques_U.FR > 0.0) &&
                 (module_three_project_one_ques_U.Fl > 0.0)) {
        module_three_project_one_que_DW.is_c1_module_three_project_one_ =
          module_three_project__IN_Mode13;

        /* Outport: '/speed' */
        module_three_project_one_ques_Y.speed =
          ((module_three_project_one_ques_U.Fl +
            module_three_project_one_ques_U.FR) +
           module_three_project_one_ques_U.RR) / 3.0;
      }
      break;
    }
  }

  /* End of Chart: '/Chart' */
}

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

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

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

1	/*
2	 * File: ert_main.c
3	 *
4	 * Code generated for Simulink model 'module_three_project_wiper_control'.
5	 *
6	 * Model version                  : 1.21
7	 * Simulink Coder version         : 9.5 (R2021a) 14-Nov-2020
8	 * C/C++ source code generated on : Wed Sep 28 20:37:57 2022
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 
17	#include               /* This ert_main.c example uses printf/fflush */
18	#include "module_three_project_wiper_control.h" /* Model's header file */
19	#include "rtwtypes.h"
20	
21	/*
22	 * Associating rt_OneStep with a real-time clock or interrupt service routine
23	 * is what makes the generated code "real-time".  The function rt_OneStep is
24	 * always associated with the base rate of the model.  Subrates are managed
25	 * by the base rate from inside the generated code.  Enabling/disabling
26	 * interrupts and floating point context switches are target specific.  This
27	 * example code indicates where these should take place relative to executing
28	 * the generated code step function.  Overrun behavior should be tailored to
29	 * your application needs.  This example simply sets an error status in the
30	 * real-time model and returns from rt_OneStep.
31	 */
32	void rt_OneStep(void);
33	void rt_OneStep(void)
34	{
35	  static boolean_T OverrunFlag = false;
36	
37	  /* Disable interrupts here */
38	
39	  /* Check for overrun */
40	  if (OverrunFlag) {
41	    rtmSetErrorStatus(module_three_project_wiper_c_M, "Overrun");
42	    return;
43	  }
44	
45	  OverrunFlag = true;
46	
47	  /* Save FPU context here (if necessary) */
48	  /* Re-enable timer or interrupt here */
49	  /* Set model inputs here */
50	
51	  /* Step the model */
52	  module_three_project_wiper_control_step();
53	
54	  /* Get model outputs here */
55	
56	  /* Indicate task complete */
57	  OverrunFlag = false;
58	
59	  /* Disable interrupts here */
60	  /* Restore FPU context here (if necessary) */
61	  /* Enable interrupts here */
62	}
63	
64	/*
65	 * The example "main" function illustrates what is required by your
66	 * application code to initialize, execute, and terminate the generated code.
67	 * Attaching rt_OneStep to a real-time clock is target specific.  This example
68	 * illustrates how you do this relative to initializing the model.
69	 */
70	int_T main(int_T argc, const char *argv[])
71	{
72	  /* Unused arguments */
73	  (void)(argc);
74	  (void)(argv);
75	
76	  /* Initialize model */
77	  module_three_project_wiper_control_initialize();
78	
79	  /* Attach rt_OneStep to a timer or interrupt service routine with
80	   * period 0.01 seconds (the model's base sample time) here.  The
81	   * call syntax for rt_OneStep is
82	   *
83	   *  rt_OneStep();
84	   */
85	  printf("Warning: The simulation will run forever. "
86	         "Generated ERT main won't simulate model step behavior. "
87	         "To change this behavior select the 'MAT-file logging' option.\n");
88	  fflush((NULL));
89	  while (rtmGetErrorStatus(module_three_project_wiper_c_M) == (NULL)) {
90	    /*  Perform other application tasks here */
91	  }
92	
93	  /* Disable rt_OneStep() here */
94	
95	  /* Terminate model */
96	  module_three_project_wiper_control_terminate();
97	  return 0;
98	}
99	
100	/*
101	 * File trailer for generated code.
102	 *
103	 * [EOF]
104	 */
105	

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.