1 | #define F_CPU 32000000UL
|
2 |
|
3 | #include <avr/pgmspace.h>
|
4 | #include <string.h>
|
5 | #include <avr/eeprom.h>
|
6 |
|
7 | #define LARGEST_MENU 9
|
8 |
|
9 | struct MenuGeneralInfo
|
10 | {
|
11 | void (*topMenuFunc) (struct MenuGeneralInfo*);
|
12 | struct MenuGeneralInfo *topMenuPnt;
|
13 | void (*rightMenuFunc) (struct MenuGeneralInfo*);
|
14 | struct MenuGeneralInfo *rightMenuPnt;
|
15 | void (*leftMenuFunc) (struct MenuGeneralInfo*);
|
16 | struct MenuGeneralInfo *leftMenuPnt;
|
17 | char (*textList)[LARGEST_MENU][17]; //Has to be in the flash
|
18 | struct MenuItemInfo (*menuItemsInfo); //Pointer to an array
|
19 | uint8_t menuLength; //Number of Menu Items WITHOUT the Title
|
20 | };
|
21 | enum VarType
|
22 | {
|
23 | NONE,
|
24 | U_BYTE,
|
25 | S_BYTE,
|
26 | U_WORD,
|
27 | S_WORD,
|
28 | DOUBLE
|
29 | };
|
30 | struct MenuItemInfo
|
31 | {
|
32 | void (*menuFunc) (struct MenuGeneralInfo*);
|
33 | struct MenuGeneralInfo *menuPnt;
|
34 | uint16_t adress;
|
35 | enum VarType varType;
|
36 | void (*valueSetFunc) (void);
|
37 | double smallStep;
|
38 | double bigStep;
|
39 | double lowerLimit;
|
40 | double upperLimit;
|
41 | uint8_t precision;
|
42 | };
|
43 |
|
44 | void menuDisplayerInit(struct MenuGeneralInfo*);
|
45 | void emptyFunc1(struct MenuGeneralInfo*);
|
46 | void emptyFunc2(void);
|
47 | void initMenus(void);
|
48 |
|
49 | volatile double accuV;
|
50 |
|
51 | uint8_t eeContrast __attribute__ ((section("EEPROM_P1")));
|
52 | double batteryV_Compare __attribute__ ((section("EEPROM_P0")));
|
53 | double usRecK_x __attribute__ ((section("EEPROM_P0")));
|
54 | double usRecJ_y __attribute__ ((section("EEPROM_P0")));
|
55 | double usRecL_x __attribute__ ((section("EEPROM_P0")));
|
56 | double usRecL_y __attribute__ ((section("EEPROM_P0")));
|
57 | double usRecL_z __attribute__ ((section("EEPROM_P0")));
|
58 | uint16_t VRefACs __attribute__ ((section("EEPROM_P1")));
|
59 | uint16_t imuRefresh __attribute__ ((section("EEPROM_P1")));
|
60 | uint16_t baroCompRefresh __attribute__ ((section("EEPROM_P1")));
|
61 | uint8_t programMotCtrl __attribute__ ((section("EEPROM_P1")));
|
62 | double offsetGyroX __attribute__ ((section("EEPROM_P1")));
|
63 | double offsetGyroY __attribute__ ((section("EEPROM_P1")));
|
64 | double offsetGyroZ __attribute__ ((section("EEPROM_P1")));
|
65 | int16_t offsetCompassX __attribute__ ((section("EEPROM_P1")));
|
66 | int16_t offsetCompassY __attribute__ ((section("EEPROM_P1")));
|
67 | int16_t offsetCompassZ __attribute__ ((section("EEPROM_P1")));
|
68 | double pidX_P __attribute__ ((section("EEPROM_P2")));
|
69 | double pidX_I __attribute__ ((section("EEPROM_P2")));
|
70 | double pidX_D __attribute__ ((section("EEPROM_P2")));
|
71 | double pidY_P __attribute__ ((section("EEPROM_P2")));
|
72 | double pidY_I __attribute__ ((section("EEPROM_P2")));
|
73 | double pidY_D __attribute__ ((section("EEPROM_P2")));
|
74 | double pidZ_P __attribute__ ((section("EEPROM_P2")));
|
75 | double pidZ_I __attribute__ ((section("EEPROM_P2")));
|
76 | double pidZ_D __attribute__ ((section("EEPROM_P3")));
|
77 |
|
78 | char const homeTextList[][17] PROGMEM =
|
79 | {"HOME ",
|
80 | " Fliegen ",
|
81 | " Einstellungen ",
|
82 | " U Akku = "};
|
83 | struct MenuItemInfo homeItemInfos[3];
|
84 | struct MenuGeneralInfo homeGenInf;
|
85 |
|
86 | char const pidSetTextList[][17] PROGMEM =
|
87 | {"PID ",
|
88 | " X/Roll ",
|
89 | " Y/Nick ",
|
90 | " Z/Yaw ",
|
91 | " Sonar "};
|
92 | struct MenuItemInfo pidSetItemInfos[4];
|
93 | struct MenuGeneralInfo pidSetGenInf;
|
94 |
|
95 | char const pidX_SetTextList[][17] PROGMEM =
|
96 | {"PID X/ROLL ",
|
97 | " P ",
|
98 | " I ",
|
99 | " D "};
|
100 | struct MenuItemInfo pidX_SetItemInfos[3];
|
101 | struct MenuGeneralInfo pidX_SetGenInf;
|
102 |
|
103 | char const pidY_SetTextList[][17] PROGMEM =
|
104 | {"PID Y/NICK ",
|
105 | " P ",
|
106 | " I ",
|
107 | " D "};
|
108 | struct MenuItemInfo pidY_SetItemInfos[3];
|
109 | struct MenuGeneralInfo pidY_SetGenInf;
|
110 |
|
111 | char const pidZ_SetTextList[][17] PROGMEM =
|
112 | {"PID Z/YAW ",
|
113 | " P ",
|
114 | " I ",
|
115 | " D "};
|
116 | struct MenuItemInfo pidZ_SetItemInfos[3];
|
117 | struct MenuGeneralInfo pidZ_SetGenInf;
|
118 |
|
119 | char const pidSonarSetTextList[][17] PROGMEM =
|
120 | {"PID SONAR ",
|
121 | " P ",
|
122 | " I ",
|
123 | " D "};
|
124 | struct MenuItemInfo pidSonarSetItemInfos[3];
|
125 | struct MenuGeneralInfo pidSonarSetGenInf;
|
126 |
|
127 | char const imuTextList[][17] PROGMEM =
|
128 | {"IMU ",
|
129 | " periodA,G ",
|
130 | " periodC,B ",
|
131 | " of.GX ",
|
132 | " of.GY ",
|
133 | " of.GZ ",
|
134 | " of.CX ",
|
135 | " of.CY ",
|
136 | " of.CZ "};
|
137 | struct MenuItemInfo imuItemInfos[8];
|
138 | struct MenuGeneralInfo imuGenInf;
|
139 |
|
140 | char const usPositionTextList[][17] PROGMEM =
|
141 | {"US POSITION ",
|
142 | " RecK X ",
|
143 | " RecJ Y ",
|
144 | " RecL X ",
|
145 | " RecL Y ",
|
146 | " RecL Z ",
|
147 | " Vref ACs "};
|
148 | struct MenuItemInfo usPositionItemInfos[6];
|
149 | struct MenuGeneralInfo usPositionGenInf;
|
150 |
|
151 | char const otherSetTextList[][17] PROGMEM =
|
152 | {"SONSTIGES ",
|
153 | " prog. Regler ",
|
154 | " Servos ",
|
155 | " Akkulimit ",
|
156 | " Kontrast LCD "};
|
157 | struct MenuItemInfo otherSetItemInfos[4];
|
158 | struct MenuGeneralInfo otherSetGenInf;
|
159 |
|
160 | void menuDisplayerInit(struct MenuGeneralInfo *menuInfo){}
|
161 |
|
162 | void emptyFunc1(struct MenuGeneralInfo *menuInfo){}
|
163 | void emptyFunc2(void){}
|
164 |
|
165 | void initMenus(void)
|
166 | {
|
167 | homeItemInfos[2].adress=&accuV; homeItemInfos[2].varType=DOUBLE; homeItemInfos[2].valueSetFunc=emptyFunc2; homeItemInfos[2].smallStep = 0; homeItemInfos[2].bigStep = 0; homeItemInfos[2].lowerLimit = 0; homeItemInfos[2].upperLimit = 200; homeItemInfos[2].precision = 1;
|
168 |
|
169 | //**IMU Settings**
|
170 | imuItemInfos[0].adress=&imuRefresh; imuItemInfos[0].varType=U_WORD; imuItemInfos[0].valueSetFunc=emptyFunc2; imuItemInfos[0].smallStep = 10; imuItemInfos[0].bigStep = 100; imuItemInfos[0].lowerLimit = 0; imuItemInfos[0].upperLimit = 65530;
|
171 | imuItemInfos[1].adress=&baroCompRefresh; imuItemInfos[1].varType=U_WORD; imuItemInfos[1].valueSetFunc=emptyFunc2; imuItemInfos[1].smallStep = 10; imuItemInfos[1].bigStep = 500; imuItemInfos[1].lowerLimit = 0; imuItemInfos[1].upperLimit = 65530;
|
172 | imuItemInfos[2].adress=&offsetGyroX; imuItemInfos[2].varType=DOUBLE; imuItemInfos[2].valueSetFunc=emptyFunc2; imuItemInfos[2].smallStep = 1; imuItemInfos[2].bigStep = 10; imuItemInfos[2].lowerLimit = -500; imuItemInfos[2].upperLimit = 500; imuItemInfos[2].precision = 0;
|
173 | imuItemInfos[3].adress=&offsetGyroY; imuItemInfos[3].varType=DOUBLE; imuItemInfos[3].valueSetFunc=emptyFunc2; imuItemInfos[3].smallStep = 1; imuItemInfos[3].bigStep = 10; imuItemInfos[3].lowerLimit = -500; imuItemInfos[3].upperLimit = 500; imuItemInfos[3].precision = 0;
|
174 | imuItemInfos[4].adress=&offsetGyroZ; imuItemInfos[4].varType=DOUBLE; imuItemInfos[4].valueSetFunc=emptyFunc2; imuItemInfos[4].smallStep = 1; imuItemInfos[4].bigStep = 10; imuItemInfos[4].lowerLimit = -500; imuItemInfos[4].upperLimit = 500; imuItemInfos[4].precision = 0;
|
175 | imuItemInfos[5].adress=&offsetCompassX; imuItemInfos[5].varType=S_WORD; imuItemInfos[5].valueSetFunc=emptyFunc2; imuItemInfos[5].smallStep = 1; imuItemInfos[5].bigStep = 10; imuItemInfos[5].lowerLimit = -300; imuItemInfos[5].upperLimit = 300;
|
176 | imuItemInfos[6].adress=&offsetCompassY; imuItemInfos[6].varType=S_WORD; imuItemInfos[6].valueSetFunc=emptyFunc2; imuItemInfos[6].smallStep = 1; imuItemInfos[6].bigStep = 10; imuItemInfos[6].lowerLimit = -300; imuItemInfos[6].upperLimit = 300;
|
177 | imuItemInfos[7].adress=&offsetCompassZ; imuItemInfos[7].varType=S_WORD; imuItemInfos[7].valueSetFunc=emptyFunc2; imuItemInfos[7].smallStep = 1; imuItemInfos[7].bigStep = 10; imuItemInfos[7].lowerLimit = -300; imuItemInfos[7].upperLimit = 300;
|
178 |
|
179 | //**Ultrasonic positioning Settings
|
180 | usPositionItemInfos[0].adress=&usRecK_x; usPositionItemInfos[0].varType=DOUBLE; usPositionItemInfos[0].valueSetFunc=emptyFunc2; usPositionItemInfos[0].smallStep = 0.001; usPositionItemInfos[0].bigStep = 0.05; usPositionItemInfos[0].lowerLimit = -0.5; usPositionItemInfos[0].upperLimit = 0.5; usPositionItemInfos[0].precision = 3;
|
181 | usPositionItemInfos[1].adress=&usRecJ_y; usPositionItemInfos[1].varType=DOUBLE; usPositionItemInfos[1].valueSetFunc=emptyFunc2; usPositionItemInfos[1].smallStep = 0.001; usPositionItemInfos[1].bigStep = 0.05; usPositionItemInfos[1].lowerLimit = -0.5; usPositionItemInfos[1].upperLimit = 0.5; usPositionItemInfos[1].precision = 3;
|
182 | usPositionItemInfos[2].adress=&usRecL_x; usPositionItemInfos[2].varType=DOUBLE; usPositionItemInfos[2].valueSetFunc=emptyFunc2; usPositionItemInfos[2].smallStep = 0.001; usPositionItemInfos[2].bigStep = 0.05; usPositionItemInfos[2].lowerLimit = -0.5; usPositionItemInfos[2].upperLimit = 0.5; usPositionItemInfos[2].precision = 3;
|
183 | usPositionItemInfos[3].adress=&usRecL_y; usPositionItemInfos[3].varType=DOUBLE; usPositionItemInfos[3].valueSetFunc=emptyFunc2; usPositionItemInfos[3].smallStep = 0.001; usPositionItemInfos[3].bigStep = 0.05; usPositionItemInfos[3].lowerLimit = -0.5; usPositionItemInfos[3].upperLimit = 0.5; usPositionItemInfos[3].precision = 3;
|
184 | usPositionItemInfos[4].adress=&usRecL_z; usPositionItemInfos[4].varType=DOUBLE; usPositionItemInfos[4].valueSetFunc=emptyFunc2; usPositionItemInfos[4].smallStep = 0.001; usPositionItemInfos[4].bigStep = 0.05; usPositionItemInfos[4].lowerLimit = -0.5; usPositionItemInfos[4].upperLimit = 0.5; usPositionItemInfos[4].precision = 3;
|
185 | usPositionItemInfos[5].adress=&VRefACs; usPositionItemInfos[5].varType=U_WORD; usPositionItemInfos[5].valueSetFunc=emptyFunc2; usPositionItemInfos[5].smallStep = 1; usPositionItemInfos[5].bigStep = 50; usPositionItemInfos[5].lowerLimit = 0; usPositionItemInfos[5].upperLimit = 4096;
|
186 |
|
187 | usPositionGenInf.topMenuFunc=menuDisplayerInit;
|
188 | usPositionGenInf.topMenuPnt=&homeGenInf;
|
189 | usPositionGenInf.rightMenuFunc=menuDisplayerInit;
|
190 | usPositionGenInf.rightMenuPnt=&otherSetGenInf;
|
191 | usPositionGenInf.leftMenuFunc=menuDisplayerInit;
|
192 | usPositionGenInf.leftMenuPnt=&imuGenInf;
|
193 | usPositionGenInf.textList = &usPositionTextList;
|
194 | usPositionGenInf.menuItemsInfo = &usPositionItemInfos;
|
195 | usPositionGenInf.menuLength = 6;
|
196 |
|
197 | //**Other Settings Menu**
|
198 | otherSetItemInfos[0].adress=&programMotCtrl; otherSetItemInfos[0].varType=U_BYTE; otherSetItemInfos[0].valueSetFunc=emptyFunc2; otherSetItemInfos[0].smallStep = 1; otherSetItemInfos[0].bigStep = 1; otherSetItemInfos[0].lowerLimit = 0; otherSetItemInfos[0].upperLimit = 1;
|
199 | otherSetItemInfos[2].adress=&batteryV_Compare; otherSetItemInfos[2].varType=DOUBLE; otherSetItemInfos[2].valueSetFunc=emptyFunc2; otherSetItemInfos[2].smallStep = 0.1; otherSetItemInfos[2].bigStep = 1; otherSetItemInfos[2].lowerLimit = 0; otherSetItemInfos[2].upperLimit = 20; otherSetItemInfos[2].precision = 1;
|
200 | otherSetItemInfos[3].adress=&eeContrast; otherSetItemInfos[3].varType=U_BYTE; otherSetItemInfos[3].valueSetFunc=emptyFunc2; otherSetItemInfos[3].smallStep = 1; otherSetItemInfos[3].bigStep = 10; otherSetItemInfos[3].lowerLimit = 0; otherSetItemInfos[3].upperLimit = 63;
|
201 |
|
202 | otherSetGenInf.topMenuFunc=menuDisplayerInit;
|
203 | otherSetGenInf.topMenuPnt=&homeGenInf;
|
204 | otherSetGenInf.rightMenuFunc=menuDisplayerInit;
|
205 | otherSetGenInf.rightMenuPnt=&pidSetGenInf;
|
206 | otherSetGenInf.leftMenuFunc=menuDisplayerInit;
|
207 | otherSetGenInf.leftMenuPnt=&usPositionGenInf;
|
208 | otherSetGenInf.textList = &otherSetTextList;
|
209 | otherSetGenInf.menuItemsInfo = &otherSetItemInfos;
|
210 | otherSetGenInf.menuLength = 4;
|
211 |
|
212 | //**PID Settings Menu**
|
213 | pidSetItemInfos[0].menuFunc=menuDisplayerInit; pidSetItemInfos[0].menuPnt=&pidX_SetGenInf; pidSetItemInfos[0].varType=NONE;
|
214 | pidSetItemInfos[1].menuFunc=menuDisplayerInit; pidSetItemInfos[1].menuPnt=&pidY_SetGenInf; pidSetItemInfos[1].varType=NONE;
|
215 | pidSetItemInfos[2].menuFunc=menuDisplayerInit; pidSetItemInfos[2].menuPnt=&pidZ_SetGenInf; pidSetItemInfos[2].varType=NONE;
|
216 | pidSetItemInfos[3].menuFunc=menuDisplayerInit; pidSetItemInfos[3].menuPnt=&pidSonarSetGenInf; pidSetItemInfos[3].varType=NONE;
|
217 |
|
218 | pidSetGenInf.topMenuFunc=menuDisplayerInit;
|
219 | pidSetGenInf.topMenuPnt=&homeGenInf;
|
220 | pidSetGenInf.rightMenuFunc=menuDisplayerInit;
|
221 | pidSetGenInf.rightMenuPnt=&imuGenInf;
|
222 | pidSetGenInf.leftMenuFunc=menuDisplayerInit;
|
223 | pidSetGenInf.leftMenuPnt=&otherSetGenInf;
|
224 | pidSetGenInf.textList = &pidSetTextList;
|
225 | pidSetGenInf.menuItemsInfo = &pidSetItemInfos;
|
226 | //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
227 | /*>>>>*/pidSetGenInf.menuLength = 4;//<<<<<<<< Hier ist der Fehler. Die Variable wird nicht korrekt beschrieben
|
228 |
|
229 | //**PID X Settings Menu**
|
230 | pidX_SetItemInfos[0].adress=&pidX_P; pidX_SetItemInfos[0].varType=DOUBLE; pidX_SetItemInfos[0].valueSetFunc=emptyFunc2; pidX_SetItemInfos[0].smallStep = 0.5; pidX_SetItemInfos[0].bigStep = 10; pidX_SetItemInfos[0].lowerLimit = 0; pidX_SetItemInfos[0].upperLimit = 1000; pidX_SetItemInfos[0].precision = 1;
|
231 | pidX_SetItemInfos[1].adress=&pidX_I; pidX_SetItemInfos[1].varType=DOUBLE; pidX_SetItemInfos[1].valueSetFunc=emptyFunc2; pidX_SetItemInfos[1].smallStep = 0.5; pidX_SetItemInfos[1].bigStep = 10; pidX_SetItemInfos[1].lowerLimit = 0; pidX_SetItemInfos[1].upperLimit = 1000; pidX_SetItemInfos[1].precision = 1;
|
232 | pidX_SetItemInfos[2].adress=&pidX_D; pidX_SetItemInfos[2].varType=DOUBLE; pidX_SetItemInfos[2].valueSetFunc=emptyFunc2; pidX_SetItemInfos[2].smallStep = 0.1; pidX_SetItemInfos[2].bigStep = 5; pidX_SetItemInfos[2].lowerLimit = 0; pidX_SetItemInfos[2].upperLimit = 1000; pidX_SetItemInfos[2].precision = 1;
|
233 |
|
234 | pidX_SetGenInf.topMenuFunc=menuDisplayerInit;
|
235 | pidX_SetGenInf.topMenuPnt=&pidSetGenInf;
|
236 | pidX_SetGenInf.rightMenuFunc=menuDisplayerInit;
|
237 | pidX_SetGenInf.rightMenuPnt=&pidY_SetGenInf;
|
238 | pidX_SetGenInf.leftMenuFunc=menuDisplayerInit;
|
239 | pidX_SetGenInf.leftMenuPnt=&pidSonarSetGenInf;
|
240 | pidX_SetGenInf.textList = &pidX_SetTextList;
|
241 | pidX_SetGenInf.menuItemsInfo = &pidX_SetItemInfos;
|
242 | pidX_SetGenInf.menuLength = 3;
|
243 |
|
244 | //**PID Y Settings Menu**
|
245 | pidY_SetItemInfos[0].adress=&pidY_P; pidY_SetItemInfos[0].varType=DOUBLE; pidY_SetItemInfos[0].valueSetFunc=emptyFunc2; pidY_SetItemInfos[0].smallStep = 0.5; pidY_SetItemInfos[0].bigStep = 10; pidY_SetItemInfos[0].lowerLimit = 0; pidY_SetItemInfos[0].upperLimit = 1000; pidY_SetItemInfos[0].precision = 1;
|
246 | pidY_SetItemInfos[1].adress=&pidY_I; pidY_SetItemInfos[1].varType=DOUBLE; pidY_SetItemInfos[1].valueSetFunc=emptyFunc2; pidY_SetItemInfos[1].smallStep = 0.5; pidY_SetItemInfos[1].bigStep = 10; pidY_SetItemInfos[1].lowerLimit = 0; pidY_SetItemInfos[1].upperLimit = 1000; pidY_SetItemInfos[1].precision = 1;
|
247 | pidY_SetItemInfos[2].adress=&pidY_D; pidY_SetItemInfos[2].varType=DOUBLE; pidY_SetItemInfos[2].valueSetFunc=emptyFunc2; pidY_SetItemInfos[2].smallStep = 0.1; pidY_SetItemInfos[2].bigStep = 5; pidY_SetItemInfos[2].lowerLimit = 0; pidY_SetItemInfos[2].upperLimit = 1000; pidY_SetItemInfos[2].precision = 1;
|
248 |
|
249 | pidY_SetGenInf.topMenuFunc=menuDisplayerInit;
|
250 | pidY_SetGenInf.topMenuPnt=&pidSetGenInf;
|
251 | pidY_SetGenInf.rightMenuFunc=menuDisplayerInit;
|
252 | pidY_SetGenInf.rightMenuPnt=&pidZ_SetGenInf;
|
253 | pidY_SetGenInf.leftMenuFunc=menuDisplayerInit;
|
254 | pidY_SetGenInf.leftMenuPnt=&pidX_SetGenInf;
|
255 | pidY_SetGenInf.textList = &pidY_SetTextList;
|
256 | pidY_SetGenInf.menuItemsInfo = &pidY_SetItemInfos;
|
257 | pidY_SetGenInf.menuLength = 3;
|
258 |
|
259 | //**PID Z Settings Menu**
|
260 | pidZ_SetItemInfos[0].adress=&pidZ_P; pidZ_SetItemInfos[0].varType=DOUBLE; pidZ_SetItemInfos[0].valueSetFunc=emptyFunc2; //pidZ_SetItemInfos[0].smallStep = 0.5; pidZ_SetItemInfos[0].bigStep = 5; pidZ_SetItemInfos[0].lowerLimit = 0; pidZ_SetItemInfos[0].upperLimit = 200; pidZ_SetItemInfos[0].precision = 1;
|
261 | pidZ_SetItemInfos[1].adress=&pidZ_I; pidZ_SetItemInfos[1].varType=DOUBLE; pidZ_SetItemInfos[1].valueSetFunc=emptyFunc2; //pidZ_SetItemInfos[1].smallStep = 0.5; pidZ_SetItemInfos[1].bigStep = 5; pidZ_SetItemInfos[1].lowerLimit = 0; pidZ_SetItemInfos[1].upperLimit = 200; pidZ_SetItemInfos[1].precision = 1;
|
262 | pidZ_SetItemInfos[2].adress=&pidZ_D; pidZ_SetItemInfos[2].varType=DOUBLE; pidZ_SetItemInfos[2].valueSetFunc=emptyFunc2; //pidZ_SetItemInfos[2].smallStep = 0.5; pidZ_SetItemInfos[2].bigStep = 5; pidZ_SetItemInfos[2].lowerLimit = 0; pidZ_SetItemInfos[2].upperLimit = 200; pidZ_SetItemInfos[2].precision = 1;
|
263 |
|
264 | pidZ_SetGenInf.topMenuFunc=menuDisplayerInit;
|
265 | pidZ_SetGenInf.topMenuPnt=&pidSetGenInf;
|
266 | pidZ_SetGenInf.rightMenuFunc=menuDisplayerInit;
|
267 | pidZ_SetGenInf.rightMenuPnt=&pidSonarSetGenInf;
|
268 | pidZ_SetGenInf.leftMenuFunc=menuDisplayerInit;
|
269 | pidZ_SetGenInf.leftMenuPnt=&pidY_SetGenInf;
|
270 | pidZ_SetGenInf.textList = &pidZ_SetTextList;
|
271 | pidZ_SetGenInf.menuItemsInfo = &pidZ_SetItemInfos;
|
272 | pidZ_SetGenInf.menuLength = 3;
|
273 | }
|
274 |
|
275 | int main(void)
|
276 | {
|
277 | initMenus();
|
278 |
|
279 | while(1)
|
280 | {
|
281 | ;
|
282 | }
|
283 | }
|