_DISPLAY_func.h 97 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057
  1. //_DISPLAY_func.h
  2. /* #if defined(HAS_TFT_ILI9163C)
  3. delay(LCDtim);
  4. DISPLAY_DEV.setCursor(0,60);
  5. DISPLAY_DEV.print(LCDarray1); DISPLAY_DEV.print(" "); DISPLAY_DEV.print(LCDarray2);
  6. #endif
  7. */
  8. //void _DISPLAY_print
  9. void DISPLAY__print_ANY(DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
  10. DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  11. DISPLAY_pos_seq_T DISPLAY_pos_seq_A,
  12. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  13. DISPLAY_string_T DISPLAY_string_A
  14. #else
  15. DISPLAY_array16_T DISPLAY_array16_A
  16. #endif
  17. ){
  18. #if defined(DEBUG)
  19. if(DEBUG > 6) {
  20. Serial.print("#20 DsplY:[ "); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_CURSOR_Y_CHARS_A); //[ARDUINO_ATTR_ARRAY_S_INDEX]
  21. Serial.print("] # MaxY:["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_CHARS_A); //[ARDUINO_ATTR_ARRAY_S_INDEX]
  22. Serial.println("] ");
  23. }
  24. Serial.print("#26 Dspl ATTR CURRENT[ "); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A);
  25. Serial.print("] LAST["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_LAST_A);
  26. Serial.print("] COUNT["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_COUNT_A);
  27. Serial.print("] LIMIT["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_LIMIT_A);
  28. Serial.print("] NEXT:["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_NEXT_A);
  29. Serial.println("] ");
  30. #endif
  31. #if defined(HAS_TFT_ILI9163C)
  32. #endif
  33. #if defined(DEBUG)
  34. if(DEBUG > 6) {
  35. Serial.print(" [HAS_TFT_ILI9163C] ");
  36. Serial.print(" 27[DEBUG] ");
  37. }
  38. #endif
  39. Serial.println("] ");
  40. //todo position current
  41. //todo positions max
  42. #if defined(HAS_TFT_ILI9163C)
  43. DISPLAY_DEV_CTRL__println(DISPLAY_PHYSICAL_CHAR_A,
  44. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  45. DISPLAY_string_A,
  46. #else
  47. DISPLAY_array16_A,
  48. #endif
  49. DISPLAY_pos_seq_A) ;
  50. #else
  51. // Serial.println(DISPLAY_array16_A);
  52. #endif
  53. #if defined(DEBUG)
  54. //Serial.end();
  55. //delay(100);
  56. //Serial.write(" 72[DEBUG] ");
  57. #endif
  58. }
  59. void DISPLAY__print_IMMEDIATE(
  60. DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A,
  61. DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  62. DISPLAY_pos_seq_T DISPLAY_pos_seq_A,
  63. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  64. DISPLAY_string_T DISPLAY_string_A,
  65. #else
  66. DISPLAY_array16_T DISPLAY_array16_A,
  67. #endif
  68. DISPLAY_TARGET_T DISPLAY_TARGET_A) {
  69. if(DISPLAY_TARGET_A & DISPLAY_TARGET_DISPLAY128){ //BIN TEST
  70. #if defined(HAS_TFT_ILI9163C)
  71. #if defined(DEBUG)
  72. if(DEBUG > 6) {
  73. // String message(DISPLAY_array16_A);
  74. Serial.print("#69A DISPLAY__print_IMMEDIATE [DEBUG] to HAS_TFT_ILI9163C Len["); //Serial.print( message.length());
  75. Serial.print("] XM["); Serial.print( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_X_CHARS_A);
  76. Serial.print("] YM["); Serial.print( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_CHARS_A);
  77. Serial.print("] YC["); Serial.print( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_CURSOR_Y_CHARS_A);
  78. Serial.print("] YF["); Serial.print( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A);
  79. Serial.println("] ");
  80. }
  81. #endif
  82. DISPLAY_DEV_CTRL__println(DISPLAY_PHYSICAL_CHAR_A,
  83. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  84. DISPLAY_string_A,
  85. #else
  86. DISPLAY_array16_A,
  87. #endif
  88. DISPLAY_pos_seq_A) ;
  89. #else
  90. #endif
  91. // DISPLAY__print_ANY(DISPLAY_T_ARDUINO_ATTR_ARRAY_A, DISPLAY_PHYSICAL_CHAR_A, DISPLAY_pos_seq_A, DISPLAY_array16_A);
  92. } else if(DISPLAY_TARGET_A & DISPLAY_TARGET_ANY){ //BIN TEST
  93. #if defined(DEBUG)
  94. if(DEBUG > 6) {
  95. Serial.print("#69B DISPLAY__print_IMMEDIATE [DEBUG] to DISPLAY__print_ANY Seq["); Serial.print(DISPLAY_pos_seq_A , BIN);
  96. Serial.print("] Target["); Serial.print(DISPLAY_TARGET_A , BIN);
  97. Serial.println("] ");
  98. }
  99. #endif
  100. DISPLAY__print_ANY(DISPLAY_T_ARDUINO_ATTR_ARRAY_A, DISPLAY_PHYSICAL_CHAR_A, DISPLAY_pos_seq_A,
  101. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  102. DISPLAY_string_A
  103. #else
  104. DISPLAY_array16_A
  105. #endif
  106. );
  107. } else {
  108. #if defined(DEBUG)
  109. if(DEBUG > 6) {
  110. Serial.print("#68 DISPLAY__print_IMMEDIATE [DEBUG] else Seq["); Serial.print(DISPLAY_pos_seq_A , BIN);
  111. Serial.print("] Target["); Serial.print(DISPLAY_TARGET_A , BIN);
  112. Serial.println("] ");
  113. }
  114. #endif
  115. }
  116. }
  117. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  118. #else
  119. void DISPLAY__print_loop(DISPLAY_CURSOR_X_CHARS_T DISPLAY_CURSOR_X_CHARS_A,
  120. DISPLAY_CURSOR_Y_CHARS_T DISPLAY_CURSOR_Y_CHARS_A ,
  121. String message,
  122. int message_len,
  123. DISPLAY__print_loop_ACTION_T DISPLAY__print_loop_ACTION_A
  124. ) { //to print while in loop
  125. const int DISPLAY__print_loop_INDEX_LIMIT_A = 5;
  126. static int DISPLAY__print_loop_INDEX_CURRENT_A = 0 ;
  127. static int DISPLAY__print_loop_QUEUE_PEEK_A = 0 ;
  128. static DISPLAY__print_loop_T DISPLAY__print_loop_A[5]={} ;
  129. if(DISPLAY__print_loop_ACTION_A == DISPLAY__print_loop_ACTION_ADD) {
  130. if((DISPLAY__print_loop_INDEX_CURRENT_A + 1) <= DISPLAY__print_loop_INDEX_LIMIT_A) {
  131. DISPLAY__print_loop_INDEX_CURRENT_A ++ ;
  132. if(DISPLAY__print_loop_QUEUE_PEEK_A == 0 ) {
  133. DISPLAY__print_loop_QUEUE_PEEK_A = DISPLAY__print_loop_INDEX_CURRENT_A ;
  134. }
  135. DISPLAY__print_loop_A[DISPLAY__print_loop_INDEX_CURRENT_A].DISPLAY_CURSOR_X_CHARS_A = DISPLAY_CURSOR_X_CHARS_A ;
  136. DISPLAY__print_loop_A[DISPLAY__print_loop_INDEX_CURRENT_A].DISPLAY_CURSOR_Y_CHARS_A = DISPLAY_CURSOR_Y_CHARS_A ;
  137. DISPLAY__print_loop_A[DISPLAY__print_loop_INDEX_CURRENT_A].message_len = message_len ;
  138. //strcpy(DISPLAY__print_loop_A[DISPLAY__print_loop_INDEX_CURRENT_A].message, message );
  139. DISPLAY__print_loop_A[DISPLAY__print_loop_INDEX_CURRENT_A].message = message ;
  140. }
  141. Serial.print("#137[DISPLAY__print_loop][ADD] [i][");Serial.print(DISPLAY__print_loop_INDEX_CURRENT_A); Serial.println("] ");
  142. } else if(DISPLAY__print_loop_ACTION_A == DISPLAY__print_loop_ACTION_POP) {
  143. Serial.print("#137[DISPLAY__print_loop][POP] [i][");Serial.print(DISPLAY__print_loop_INDEX_CURRENT_A); Serial.print("] p[");Serial.print(DISPLAY__print_loop_QUEUE_PEEK_A); Serial.print("] ");
  144. if(DISPLAY__print_loop_QUEUE_PEEK_A > 0 ) {
  145. DISPLAY_DEV.setCursor(DISPLAY__print_loop_A[DISPLAY__print_loop_QUEUE_PEEK_A].DISPLAY_CURSOR_X_CHARS_A * DISPLAY_textsize_x_A,
  146. DISPLAY__print_loop_A[DISPLAY__print_loop_QUEUE_PEEK_A].DISPLAY_CURSOR_Y_CHARS_A * DISPLAY_textsize_y_A);
  147. #if defined(ENABLE_DISPLAY_MENU)
  148. #else
  149. DISPLAY_DEV.print(DISPLAY__print_loop_A[DISPLAY__print_loop_QUEUE_PEEK_A].message);
  150. Serial.print(" msg["); Serial.print(DISPLAY__print_loop_A[DISPLAY__print_loop_QUEUE_PEEK_A].message); Serial.print("] ");
  151. #endif
  152. } else {
  153. Serial.print(" [PEEK][EMPTY] ");
  154. }
  155. Serial.println("] ");
  156. }
  157. }
  158. #endif
  159. void DISPLAY__print(
  160. DISPLAY_T* DISPLAY_A ,
  161. DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
  162. DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  163. DISPLAY_pos_seq_T DISPLAY_pos_seq_A,
  164. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  165. DISPLAY_string_T DISPLAY_string_A,
  166. #else
  167. DISPLAY_array16_T DISPLAY_array16_A,
  168. #endif
  169. DISPLAY_TARGET_T DISPLAY_TARGET_A,
  170. time_seq_id_T time_seq_id_A,
  171. time_min_run_T time_min_run_A
  172. //queue
  173. ,Slave_Ports_Status_QUEUE_T* Slave_Ports_Status_QUEUE_A,
  174. Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A,
  175. TASK_TYPE_T TASK_TYPE_A,
  176. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A
  177. )
  178. {
  179. #ifdef DEBUG_DISPLAY
  180. Serial.print("127 DISPLAY__print DISPLAY_pos_seq_A["); Serial.print(BIN8_to_STRING(DISPLAY_pos_seq_A ));
  181. Serial.print("] DISPLAY_TARGET_A["); Serial.print(BIN8_to_STRING(DISPLAY_TARGET_A )); Serial.print("] [");
  182. Serial.print("#26 Dspl ATTR CURRENT[ "); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A);
  183. Serial.print("] LAST["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_LAST_A);
  184. Serial.print("] COUNT["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_COUNT_A);
  185. Serial.print("] LIMIT["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_LIMIT_A);
  186. Serial.print("] NEXT:["); Serial.print(DISPLAY_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_NEXT_A);
  187. Serial.println("] ");
  188. #endif
  189. if(DISPLAY_pos_seq_A & DISPLAY_pos_seq_A_IMMEDIATE){ ////BIN TEST
  190. #if defined(DEBUG_DISPLAY)
  191. //if(DEBUG > 6) {
  192. Serial.print("#84 DISPLAY__print to DISPLAY__print_IMMEDIATE [DEBUG] else Seq["); Serial.print(DISPLAY_pos_seq_A , BIN);
  193. Serial.print("] Target["); Serial.print(DISPLAY_TARGET_A , BIN);
  194. Serial.println("] ");
  195. // }
  196. #endif
  197. DISPLAY__print_IMMEDIATE(DISPLAY_T_ARDUINO_ATTR_ARRAY_A, DISPLAY_PHYSICAL_CHAR_A, DISPLAY_pos_seq_A,
  198. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  199. DISPLAY_string_A,
  200. #else
  201. DISPLAY_array16_A,
  202. #endif
  203. DISPLAY_TARGET_A);
  204. // Serial.print("#28 running _Slave_Ports_ttl_decrement = ");
  205. } else {
  206. #if defined(DEBUG)
  207. Serial.print("#88 DISPLAY__print [DEBUG] else "); Serial.print(DISPLAY_pos_seq_A , BIN);
  208. Serial.println("] ");
  209. #endif
  210. #if defined(DISABLE_TASK_TYPE_T_DISPLAY_queue_pop________)
  211. Serial.print("#167 DISABLE_TASK_TYPE_T_DISPLAY_queue_pop________");
  212. #else
  213. Serial.print("#253 TODO WHY ? BIN DISPLAY_pos_seq_A["); Serial.print(DISPLAY_pos_seq_A, BIN);
  214. Serial.print("]& IMM ["); Serial.print(DISPLAY_pos_seq_A_IMMEDIATE, BIN); Serial.print("] res[") ; Serial.print((DISPLAY_pos_seq_A & DISPLAY_pos_seq_A_IMMEDIATE) , BIN ) ;
  215. Serial.print(" ] String [") ; Serial.print(DISPLAY_string_A); Serial.print("] ");
  216. /* DISPLAY__add_record( DISPLAY_A ,
  217. DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
  218. DISPLAY_PHYSICAL_CHAR_A,
  219. DISPLAY_pos_seq_A,
  220. #if defined(DISPLAY_array16_T_is_DISPLAY_string_T)
  221. DISPLAY_string_A,
  222. #else
  223. DISPLAY_array16_A,
  224. #endif
  225. DISPLAY_TARGET_A,
  226. time_seq_id_A,
  227. time_min_run_A
  228. //queue
  229. , Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A ,
  230. TASK_TYPE_A,
  231. TASK_PORT_ASSOC_A
  232. ) ;
  233. */
  234. #endif
  235. }
  236. }
  237. void DISPLAY__CURSOR_Y_CHARS__SET(DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  238. DISPLAY_CURSOR_Y_CHARS_T DISPLAY_CURSOR_Y_CHARS_A
  239. ) {
  240. #if defined(HAS_TFT_ILI9163C)
  241. DISPLAY_DEV__CURSOR_Y_CHARS__SET(
  242. DISPLAY_PHYSICAL_CHAR_A,
  243. DISPLAY_CURSOR_Y_CHARS_A
  244. );
  245. #endif
  246. }
  247. #if defined(HAS_TFT_ILI9163C)
  248. DISPLAY_LATENCY_PASS__POP(
  249. time_seq_id_T time_seq_id_A,
  250. time_min_run_T time_min_run_A
  251. ) {
  252. static time_seq_id_T last_time_seq_id_A = time_seq_id_A;
  253. static time_min_run_T last_time_min_run_A = time_min_run_A;
  254. if(time_seq_id_A <= 1 or time_min_run_A <= 1) {
  255. Serial.print("[DISPLAY_LATENCY_PASS__POP][ERR]["); Serial.print(time_seq_id_A);Serial.print("]["); Serial.print(time_min_run_A); Serial.print("]");
  256. delay(2000);
  257. }
  258. if(time_seq_id_A >= last_time_min_run_A) {
  259. last_time_min_run_A = time_min_run_A;
  260. return true;
  261. } else {
  262. return false;
  263. }
  264. }
  265. DISPLAY_DEBUG_LATENCY_PASS__POP(
  266. time_seq_id_T time_seq_id_A,
  267. time_min_run_T time_min_run_A
  268. ) {
  269. static time_seq_id_T last_time_seq_id_A = time_seq_id_A;
  270. static time_min_run_T last_time_min_run_A = time_min_run_A;
  271. if(time_seq_id_A <= 1 or time_min_run_A <= 1) {
  272. Serial.print("[DISPLAY_LATENCY_PASS__POP][ERR]["); Serial.print(time_seq_id_A);Serial.print("]["); Serial.print(time_min_run_A); Serial.print("]");
  273. delay(2000);
  274. }
  275. if(time_seq_id_A >= last_time_min_run_A) {
  276. last_time_min_run_A = time_min_run_A;
  277. return true;
  278. } else {
  279. return false;
  280. }
  281. }
  282. #if defined(USE_DISPLAY_char_PA)
  283. void DISPLAY_char_P_print(DISPLAY_char24_T &DISPLAY_char_PA ) {
  284. DISPLAY_DEV.print(DISPLAY_char_PA);
  285. }
  286. #endif
  287. void DISPLAY__print_menu(DISPLAY_T* DISPLAY_A ,
  288. DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
  289. DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  290. DISPLAY_MENU_ITEM_INDEX_T DISPLAY_MENU_ITEM_INDEX_A ,
  291. time_seq_id_T time_seq_id_A ,
  292. time_min_run_T time_min_run_A ,
  293. Slave_Ports_Status_T* Slave_Ports_Status_A
  294. ) {
  295. int i;
  296. int maxX ;
  297. int maxY ;
  298. int maxXi ;
  299. int maxYi ;
  300. int minYi ;
  301. int minXi ;
  302. int minXselector_context ;
  303. int menuYoffset = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A ;
  304. int next_tab_pos;
  305. String message;
  306. // int tab_pos_size = DISPLAY_char24_TAB_SIZE;
  307. // DISPLAY_DEV.setCursor((DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MIN_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A),
  308. //(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A)); //[ARDUINO_ATTR_ARRAY_S_INDEX]
  309. /* Serial.print("[#314 - XMIN["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MIN_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A); Serial.print("] ");
  310. Serial.print(" YMIN["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A); Serial.print("] ");
  311. Serial.print(" XMAX["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MAX_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A); Serial.print("] ");
  312. Serial.print(" YMAX["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MAX_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A); Serial.print("] ");
  313. Serial.print(" TESTX["); Serial.print(20 * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A); Serial.print("] ");
  314. Serial.print(" TESTY["); Serial.print(8 * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A); Serial.print("] ");
  315. Serial.print(" maxX["); Serial.print(maxX); Serial.print("] ");
  316. Serial.print(" maxY["); Serial.print(maxY); Serial.print("] ");
  317. Serial.print(" color["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_COLOR_A); Serial.print("] ");
  318. Serial.print(" setMX["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MAX_A); Serial.print("] ");
  319. Serial.println(" ");*/
  320. #if defined(DISPLAY__print_menu_DELAY)
  321. Serial.print("D");
  322. //delay(DISPLAY__print_menu_DELAY);
  323. #endif
  324. if(DISPLAY_LATENCY_PASS__POP(time_seq_id_A, time_min_run_A )
  325. or DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A == true
  326. ) {
  327. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A == true ) {
  328. SPFTFT2(display,refresh,396);
  329. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = false;
  330. }
  331. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A | DISPLAY_MENU_SELECTOR_MENU_FLAG) {
  332. minXselector_context = 1 ;
  333. // Serial.print(" [minXselector_context] [MENU SEL] ");
  334. } else { minXselector_context = 0 ; }
  335. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MAX_A == 0) maxX = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_X_PX_A ;
  336. else maxX = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_X_CHARS_MAX_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A ;
  337. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MAX_A == 0) maxY = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_PX_A ;
  338. else maxY = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MAX_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A ;
  339. #if defined(USE_DISPLAY_char_PA)
  340. //debug
  341. DISPLAY_DEV.fillRect(0, 8 * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A ,
  342. 120, DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A * 2 , BLUE );
  343. DISPLAY_DEV.setCursor(minXi , 8 * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A );
  344. DISPLAY_DEV.print("T:"); DISPLAY_DEV.print(time_seq_id_A); DISPLAY_DEV.print(" "); DISPLAY_DEV.print(Slave_Ports_Status_A[1].Exp_state_level_A);
  345. DISPLAY_DEV.print(" P:");
  346. #endif
  347. // DISPLAY_DEV.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[1].DISPLAY_char_PA*);
  348. // DISPLAY_char_P_print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[1].DISPLAY_char_PA);
  349. #if defined(USE_DISPLAY_string_T)
  350. DISPLAY_DEV.setCursor(minXi , 9 * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A );
  351. DISPLAY_DEV.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[2].DISPLAY_string_A);
  352. #endif
  353. for(i=ARDUINO_ARRAY_INDEX_FIRST ; i<=ARDUINO_ARRAY_INDEX_LIMIT_DISPLAY_MENU_ITEM_A; i++) {
  354. //DISPLAY_PHYSICAL_CHAR_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i]
  355. // DISPLAY_DEV.setCursor(20 , (20 + (i * 5)));
  356. // DISPLAY_DEV.print("test88");
  357. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_ITEM_FLAG_A == DISPLAY_MENU_ITEM_FLAG_INITIALIZED
  358. and DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_ELEMENT_TO_REFRESH_A == true
  359. ) {
  360. //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].time_seq_id_A + ARDUINO_LOOP_LATENCY_DISPLAY_MENU > time_seq_id_A ) {
  361. // Serial.print(" 366[LAT[ "); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].time_seq_id_A); Serial.print("] ");
  362. {
  363. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].time_seq_id_A = time_seq_id_A ;
  364. maxXi = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_X_PX_A ;
  365. // Serial.print(" [Maxi[ "); Serial.print(maxXi); Serial.print("] ");
  366. minXi = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_CURSOR_X_CHARS_A ;
  367. // Serial.print(" [minXi[ "); Serial.print(minXi); Serial.print("] ");
  368. maxYi = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_CURSOR_Y_CHARS_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A ;
  369. //if(maxYi > DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_PX_A) maxYi = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_PX_A ;
  370. // Serial.print(" [maxYi[ "); Serial.print(maxYi); Serial.print("] ");
  371. minYi = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A ;
  372. // Serial.print(" [minYi[ "); Serial.print(minYi); Serial.print("] ");
  373. //Serial.print(" WPRINT ["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A); Serial.print("] ");
  374. /* DISPLAY_DEV.fillRect(
  375. (0 + minXselector_context),
  376. ((DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_CURSOR_Y_CHARS_A + 1) * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A),
  377. 100, DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A, BROWN );
  378. */
  379. DISPLAY_DEV.fillRect(minXselector_context, maxYi ,
  380. (maxXi - minXselector_context), minYi , DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_COLOR_A );
  381. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG) {
  382. DISPLAY_DEV.fillRect(
  383. ( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].Exp_state_level_A / 3)
  384. , maxYi , (( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].Exp_state_level_A / 3) + 10) //maxXi
  385. , minYi, YELLOW );
  386. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG) {
  387. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG) {
  388. //DISPLAY_DEV.setTextColor(WHITE, BLACK);
  389. // DISPLAY_DEV.setCursor(minXi , maxYi );
  390. // DISPLAY_DEV.print("[ -- ] / [ + ]");DISPLAY_DEV.setTextColor(WHITE);
  391. DISPLAY_DEV.fillRect( 0, maxYi , maxXi, minYi, YELLOW );
  392. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_TOGGLE_FLAG) {
  393. DISPLAY_DEV.fillRect( 0, maxYi ,( maxXi /3 ), minYi, WHITE );
  394. DISPLAY_DEV.fillRect( (maxXi /3), maxYi ,( maxXi /3 * 2 ), minYi, BLACK );
  395. DISPLAY_DEV.fillRect( (maxXi /3 * 2), maxYi , maxXi, minYi, WHITE );
  396. //DISPLAY_DEV.setCursor(minXi , maxYi ); DISPLAY_DEV.setTextColor(WHITE, BLACK);
  397. //DISPLAY_DEV.print("[ ON ] / [ OFF ] ");DISPLAY_DEV.setTextColor(WHITE);
  398. } else {
  399. DISPLAY_DEV.fillRect( 0, maxYi , maxXi, minYi,
  400. DISPLAY_DEV.Color24To565(0x660000)
  401. //RED
  402. );
  403. //DISPLAY_DEV.setCursor(minXi , maxYi ); DISPLAY_DEV.setTextColor(WHITE, BLACK);
  404. //DISPLAY_DEV.print("[ ? ] / [ ? ] ");DISPLAY_DEV.setTextColor(WHITE);
  405. }
  406. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_FLAG) {
  407. DISPLAY_DEV.fillRect( 0, maxYi , maxXi, minYi, 0x0210 );
  408. } else if(minXselector_context > 0) {//menu context
  409. DISPLAY_DEV.fillRect(
  410. 0, maxYi ,
  411. 5, minYi, RED );
  412. }
  413. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG
  414. or Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].ARDUINO_ARRAY_INDEX_A].I2C_driver == I2C_driver_PCF8574
  415. or Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].ARDUINO_ARRAY_INDEX_A].I2C_driver == I2C_driver_PHYSICAL_INPUT_PORT_DIGITAL
  416. ) {
  417. //ic_sw_mY = wysokosc, nie wspolrzedne
  418. int ic_sw_mX = maxXi - 1.4 * abs(minYi) ; int ic_sw_MX = maxXi ;
  419. int ic_sw_mY = minYi ; int ic_sw_MY = maxYi ;
  420. int ic_sw_circl_X = ic_sw_mX + abs(ic_sw_mX - ic_sw_MX)/4 ;
  421. int ic_sw_circl_Y = ic_sw_MY + ic_sw_mY/2 ;//- (abs(ic_sw_mY - ic_sw_MY) /2) ; //MY+ = NA DOLE, mY+ = gora
  422. int ic_sw_circl_radius = abs(ic_sw_mY) /6 ; // - ic_sw_MY
  423. int ic_sw_rect_w = abs(ic_sw_mX - ic_sw_MX) ;
  424. int ic_sw_rect_h = abs(ic_sw_mY) ; // - ic_sw_MY
  425. int ic_sw_rect_radius = abs(ic_sw_mY) /5 ;//ic_sw_MY
  426. DISPLAY_DEV.fillRect(ic_sw_mX, ic_sw_MY , ic_sw_MX , ic_sw_mY , WHITE);
  427. if(Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A > 0) {
  428. DISPLAY_DEV.fillCircle(ic_sw_circl_X, ic_sw_circl_Y , ic_sw_circl_radius+1, BLACK);
  429. DISPLAY_DEV.fillCircle(ic_sw_circl_X, ic_sw_circl_Y , ic_sw_circl_radius, RED);
  430. } else {
  431. ic_sw_circl_X = ic_sw_MX - abs(ic_sw_mX - ic_sw_MX)/4 ;
  432. DISPLAY_DEV.fillCircle(ic_sw_circl_X, ic_sw_circl_Y , ic_sw_circl_radius, BLACK ); //
  433. }
  434. // DISPLAY_DEV.fillRect( 0, maxYi ,( maxXi /3 ), minYi, WHITE );
  435. // DISPLAY_DEV.fillRect( (maxXi /3), maxYi ,( maxXi /3 * 2 ), minYi, BLACK );
  436. // DISPLAY_DEV.fillRect( (maxXi /3 * 2), maxYi , maxXi, minYi, WHITE );
  437. //DISPLAY_DEV.setCursor(minXi , maxYi ); DISPLAY_DEV.setTextColor(WHITE, BLACK);
  438. //DISPLAY_DEV.print("[ ON ] / [ OFF ] ");DISPLAY_DEV.setTextColor(WHITE);
  439. }
  440. //draw level
  441. DISPLAY_DEV.drawLine(
  442. ( Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A / 3)
  443. , (i * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A) - 1, (( Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A / 3) + 10 ) //maxXi
  444. , (i * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A) - 1 ,DISPLAY_DEV.Color24To565(0x444400) );
  445. /*if(maxYi == 0 ) {
  446. Serial.print(" 404[maxYi]==0 for i[");Serial.print(i);Serial.print(" ] ");
  447. Serial.print("FLAG");Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_ITEM_FLAG_A, BIN);Serial.print(" ] ");
  448. Serial.print("messg[");Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_string_A);Serial.print("] ");
  449. Serial.print("menuYoffset[");Serial.print(menuYoffset);Serial.print("] ");
  450. }
  451. */
  452. DISPLAY_DEV.setCursor(minXi , maxYi ); //[ARDUINO_ATTR_ARRAY_S_INDEX]
  453. // Serial.print(" SetCursorY["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_CURSOR_Y_CHARS_A * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_y_A); Serial.print("] ");
  454. //Serial.print("462:CA:"); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_char_A);
  455. //DISPLAY_DEV.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_string_A);
  456. //DISPLAY_DEV.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_char_A);
  457. //DISPLAY_DEV.print("test 123");
  458. //DISPLAY_DEV.print("test 123");
  459. next_tab_pos = 1 ; //DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A * 6
  460. //MESSAGE BEGIN
  461. //EOF MESSAGE
  462. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_ELEMENT_TO_REFRESH_A == true) {
  463. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_MENU_ITEM_CLASS_A == DISPLAY_MENU_ITEM_CLASS_MENU_TITLE) {
  464. #include "_DISPLAY_func_PRINT_CLASS_MENU_TITLE.h"
  465. } else {
  466. #include "_DISPLAY_func_PRINT_PORT_ELEMENT.h"
  467. }
  468. for (int iA = 0; iA < 24; iA++) {
  469. if(iA % DISPLAY_char24_TAB_SIZE == 0) next_tab_pos++ ;
  470. //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_char24_A[iA] == TAB) {
  471. if(String(message[iA]) == TAB_S) {
  472. //move cursor to optimal tab pos
  473. DISPLAY_DEV.setCursor( (next_tab_pos * DISPLAY_char24_TAB_SIZE * DISPLAY_PHYSICAL_CHAR_A.DISPLAY_textsize_x_A ) , maxYi );
  474. } else {
  475. //DISPLAY_DEV.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_char24_A[iA]);
  476. DISPLAY_DEV.print(message[iA]);
  477. }
  478. }
  479. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[i].DISPLAY_ELEMENT_TO_REFRESH_A = false;
  480. }
  481. // DISPLAY_DEV.print("test 123");
  482. }
  483. }
  484. }
  485. } else { //if((DISPLAY_LATENCY_PASS__POP(time_seq_id_A, time_min_run_A ))
  486. // SPFTFT2(display,bypassed,572);
  487. }
  488. }
  489. #endif
  490. #include "_Slave_Ports_action_func.h"
  491. #if defined(HAS_TFT_ILI9163C)
  492. void DISPLAY_MENU_SELECTOR(DISPLAY_T* DISPLAY_A ,
  493. DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
  494. DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A,
  495. Slave_Ports_Status_T* Slave_Ports_Status_A ,
  496. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A,
  497. // DISPLAY_MENU_ITEM_INDEX_T DISPLAY_MENU_ITEM_INDEX_A ,
  498. time_seq_id_T time_seq_id_A ,
  499. time_min_run_T time_min_run_A ,
  500. //DISPLAY_MENU_SELECTOR_STATUS_T DISPLAY_MENU_SELECTOR_STATUS_A , //; //which mode
  501. DISPLAY_MENU_SELECTOR_SWITCH_T DISPLAY_MENU_SELECTOR_SWITCH_A,
  502. DISPLAY_MENU_SELECTOR_oldEncPos_T DISPLAY_MENU_SELECTOR_oldEncPos_A , //; //values
  503. DISPLAY_MENU_SELECTOR_encoderPos_T DISPLAY_MENU_SELECTOR_encoderPos_A,
  504. DISPLAY_MENU_SELECTOR_triggerCountOld_T DISPLAY_MENU_SELECTOR_triggerCountOld_A,
  505. DISPLAY_MENU_SELECTOR_triggerCount_T DISPLAY_MENU_SELECTOR_triggerCount_A
  506. ) {
  507. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A == 0 ) {
  508. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  509. Serial.print(" [SEL_INIT] ");
  510. #endif
  511. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A = ARDUINO_ARRAY_INDEX_FIRST ;
  512. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG ;
  513. }
  514. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  515. Serial.print(" [SEL_STATUS["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A, BIN); Serial.print("] ");
  516. Serial.print(" [MENU_INDEX["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A); Serial.print("] ");
  517. Serial.print(" [ITEM_INDEX["); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A); Serial.print("] ");
  518. #endif
  519. if(DISPLAY_MENU_SELECTOR_oldEncPos_A != DISPLAY_MENU_SELECTOR_encoderPos_A ) {
  520. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  521. //Serial.print(" #383[ENC][CHG][ROOT] ");
  522. SPFTFTFT2(encoder,changed,root,-650);
  523. #endif
  524. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_MENU_FLAG) {
  525. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  526. Serial.print(" #385[DISPLAY_MENU_SELECTOR_MENU_FLAG] ");
  527. #endif
  528. if(DISPLAY_MENU_SELECTOR_oldEncPos_A > DISPLAY_MENU_SELECTOR_encoderPos_A) {
  529. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  530. Serial.print(" #386[ENCODER][CHANGED]< ");
  531. #endif
  532. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A --;
  533. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A <= ARDUINO_ARRAY_INDEX_FIRST ) {
  534. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A = ARDUINO_ARRAY_INDEX_FIRST ;
  535. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  536. Serial.print("#387[NOT][PREV][MENU]");
  537. #endif
  538. }
  539. } else {
  540. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  541. Serial.print("#386[ENCODER][CHANGED]> ");
  542. #endif
  543. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A - 1].DISPLAY_MENU_ITEM_A[1].DISPLAY_MENU_ITEM_FLAG_A == DISPLAY_MENU_ITEM_FLAG_EMPTY) {
  544. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  545. Serial.print("#388[NOT][NEXT][MENU]");
  546. #endif
  547. } else {
  548. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  549. Serial.print("#388[NEXT][MENU]++");
  550. #endif
  551. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A ++;
  552. }
  553. } //encoderpos
  554. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG ;
  555. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  556. Serial.print("[ WILL MARK MENU CONETXT ]");
  557. #endif
  558. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_FLAG) { //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_MENU_FLAG) {
  559. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  560. Serial.print("[ITEM][CONTEXT]");
  561. #endif
  562. if(DISPLAY_MENU_SELECTOR_oldEncPos_A > DISPLAY_MENU_SELECTOR_encoderPos_A) {
  563. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  564. Serial.print(" #482[ENCODER][CHANGED]< ");
  565. #endif
  566. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A == ARDUINO_ARRAY_INDEX_FIRST) {
  567. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  568. Serial.print(" #485[ENCODER][NO MORE LEFT] ");
  569. #endif
  570. } else {
  571. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  572. Serial.print(" #485[ENCODER][MOVED] ");
  573. #endif
  574. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_EMPTY_FLAG ;
  575. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  576. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A --;
  577. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG ;
  578. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  579. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  580. }
  581. } else if(DISPLAY_MENU_SELECTOR_oldEncPos_A < DISPLAY_MENU_SELECTOR_encoderPos_A) { // if(DISPLAY_MENU_SELECTOR_oldEncPos_A > DISPLAY_MENU_SELECTOR_encoderPos_A) {
  582. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  583. SPFTFT2(encoder,changed,482);
  584. #endif
  585. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A + 1)].DISPLAY_MENU_ITEM_FLAG_A == DISPLAY_MENU_ITEM_FLAG_INITIALIZED) {
  586. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  587. //Serial.print(" #482[ENCODER][MARKED]> ");
  588. SPFTFT2(encoder,marked,482);
  589. #endif
  590. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_EMPTY_FLAG ;
  591. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  592. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A ++;
  593. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG ;
  594. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  595. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  596. }
  597. } //else if(DISPLAY_MENU_SELECTOR_oldEncPos_A < DISPLAY_MENU_SELECTOR_encoderPos_A)
  598. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG) { // else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_FLAG)
  599. //rotate selectors
  600. SPL();
  601. SPFTFTFT2(encoder,item,option,-745);SPFT2(flag,(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A, BIN));
  602. if(DISPLAY_MENU_SELECTOR_oldEncPos_A != DISPLAY_MENU_SELECTOR_encoderPos_A) {
  603. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG) {
  604. SPFTFTFTFT(selector,item,options,level);
  605. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A - DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG ;
  606. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A | DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_TOGGLE_FLAG ;
  607. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A ;
  608. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  609. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  610. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_TOGGLE_FLAG) {
  611. SPFTFTFTFT(selector,item,options,toggle);
  612. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A - DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_TOGGLE_FLAG ;
  613. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A | DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG ;
  614. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A ;
  615. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  616. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  617. } else {
  618. if( DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_CLASS_A & DISPLAY_MENU_ITEM_CLASS_MENU_TITLE) {
  619. SPFT(previous);SPFTFTFTFT2(menu,item,class,title,(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_CLASS_A , BIN));
  620. } else if(
  621. Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A].I2C_driver == I2C_driver_PCF8574
  622. // or todo else digital
  623. ) {
  624. SPFTFT(set,digital); SPFTFTFTFT(selector,item,options,toggle);
  625. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG ;
  626. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A ;
  627. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  628. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  629. } else {
  630. SPFT(else);SPFTFTFTFT(selector,item,options,level);
  631. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A | DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG ;
  632. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A ;
  633. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  634. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  635. } }
  636. }
  637. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG) {
  638. SPFT(previous);SPFTFTFTFT(selector,item,use,toggle); SPFTFT2(new,todo,-785);
  639. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  640. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  641. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A ;
  642. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A < 1) {
  643. SPFTFT(toggle,enable);
  644. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = 255 ;
  645. } else {
  646. SPFTFT(toggle,disable);
  647. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = 0 ;
  648. }
  649. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A={0,0,DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A};
  650. Slave_Ports_action_func(Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A, Slave_Ports_Status_A ,
  651. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_request_set_new_Exp_state ,
  652. TASK_PORT_ASSOC_A,
  653. time_seq_id_A, time_min_run_A, ARDUINO_ARRAY_INDEX_NOT_SET ,
  654. Exp_state_ON_USE_LEVEL ,
  655. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A
  656. );
  657. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  658. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  659. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG) { //else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_FLAG)
  660. SPL(); SPFTFT2(use,level,-812);
  661. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_SMOOTH_A ;
  662. TASK_PORT_ASSOC_SMOOTH_A.Slave_Ports_Status_T_INDEX = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A ;
  663. TASK_PORT_ASSOC_SMOOTH_A.DISPLAY_MENU_INDEX_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A;
  664. TASK_PORT_ASSOC_SMOOTH_A.DISPLAY_MENU_ITEM_INDEX_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A;
  665. //TASK_PORT_ASSOC_SMOOTH_A.Exp_state_level_NEW_DELTA_A = 15;
  666. if(DISPLAY_MENU_SELECTOR_oldEncPos_A > DISPLAY_MENU_SELECTOR_encoderPos_A) {
  667. TASK_PORT_ASSOC_SMOOTH_A.Exp_state_level_NEW_DELTA_A = -2;
  668. SPFT(minus);SPFT2(encoder,DISPLAY_MENU_SELECTOR_encoderPos_A);SPFT2(old,DISPLAY_MENU_SELECTOR_oldEncPos_A);
  669. Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A);
  670. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A > 0) {
  671. SPL();SPFTFT2(millis,debug,748); PROGMEM_CONSOLE_WRITE_CHAR("#748",TASK_TYPE_T_Set_Port_Smooth_forward__);
  672. if(encoderPos_t < millis() ) {
  673. SPFT2(overload,1000);SP(encoderPos_t - millis()) ; PROGMEM_CONSOLE_WRITE_CHAR(">1000",TASK_TYPE_T_Set_Port_Smooth_forward__);
  674. encoderPos_t = millis() + 1000 ;
  675. encoderPos_t1 = millis() + 500 ;
  676. encoderPos_t2 = millis() + 250 ;
  677. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 1, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  678. } else if(encoderPos_t1 < millis() ) {
  679. SPL();
  680. SPFT2(overload,500);SP(encoderPos_t - millis()); PROGMEM_CONSOLE_WRITE_CHAR(">500",TASK_TYPE_T_Set_Port_Smooth_forward__);
  681. encoderPos_t = millis() + 1000 ;
  682. encoderPos_t1 = millis() + 500 ;
  683. encoderPos_t2 = millis() + 250 ;
  684. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 50, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  685. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 100, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  686. } else if(encoderPos_t2 < millis() ) {
  687. SPL();
  688. SPFT2(overload,250);SP(encoderPos_t - millis()); PROGMEM_CONSOLE_WRITE_CHAR(">250",TASK_TYPE_T_Set_Port_Smooth_forward__);
  689. encoderPos_t = millis() + 1000 ;
  690. encoderPos_t1 = millis() + 500 ;
  691. encoderPos_t2 = millis() + 250 ;
  692. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 25, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  693. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 50, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  694. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 75, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  695. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 100, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  696. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 125, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  697. } else {
  698. SPFT2(overload,0); SP(encoderPos_t - millis());
  699. }
  700. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A ;
  701. /* DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A -=5 * abs(DISPLAY_MENU_SELECTOR_oldEncPos_A - DISPLAY_MENU_SELECTOR_encoderPos_A) ; //--;
  702. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A < 0 ) DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = 0 ;
  703. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A={0,0,DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A};
  704. Slave_Ports_action_func(Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A, Slave_Ports_Status_A ,
  705. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_request_set_new_Exp_state ,
  706. TASK_PORT_ASSOC_A,
  707. time_seq_id_A, time_min_run_A, ARDUINO_ARRAY_INDEX_NOT_SET ,
  708. Exp_state_ON_USE_LEVEL ,
  709. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A
  710. );
  711. */
  712. } //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A > 0) {
  713. } else if(DISPLAY_MENU_SELECTOR_oldEncPos_A < DISPLAY_MENU_SELECTOR_encoderPos_A) {
  714. TASK_PORT_ASSOC_SMOOTH_A.Exp_state_level_NEW_DELTA_A = 1;
  715. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A < 254) {
  716. SPL();SPFTFT2(millis,debug,748); PROGMEM_CONSOLE_WRITE_CHAR("#748",TASK_TYPE_T_Set_Port_Smooth_forward__);
  717. if(encoderPos_t < millis() ) {
  718. SPFT2(overload,1000);SP(encoderPos_t - millis()) ; PROGMEM_CONSOLE_WRITE_CHAR(">1000",TASK_TYPE_T_Set_Port_Smooth_forward__);
  719. encoderPos_t = millis() + 1000 ;
  720. encoderPos_t1 = millis() + 500 ;
  721. encoderPos_t2 = millis() + 250 ;
  722. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 1, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  723. } else if(encoderPos_t1 < millis() ) {
  724. SPL();
  725. SPFT2(overload,500);SP(encoderPos_t - millis()); PROGMEM_CONSOLE_WRITE_CHAR(">500",TASK_TYPE_T_Set_Port_Smooth_forward__);
  726. encoderPos_t = millis() + 1000 ;
  727. encoderPos_t1 = millis() + 500 ;
  728. encoderPos_t2 = millis() + 250 ;
  729. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 50, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  730. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 100, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  731. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 150, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  732. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 200, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  733. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 250, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  734. } else if(encoderPos_t2 < millis() ) {
  735. SPL();
  736. SPFT2(overload,250);SP(encoderPos_t - millis()); PROGMEM_CONSOLE_WRITE_CHAR(">250",TASK_TYPE_T_Set_Port_Smooth_forward__);
  737. encoderPos_t = millis() + 1000 ;
  738. encoderPos_t1 = millis() + 500 ;
  739. encoderPos_t2 = millis() + 250 ;
  740. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 50, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  741. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 100, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  742. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 150, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  743. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 200, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  744. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 250, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  745. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 300, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  746. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 350, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  747. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 400, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  748. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 450, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  749. _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_Set_Port_Smooth_forward__ ,TASK_PORT_ASSOC_SMOOTH_A ,millis(), millis() + 500, ARDUINO_ARRAY_INDEX_NOT_SET) ;
  750. } else {
  751. SPFT2(overload,0); SP(encoderPos_t - millis());
  752. }
  753. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A ;
  754. /* DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A += 2 ; //+;
  755. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A >254) DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = 254;
  756. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A={0,0,DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A};
  757. Slave_Ports_Status_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A].Exp_state_level_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A ;
  758. Slave_Ports_action_func(Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A, Slave_Ports_Status_A ,
  759. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A , TASK_TYPE_T_request_set_new_Exp_state ,
  760. TASK_PORT_ASSOC_A,
  761. time_seq_id_A, time_min_run_A, ARDUINO_ARRAY_INDEX_NOT_SET ,
  762. Exp_state_ON_USE_LEVEL ,
  763. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A
  764. );
  765. */
  766. } //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A < 254) {
  767. } else { // if(DISPLAY_MENU_SELECTOR_oldEncPos_A < DISPLAY_MENU_SELECTOR_encoderPos_A) {
  768. SPFT2(error,750); //Serial.print("[ERR}750E");
  769. }
  770. } //else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG)
  771. } else if(DISPLAY_MENU_SELECTOR_triggerCountOld_A != DISPLAY_MENU_SELECTOR_triggerCount_A) {
  772. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  773. //Serial.print("[TRIG++]?");
  774. SPFTFT(trigger,plus);
  775. #endif
  776. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_MENU_FLAG) {
  777. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  778. //Serial.print("[TOGGLE][Fr][SELECTOR_MENU_FLAG]>ITEM");
  779. SPFTFTFTFT2(previous,selector,menu,flag,-949);//
  780. #endif
  781. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG ;
  782. SPFTFTFT(selector,item,flag);
  783. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  784. Serial.print("[ITEM]>1");
  785. #endif
  786. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A = ARDUINO_ARRAY_INDEX_FIRST ;
  787. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  788. Serial.print("[ITEM]>MARK1");
  789. #endif
  790. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A ;
  791. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  792. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  793. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_FLAG) { //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_MENU_FLAG) {
  794. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  795. //Serial.print("[TOGGLE][Fr][SELECTOR_MENU_FLAG]>ITEM>OPTIONS");
  796. SPFTFTFTFT(previous,selector,item,flag) ; SPFTFTFTFT(selector,item,options,flag) ;
  797. #endif
  798. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG ;
  799. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  800. Serial.print("[ITEM]>1");
  801. #endif
  802. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG ;
  803. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  804. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  805. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  806. Serial.print("[ITEM]>MARK1");
  807. #endif
  808. //} else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG) {
  809. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_TOGGLE_FLAG ) {
  810. SPFT(previous); SPFTFTFTFT(selector,item,options,toggle) ; SPFT(new); SPFTFTFTFT(item,options,toggle,use) ;
  811. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG ;
  812. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG ;
  813. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  814. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  815. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_TOGGLE_FLAG) {
  816. SPFT(previous); SPFTFTFTFT(item,options,toggle,use) ; SPFT(new); SPFTFTFTFT2(menu,selector,item,flag,-987);
  817. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG ;
  818. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG;
  819. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  820. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  821. } else if((DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_LEVEL_FLAG)) { //or (DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG )) { //== DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG) { //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG
  822. SPFTFTFTFT(previous,options,level,flag) ;// SPFT(or); SPFTFTFT(item,options,flag) ;
  823. if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A > 0 ) {
  824. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG ;
  825. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG;
  826. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].Exp_state_level_A = Slave_Ports_Status_A[ DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A ].Exp_state_level_A ;
  827. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  828. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  829. SPFTFTFTFT(selector,use,level,flag);
  830. } else {//if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].ARDUINO_ARRAY_INDEX_A > 0 ) {
  831. //exit parent
  832. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG ;
  833. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG;
  834. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  835. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  836. SPFTFTFT2(selector,menu,flag,-1008);
  837. } //else
  838. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG) { //if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG)
  839. //back to elements
  840. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG;
  841. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_ITEM_FLAG ;
  842. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  843. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  844. SPFTFTFTFT(previous,use,level,flag); SPFTFTFTFT(menu,selector,item,flag);
  845. } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A & DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_FLAG) {
  846. SPFT(previous); SPFTFTFTFT(selector,item,options,flag) ; SPFT(new); SPFTFTFTFT(menu,selector,menu,flag) ;
  847. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG ;
  848. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_SELECTOR_STATUS_A = DISPLAY_MENU_SELECTOR_MENU_FLAG ;
  849. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_INDEX_A].DISPLAY_MENU_ITEM_A[DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_ELEMENT_TO_REFRESH_A = true;
  850. DISPLAY_PHYSICAL_CHAR_A.DISPLAY_ELEMENT_TO_REFRESH_A = true;
  851. } else { //else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A == DISPLAY_MENU_SELECTOR_ITEM_OPTIONS_USE_LEVEL_FLAG)
  852. SPFT2(else,777); Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A, BIN);
  853. }
  854. } // if(DISPLAY_MENU_SELECTOR_oldEncPos_A != DISPLAY_MENU_SELECTOR_encoderPos_A ) {
  855. #if defined(DISPLAY_MENU_SELECTOR_DEBUG)
  856. SPFTFT2(debug,trigger,String(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A, BIN));//Serial.print(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_SELECTOR_A[1].DISPLAY_MENU_SELECTOR_STATUS_A, BIN);
  857. #endif
  858. Serial.println(" ");
  859. }
  860. #endif