1/*
2 * File: untitled.c
3 *
4 * Code generated for Simulink model 'untitled'.
5 *
6 * Model version : 1.0
7 * Simulink Coder version : 8.12 (R2017a) 16-Feb-2017
8 * C/C++ source code generated on : Thu Mar 14 11:23:20 2019
9 *
10 * Target selection: ert.tlc
11 * Embedded hardware selection: Atmel->AVR
12 * Code generation objectives: Unspecified
13 * Validation result: Not run
14 */
15
16#include "untitled.h"
17#include "untitled_private.h"
18#include "untitled_dt.h"
19
20/* Block signals (auto storage) */
21B_untitled_T untitled_B;
22
23/* Block states (auto storage) */
24DW_untitled_T untitled_DW;
25
26/* Real-time model */
27RT_MODEL_untitled_T untitled_M_;
28RT_MODEL_untitled_T *const untitled_M = &untitled_M_;
29real_T rt_powd_snf(real_T u0, real_T u1)
30{
31 real_T y;
32 real_T tmp;
33 real_T tmp_0;
34 if (rtIsNaN(u0) || rtIsNaN(u1)) {
35 y = (rtNaN);
36 } else {
37 tmp = fabs(u0);
38 tmp_0 = fabs(u1);
39 if (rtIsInf(u1)) {
40 if (tmp == 1.0) {
41 y = 1.0;
42 } else if (tmp > 1.0) {
43 if (u1 > 0.0) {
44 y = (rtInf);
45 } else {
46 y = 0.0;
47 }
48 } else if (u1 > 0.0) {
49 y = 0.0;
50 } else {
51 y = (rtInf);
52 }
53 } else if (tmp_0 == 0.0) {
54 y = 1.0;
55 } else if (tmp_0 == 1.0) {
56 if (u1 > 0.0) {
57 y = u0;
58 } else {
59 y = 1.0 / u0;
60 }
61 } else if (u1 == 2.0) {
62 y = u0 * u0;
63 } else if ((u1 == 0.5) && (u0 >= 0.0)) {
64 y = sqrt(u0);
65 } else if ((u0 < 0.0) && (u1 > floor(u1))) {
66 y = (rtNaN);
67 } else {
68 y = pow(u0, u1);
69 }
70 }
71
72 return y;
73}
74
75/* Model step function */
76void untitled_step(void)
77{
78 uint16_T rtb_AnalogInput_0;
79
80 /* S-Function (arduinoanaloginput_sfcn): '<Root>/Analog Input' */
81 rtb_AnalogInput_0 = MW_analogRead(untitled_P.AnalogInput_p1);
82
83 /* MATLAB Function: '<Root>/MATLAB Function' incorporates:
84 * DataTypeConversion: '<Root>/Data Type Conversion'
85 * S-Function (arduinoanaloginput_sfcn): '<Root>/Analog Input'
86 */
87 /* MATLAB Function 'MATLAB Function': '<S1>:1' */
88 /* '<S1>:1:3' u=(12343.73*u^(-1.15)) */
89 /* '<S1>:1:5' y = u; */
90 untitled_B.y = 12343.73 * rt_powd_snf((real_T)rtb_AnalogInput_0, -1.15);
91
92 /* External mode */
93 rtExtModeUploadCheckTrigger(1);
94
95 { /* Sample time: [0.1s, 0.0s] */
96 rtExtModeUpload(0, untitled_M->Timing.taskTime0);
97 }
98
99 /* signal main to stop simulation */
100 { /* Sample time: [0.1s, 0.0s] */
101 if ((rtmGetTFinal(untitled_M)!=-1) &&
102 !((rtmGetTFinal(untitled_M)-untitled_M->Timing.taskTime0) >
103 untitled_M->Timing.taskTime0 * (DBL_EPSILON))) {
104 rtmSetErrorStatus(untitled_M, "Simulation finished");
105 }
106
107 if (rtmGetStopRequested(untitled_M)) {
108 rtmSetErrorStatus(untitled_M, "Simulation finished");
109 }
110 }
111
112 /* Update absolute time for base rate */
113 /* The "clockTick0" counts the number of times the code of this task has
114 * been executed. The absolute time is the multiplication of "clockTick0"
115 * and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
116 * overflow during the application lifespan selected.
117 */
118 untitled_M->Timing.taskTime0 =
119 (++untitled_M->Timing.clockTick0) * untitled_M->Timing.stepSize0;
120}
121
122/* Model initialize function */
123void untitled_initialize(void)
124{
125 /* Registration code */
126
127 /* initialize non-finites */
128 rt_InitInfAndNaN(sizeof(real_T));
129
130 /* initialize real-time model */
131 (void) memset((void *)untitled_M, 0,
132 sizeof(RT_MODEL_untitled_T));
133 rtmSetTFinal(untitled_M, -1);
134 untitled_M->Timing.stepSize0 = 0.1;
135
136 /* External mode info */
137 untitled_M->Sizes.checksums[0] = (2889579142U);
138 untitled_M->Sizes.checksums[1] = (568558653U);
139 untitled_M->Sizes.checksums[2] = (608470079U);
140 untitled_M->Sizes.checksums[3] = (3481721468U);
141
142 {
143 static const sysRanDType rtAlwaysEnabled = SUBSYS_RAN_BC_ENABLE;
144 static RTWExtModeInfo rt_ExtModeInfo;
145 static const sysRanDType *systemRan[2];
146 untitled_M->extModeInfo = (&rt_ExtModeInfo);
147 rteiSetSubSystemActiveVectorAddresses(&rt_ExtModeInfo, systemRan);
148 systemRan[0] = &rtAlwaysEnabled;
149 systemRan[1] = &rtAlwaysEnabled;
150 rteiSetModelMappingInfoPtr(untitled_M->extModeInfo,
151 &untitled_M->SpecialInfo.mappingInfo);
152 rteiSetChecksumsPtr(untitled_M->extModeInfo, untitled_M->Sizes.checksums);
153 rteiSetTPtr(untitled_M->extModeInfo, rtmGetTPtr(untitled_M));
154 }
155
156 /* block I/O */
157 (void) memset(((void *) &untitled_B), 0,
158 sizeof(B_untitled_T));
159
160 /* states (dwork) */
161 (void) memset((void *)&untitled_DW, 0,
162 sizeof(DW_untitled_T));
163
164 /* data type transition information */
165 {
166 static DataTypeTransInfo dtInfo;
167 (void) memset((char_T *) &dtInfo, 0,
168 sizeof(dtInfo));
169 untitled_M->SpecialInfo.mappingInfo = (&dtInfo);
170 dtInfo.numDataTypes = 14;
171 dtInfo.dataTypeSizes = &rtDataTypeSizes[0];
172 dtInfo.dataTypeNames = &rtDataTypeNames[0];
173
174 /* Block I/O transition table */
175 dtInfo.BTransTable = &rtBTransTable;
176
177 /* Parameters transition table */
178 dtInfo.PTransTable = &rtPTransTable;
179 }
180
181 /* Start for S-Function (arduinoanaloginput_sfcn): '<Root>/Analog Input' */
182 MW_pinModeAnalogInput(untitled_P.AnalogInput_p1);
183}
184
185/* Model terminate function */
186void untitled_terminate(void)
187{
188 /* (no terminate code required) */
189}
190
191/*
192 * File trailer for generated code.
193 *
194 * [EOF]
195 */
196