Program that execute AEB system

Dependencies:   AEB Ultrasonic Controller_Master mbed

Dependents:   AEB

Committer:
AndreaAndreoli
Date:
Fri Jun 03 07:50:12 2016 +0000
Revision:
1:8cb509a319e5
Parent:
0:64a08651b7c0
Child:
2:fb694fb2ef9b
It compile but it doesn't work well, blue led stays on

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndreaAndreoli 0:64a08651b7c0 1 /*
AndreaAndreoli 0:64a08651b7c0 2 * An example showing how to use the Ultrasonic library
AndreaAndreoli 0:64a08651b7c0 3 */
AndreaAndreoli 0:64a08651b7c0 4 #include "mbed.h"
AndreaAndreoli 0:64a08651b7c0 5 #include "Ultrasonic.h"
AndreaAndreoli 1:8cb509a319e5 6
AndreaAndreoli 1:8cb509a319e5 7 extern "C" {
AndreaAndreoli 1:8cb509a319e5 8 #include "Controller.h"
AndreaAndreoli 0:64a08651b7c0 9 #include "rtwtypes.h"
AndreaAndreoli 1:8cb509a319e5 10 }
AndreaAndreoli 0:64a08651b7c0 11
AndreaAndreoli 1:8cb509a319e5 12 static RT_MODEL_Controller_T Controller_M_;
AndreaAndreoli 1:8cb509a319e5 13 static RT_MODEL_Controller_T *const Controller_M = &Controller_M_;/* Real-time model */
AndreaAndreoli 1:8cb509a319e5 14 static B_Controller_T Controller_B; /* Observable signals */
AndreaAndreoli 1:8cb509a319e5 15 static DW_Controller_T Controller_DW; /* Observable states */
AndreaAndreoli 1:8cb509a319e5 16
AndreaAndreoli 1:8cb509a319e5 17 /* '<Root>/V' */
AndreaAndreoli 1:8cb509a319e5 18 static real_T Controller_U_V;
AndreaAndreoli 1:8cb509a319e5 19
AndreaAndreoli 1:8cb509a319e5 20 /* '<Root>/D_M' */
AndreaAndreoli 1:8cb509a319e5 21 static real_T Controller_U_D_M;
AndreaAndreoli 1:8cb509a319e5 22
AndreaAndreoli 1:8cb509a319e5 23 /* '<Root>/SLAVE' */
AndreaAndreoli 1:8cb509a319e5 24 static uint8_T Controller_U_SLAVE;
AndreaAndreoli 1:8cb509a319e5 25
AndreaAndreoli 1:8cb509a319e5 26 /* '<Root>/BRAKE' */
AndreaAndreoli 1:8cb509a319e5 27 static uint8_T Controller_Y_BRAKE;
AndreaAndreoli 1:8cb509a319e5 28
AndreaAndreoli 1:8cb509a319e5 29 /* '<Root>/LED_BLUE' */
AndreaAndreoli 1:8cb509a319e5 30 static uint8_T Controller_Y_LED_BLUE;
AndreaAndreoli 1:8cb509a319e5 31
AndreaAndreoli 1:8cb509a319e5 32 /* '<Root>/LED_RED' */
AndreaAndreoli 1:8cb509a319e5 33 static uint8_T Controller_Y_LED_RED;
AndreaAndreoli 1:8cb509a319e5 34
AndreaAndreoli 1:8cb509a319e5 35 /* '<Root>/MASTER' */
AndreaAndreoli 1:8cb509a319e5 36 static uint8_T Controller_Y_MASTER;
AndreaAndreoli 1:8cb509a319e5 37
AndreaAndreoli 1:8cb509a319e5 38 /*
AndreaAndreoli 1:8cb509a319e5 39 * Associating rt_OneStep with a real-time clock or interrupt service routine
AndreaAndreoli 1:8cb509a319e5 40 * is what makes the generated code "real-time". The function rt_OneStep is
AndreaAndreoli 1:8cb509a319e5 41 * always associated with the base rate of the model. Subrates are managed
AndreaAndreoli 1:8cb509a319e5 42 * by the base rate from inside the generated code. Enabling/disabling
AndreaAndreoli 1:8cb509a319e5 43 * interrupts and floating point context switches are target specific. This
AndreaAndreoli 1:8cb509a319e5 44 * example code indicates where these should take place relative to executing
AndreaAndreoli 1:8cb509a319e5 45 * the generated code step function. Overrun behavior should be tailored to
AndreaAndreoli 1:8cb509a319e5 46 * your application needs. This example simply sets an error status in the
AndreaAndreoli 1:8cb509a319e5 47 * real-time model and returns from rt_OneStep.
AndreaAndreoli 1:8cb509a319e5 48 */
AndreaAndreoli 1:8cb509a319e5 49 void rt_OneStep(RT_MODEL_Controller_T *const Controller_M);
AndreaAndreoli 1:8cb509a319e5 50
AndreaAndreoli 1:8cb509a319e5 51 Serial pc(USBTX, USBRX); // tx, rx
AndreaAndreoli 0:64a08651b7c0 52 DigitalOut led_R(LED_RED);
AndreaAndreoli 0:64a08651b7c0 53 DigitalOut led_B(LED_BLUE);
AndreaAndreoli 0:64a08651b7c0 54 DigitalIn slave(D6);
AndreaAndreoli 0:64a08651b7c0 55 Ticker t;
AndreaAndreoli 0:64a08651b7c0 56 float V = 50;
AndreaAndreoli 0:64a08651b7c0 57
AndreaAndreoli 0:64a08651b7c0 58
AndreaAndreoli 0:64a08651b7c0 59 void step();
AndreaAndreoli 0:64a08651b7c0 60
AndreaAndreoli 0:64a08651b7c0 61 int main()
AndreaAndreoli 0:64a08651b7c0 62 {
AndreaAndreoli 1:8cb509a319e5 63 /* Pack model data into RTM */
AndreaAndreoli 1:8cb509a319e5 64 Controller_M->ModelData.blockIO = &Controller_B;
AndreaAndreoli 1:8cb509a319e5 65 Controller_M->ModelData.dwork = &Controller_DW;
AndreaAndreoli 1:8cb509a319e5 66
AndreaAndreoli 1:8cb509a319e5 67 /* Initialize model */
AndreaAndreoli 1:8cb509a319e5 68 Controller_initialize(Controller_M, &Controller_U_V, &Controller_U_D_M,
AndreaAndreoli 1:8cb509a319e5 69 &Controller_U_SLAVE, &Controller_Y_BRAKE,
AndreaAndreoli 1:8cb509a319e5 70 &Controller_Y_LED_BLUE, &Controller_Y_LED_RED,
AndreaAndreoli 1:8cb509a319e5 71 &Controller_Y_MASTER);
AndreaAndreoli 0:64a08651b7c0 72 Ultrasonic_init(); // Just call this funtion to initialize the ultrasonic sensor
AndreaAndreoli 0:64a08651b7c0 73 t.attach(&step,0.2);
AndreaAndreoli 0:64a08651b7c0 74 while (true) {
AndreaAndreoli 0:64a08651b7c0 75 wait(0.2);
AndreaAndreoli 0:64a08651b7c0 76 }
AndreaAndreoli 0:64a08651b7c0 77 }
AndreaAndreoli 0:64a08651b7c0 78
AndreaAndreoli 0:64a08651b7c0 79
AndreaAndreoli 0:64a08651b7c0 80 void step()
AndreaAndreoli 0:64a08651b7c0 81 {
AndreaAndreoli 1:8cb509a319e5 82 Controller_U_D_M = read_cm();
AndreaAndreoli 1:8cb509a319e5 83 Controller_U_SLAVE = slave.read();
AndreaAndreoli 1:8cb509a319e5 84 rt_OneStep(Controller_M);
AndreaAndreoli 1:8cb509a319e5 85 pc.printf("Distance: %f \n", Controller_U_D_M); // Call read_cm() to get the distance in cm
AndreaAndreoli 1:8cb509a319e5 86 led_B = Controller_Y_LED_BLUE;
AndreaAndreoli 1:8cb509a319e5 87 led_R = Controller_Y_LED_RED;
AndreaAndreoli 1:8cb509a319e5 88 }
AndreaAndreoli 1:8cb509a319e5 89
AndreaAndreoli 1:8cb509a319e5 90 void rt_OneStep(RT_MODEL_Controller_T *const Controller_M)
AndreaAndreoli 1:8cb509a319e5 91 {
AndreaAndreoli 1:8cb509a319e5 92 static boolean_T OverrunFlag = false;
AndreaAndreoli 1:8cb509a319e5 93
AndreaAndreoli 1:8cb509a319e5 94 /* Disable interrupts here */
AndreaAndreoli 1:8cb509a319e5 95
AndreaAndreoli 1:8cb509a319e5 96 /* Check for overrun */
AndreaAndreoli 1:8cb509a319e5 97 if (OverrunFlag) {
AndreaAndreoli 1:8cb509a319e5 98 rtmSetErrorStatus(Controller_M, "Overrun");
AndreaAndreoli 1:8cb509a319e5 99 return;
AndreaAndreoli 1:8cb509a319e5 100 }
AndreaAndreoli 1:8cb509a319e5 101
AndreaAndreoli 1:8cb509a319e5 102 OverrunFlag = true;
AndreaAndreoli 1:8cb509a319e5 103
AndreaAndreoli 1:8cb509a319e5 104 /* Save FPU context here (if necessary) */
AndreaAndreoli 1:8cb509a319e5 105 /* Re-enable timer or interrupt here */
AndreaAndreoli 1:8cb509a319e5 106 /* Set model inputs here */
AndreaAndreoli 1:8cb509a319e5 107
AndreaAndreoli 1:8cb509a319e5 108 /* Step the model */
AndreaAndreoli 1:8cb509a319e5 109 Controller_step(Controller_M, Controller_U_V, Controller_U_D_M,
AndreaAndreoli 1:8cb509a319e5 110 Controller_U_SLAVE, &Controller_Y_BRAKE,
AndreaAndreoli 1:8cb509a319e5 111 &Controller_Y_LED_BLUE, &Controller_Y_LED_RED,
AndreaAndreoli 1:8cb509a319e5 112 &Controller_Y_MASTER);
AndreaAndreoli 1:8cb509a319e5 113
AndreaAndreoli 1:8cb509a319e5 114 /* Get model outputs here */
AndreaAndreoli 1:8cb509a319e5 115
AndreaAndreoli 1:8cb509a319e5 116 /* Indicate task complete */
AndreaAndreoli 1:8cb509a319e5 117 OverrunFlag = false;
AndreaAndreoli 1:8cb509a319e5 118
AndreaAndreoli 1:8cb509a319e5 119 /* Disable interrupts here */
AndreaAndreoli 1:8cb509a319e5 120 /* Restore FPU context here (if necessary) */
AndreaAndreoli 1:8cb509a319e5 121 /* Enable interrupts here */
AndreaAndreoli 0:64a08651b7c0 122 }