<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=6628&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-04-03T20:33:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6628&amp;mode</id>
<entry>
<author><name><![CDATA[Piotrek_P]]></name></author>
<updated>2014-04-03T20:33:47+01:00</updated>
<published>2014-04-03T20:33:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76906#p76906</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76906#p76906"/>
<title type="html"><![CDATA[Re: [C] Wielopoziomowe menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76906#p76906"><![CDATA[
Dobrze że już u Ciebie działa, bo ja walczę z czymś innym i nie działa, ale to już inna historia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=290">Piotrek_P</a> — 3 kwi 2014, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2014-04-03T20:27:30+01:00</updated>
<published>2014-04-03T20:27:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76905#p76905</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76905#p76905"/>
<title type="html"><![CDATA[Re: [C] Wielopoziomowe menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76905#p76905"><![CDATA[
<div class="quotetitle">superbzyku napisał(a):</div><div class="quotecontent"><br />.....Teraz najbardziej mnie zastanawia jak to wcześniej mogło działać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pamiętaj! Piłeś? Nie programuj!<br /></div><br /><br />Nie działa? Wypij (np. sok jabłkowy) i siądź do programowania. Zadziała!<br /><br /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 3 kwi 2014, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[superbzyku]]></name></author>
<updated>2014-04-03T20:20:03+01:00</updated>
<published>2014-04-03T20:20:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76904#p76904</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76904#p76904"/>
<title type="html"><![CDATA[Re: [C] Wielopoziomowe menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76904#p76904"><![CDATA[
Ech... też tak macie, że jak pojawia się jakiś problem nie do przebrnięcia i napiszecie o tym gdzieś na forum to w ciągu kilku minut przychodzi rozwiązanie? Przecież moje &quot;menuid&quot; to nie index tablicy ze strukturami tylko wartość w strukturze, więc przed odwołaniem się po menuid trzeba najpierw wyszukać sobie index w tablicy struktur <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />np tak:<br /><br />[syntax=c]int index_menu_po_id(u8 id) {<br />u8 index = 0;<br />for (i = 0; i &lt; menu_wszystkie_pozycje; i++) {<br />if (menu&#91;i&#93;.id == id) {<br />index = i;<br />break;<br />}<br />}<br />return index;<br />}[/syntax]<br /><br />i teraz można tak: <br /><br />[syntax=c]LCD_WriteText(menu&#91;index_menu_po_id(menu&#91;menuid&#93;.rodzic)&#93;.opis);[/syntax]<br /><br />Teraz najbardziej mnie zastanawia jak to wcześniej mogło działać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pamiętaj! Piłeś? Nie programuj!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3465">superbzyku</a> — 3 kwi 2014, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek_P]]></name></author>
<updated>2014-04-03T19:55:53+01:00</updated>
<published>2014-04-03T19:55:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76898#p76898</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76898#p76898"/>
<title type="html"><![CDATA[Re: [C] Wielopoziomowe menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76898#p76898"><![CDATA[
Nie wiem dlaczego, ale mam wrażenie że stos nie może tego ogarnąć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Może lepsi ode mnie się jeszcze wypowiedzą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=290">Piotrek_P</a> — 3 kwi 2014, o 19:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[superbzyku]]></name></author>
<updated>2014-04-03T19:35:54+01:00</updated>
<published>2014-04-03T19:35:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76891#p76891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76891#p76891"/>
<title type="html"><![CDATA[[C] Wielopoziomowe menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6628&amp;p=76891#p76891"><![CDATA[
Cześć,<br /><br />W trakcie pisania mojego programu natrafiłem na dziwny problem, kombinuje z tym od wczoraj i już skończyły mi się pomysły. Bez Waszego wsparcia chyba się nie obejdzie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />Moje menu wielopoziomowe definiuje następująco: <br /><br />[syntax=c]//...<br />typedef struct {<br />uint8_t id;<br />uint8_t rodzic; <br />uint8_t tryb;<br />uint8_t A; // parametr A / min<br />uint8_t B; // parametr B / max<br />uint8_t* do_nastawy;<br />void (*f_start)(uint8_t menuindex);<br />void (*f_stop)();<br /><br />char *opis;<br />} menu_obiekt;<br />//...<br /><br />const menu_obiekt menu&#91;&#93; = {<br /><br />// id, rodzic, tryb, A, B, funkcja, funkcja po zakonczeniu, opis<br /><br />{ 0, -1, 0, 0, 0, NULL, NULL, NULL, &quot;Menu&quot; },<br /><br /><br />{ 1, 0, 0, 0, 0, NULL, NULL, NULL, &quot;Ustawienia&quot; },<br /><br />{ 2, 1, 0, 0, 0, NULL, NULL, NULL, &quot;Data i godzina&quot; },<br /><br />{ 3, 2, 1, 0, 23, &amp;TSystem.Godziny, ustawienia_zmien_zmienna,zapisz_czas_do_RTC, &quot;Godzina&quot; },<br />{ 4, 2, 1, 0, 59, &amp;TSystem.Minuty, ustawienia_zmien_zmienna, zapisz_czas_do_RTC,&quot;Minuty&quot; },<br />{ 5, 2, 1, 0, 59, &amp;TSystem.Sekundy, ustawienia_zmien_zmienna, zapisz_czas_do_RTC,&quot;Sekundy&quot; },<br />{ 6, 2, 1, 1, 31, &amp;TSystem.Dzien,ustawienia_zmien_zmienna, zapisz_czas_do_RTC, &quot;Dzien&quot; },<br />{ 7, 2,1, 1, 12, &amp;TSystem.Miesiac, ustawienia_zmien_zmienna, zapisz_czas_do_RTC, &quot;Miesiac&quot; },<br />{ 8, 2,1, 13, 255, &amp;TSystem.Rok, ustawienia_zmien_zmienna, zapisz_czas_do_RTC, &quot;Rok&quot; },<br /><br /><br />{ 10, 0, 0, 0, 0, NULL, NULL, NULL, &quot;Radio&quot; },<br />{ 11, 10, 1, 0, 0, NULL, strojenie_reczne, NULL, &quot;Strojenie reczne&quot; },<br />{ 12, 10, 1, 0, 0, NULL, strojenie_auto, NULL, &quot;Strojenie auto&quot; },<br /><br />{ 20, 0, 0, 0, 0, NULL, NULL, NULL, &quot;Alarm&quot; },<br /><br />{ 21, 20, 0, 0, 0, NULL, NULL, NULL, &quot;Moje alarmy&quot; },<br />{ 22, 20, 0, 0, 0, NULL, NULL, NULL, &quot;Ust. budzenia&quot; },<br />{ 23, 20, 1, 1, 30, &amp;ustawienia.czas_drzemki, ustawienia_zmien_zmienna, NULL, &quot;Czas drzemki&quot; },<br />{ 24, 20, 0, 0, 0, NULL, NULL, NULL, &quot;Wylacz wszystkie&quot; },<br />{ 25, 20, 0, 0, 0, NULL, NULL, NULL, &quot;Wlacz wszystkie&quot; },<br /><br />};<br /><br />//...[/syntax]<br /><br />po menu nawiguję takimi funkcjami:<br /><br />[syntax=c]extern menu_obiekt menu&#91;&#93;; // odwołanie do tablicy menu umieszczonej w programie głównym<br />extern u8 tackt;<br />extern u8 menu_out;<br /><br />uint8_t menu_on = 0;<br />uint8_t menu_rodzic = 0;<br />uint8_t menu_dziecko = 1;<br />uint8_t menu_wszystkie_pozycje;<br />uint8_t menu_znalazlem_dziecko;<br />uint8_t menu_pamietaj_dziecko;<br /><br />uint8_t i;<br />uint8_t ii;<br /><br />void szukaj_dziecka_w_przod() {<br />menu_znalazlem_dziecko = 0;<br />for (i = 0; i &lt; menu_wszystkie_pozycje; i++) {<br />if (menu&#91;i&#93;.rodzic == menu&#91;menu_rodzic&#93;.id) {<br />if (i &gt; menu_dziecko) {<br />menu_dziecko = i;<br />menu_znalazlem_dziecko = 1;<br />break;<br />}<br />}<br />}<br />if (menu_znalazlem_dziecko == 0) {<br />menu_dziecko = 0;<br />szukaj_dziecka_w_przod();<br />}<br />}<br /><br />void szukaj_dziecka_w_tyl() {<br />menu_znalazlem_dziecko = 0;<br />for (i = menu_wszystkie_pozycje; i &gt; 0; i--) {<br />if (menu&#91;i&#93;.rodzic == menu&#91;menu_rodzic&#93;.id) {<br />if (i &lt; menu_dziecko) {<br />menu_dziecko = i;<br />menu_znalazlem_dziecko = 1;<br />break;<br />}<br />}<br />}<br />if (menu_znalazlem_dziecko == 0) {<br />menu_dziecko = menu_wszystkie_pozycje;<br />szukaj_dziecka_w_tyl();<br /><br />}<br />}<br /><br />void wyswietl_menu() {<br />for (i = 0; i &lt; menu_wszystkie_pozycje; i++) {<br />if (menu_rodzic == i) {<br />LCD_Clear();<br />LCD_GoTo(0, 0);<br />LCD_WriteText(menu&#91;i&#93;.opis);<br />}<br />if (menu_dziecko == i) {<br />//LCD_Clear();<br />LCD_GoTo(0, 1);<br />LCD_WriteText(menu&#91;i&#93;.opis);<br />}<br />}<br />}<br /><br />void menu_wstecz() {<br />if (menu_rodzic == 0) {<br />menu_on = 0;<br />} else {<br />for (i = 0; i &lt; menu_wszystkie_pozycje; i++) {<br />if (menu&#91;menu_rodzic&#93;.rodzic == menu&#91;i&#93;.id) {<br />menu_dziecko = menu_pamietaj_dziecko;<br />menu_rodzic = i;<br />break;<br />}<br />}<br />}<br />}<br /><br />void menu_wykonaj() {<br /><br />if (menu_on == 0) {<br />menu_on = 1;<br />} else {<br /><br />switch (menu&#91;menu_dziecko&#93;.tryb) {<br />case 0:<br />// rozwijam menu<br />menu_pamietaj_dziecko = menu_dziecko;<br />menu_rodzic = menu_dziecko;<br />menu_dziecko = 1;<br />szukaj_dziecka_w_przod();<br />break;<br />case 1:<br />menu&#91;menu_dziecko&#93;.f_start(menu_dziecko);<br />break;<br />}<br />}<br /><br />}<br /><br />int _menu() {<br /><br />if (menu_on == 1) {<br /><br />wyswietl_menu();<br /><br />//ustawiaj();<br /><br />if (tackt == KEY_RIGHT) {<br />tackt = KEY_NULL;<br />menu_out = auto_menu_out;<br />LCD_Clear();<br />szukaj_dziecka_w_przod();<br />}<br /><br />if (tackt == KEY_LEFT) {<br />tackt = KEY_NULL;<br />menu_out = auto_menu_out;<br />LCD_Clear();<br />szukaj_dziecka_w_tyl();<br />}<br /><br />if (tackt == KEY_ESC) {<br />tackt = KEY_NULL;<br />//menu_out = auto_menu_out;<br />LCD_Clear();<br />menu_wstecz();<br />}<br /><br />} else {<br />if (tackt == KEY_OK) {<br />tackt = KEY_NULL;<br />menu_out = auto_menu_out;<br />LCD_Clear();<br />menu_on = 1;<br />}<br />}<br /><br />if (tackt == KEY_OK) {<br />tackt = KEY_NULL;<br />menu_out = auto_menu_out;<br />LCD_Clear();<br />menu_wykonaj();<br />}<br /><br />return menu_on;<br />}[/syntax]<br /><br />W pętli głównej to tylko:<br /><br />[syntax=c]if (_menu() == 0) {<br />// ekran glowny<br />pokaz_ekran_glowny();<br />}[/syntax]<br /><br />W strukturze menu odwołuję się do funkcji &quot;ustawienia_zmien_zmienna&quot;, która ma za zadanie zmieniać wartość zmiennej której wskaźnik jest podany jako 6 parametr struktury np. &amp;TSystem.Godziny... <br /><br />funkcja wygląda następująco (jest tam teraz trochę śmieci ze względu na moje próby heroicznej walki)<br /><br />[syntax=c]void ustawienia_zmien_zmienna(uint8_t menuid) {<br /><br />tmp_lcd_block = -1;<br /><br />u8 nowa_wartosc = *menu&#91;menu_dziecko&#93;.do_nastawy;<br /><br />for (;;) {<br /><br />//ustawiaj();<br /><br />if (tackt == KEY_RIGHT) {<br />tackt = KEY_NULL;<br />nowa_wartosc++;<br />}<br /><br />if (tackt == KEY_LEFT) {<br />tackt = KEY_NULL;<br />nowa_wartosc--;<br />}<br /><br />if (nowa_wartosc &gt; menu&#91;menuid&#93;.B) {<br />nowa_wartosc = menu&#91;menuid&#93;.A;<br />}<br /><br />if (nowa_wartosc &lt; menu&#91;menuid&#93;.A) {<br />nowa_wartosc = menu&#91;menuid&#93;.B;<br />}<br /><br />if (tmp_lcd_block != nowa_wartosc) {<br /><br />tmp_lcd_block = nowa_wartosc;<br /><br />LCD_Clear();<br />LCD_GoTo(0, 0);<br />LCD_WriteText(menu&#91;menu&#91;menuid&#93;.rodzic&#93;.opis);<br />LCD_GoTo(0, 1);<br />LCD_WriteText(menu&#91;menuid&#93;.opis);<br />LCD_WriteText(&quot;: &quot;);<br />itoa(nowa_wartosc, buffer, 10);<br />LCD_WriteText(buffer);<br />}<br /><br />if (tackt == KEY_OK) {<br />*menu&#91;menu_dziecko&#93;.do_nastawy = nowa_wartosc;<br />if (menu&#91;menuid&#93;.f_stop != NULL ) {<br />menu&#91;menuid&#93;.f_stop();<br />}<br /><br />tackt = KEY_NULL;<br />LCD_Clear();<br />break;<br />}<br /><br />if (tackt == KEY_ESC) {<br />LCD_Clear();<br />tackt = KEY_NULL;<br />break;<br />}<br /><br />}<br /><br />tackt = KEY_NULL;<br /><br />}[/syntax]<br /><br />I teraz do sedna... do tej pory menu działało bez problemu, ale kiedy się rozrosło (po dodaniu ostatniego menu) mam problem w funkcji ustawienia_zmien_zmienna otóż w miejscu: <br /><br />[syntax=c]LCD_WriteText(menu&#91;menu&#91;menuid&#93;.rodzic&#93;.opis);[/syntax]<br /><br />gdzie najzwyczajniej chciałbym wyświetlić nazwę rodzica (dla poprzednich pozycji działa bez problemu) dostaję krzaki na wyświetlaczu (jakieś losowe wartości z pamięci), a przecież kiedy chwilę wcześniej chce odczytać wartość ustawianej zmiennej o tutaj: <br /><br />[syntax=c]u8 nowa_wartosc = *menu&#91;menu_dziecko&#93;.do_nastawy;<br /><br />// czy chwilę przed feralnym miejscem odczytuję nazwę samego podmenu<br /><br />LCD_WriteText(menu&#91;menuid&#93;.opis);[/syntax]<br /><br />działa bez problemu <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":-(" title="Smutny" /><br /><br />Macie jakieś pomysły?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3465">superbzyku</a> — 3 kwi 2014, o 19:35</p><hr />
]]></content>
</entry>
</feed>