<?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=47&amp;t=16837&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-19T19:08:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=16837&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-19T19:08:54+01:00</updated>
<published>2016-11-19T19:08:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175185#p175185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175185#p175185"/>
<title type="html"><![CDATA[Re: błąd  wartości w tablicy struktury przekazanej jako ptr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175185#p175185"><![CDATA[
a przepraszam, ja nie zauważyłem działu - Arduino a na arduino się nie znam więc sorki - tu nie mam zielonego w ogóle pojęcia co podpowiadać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 lis 2016, o 19:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gaza]]></name></author>
<updated>2016-11-19T18:36:43+01:00</updated>
<published>2016-11-19T18:36:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175180#p175180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175180#p175180"/>
<title type="html"><![CDATA[Re: błąd  wartości w tablicy struktury przekazanej jako ptr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=175180#p175180"><![CDATA[
cóż ja mogę powiedzieć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />być może jest babol, ale nie wiem gdzie.<br />Wydawało mi się, że w końcu zrozumiałem wskaźniki, a tu klops.<br /><br />W każdym razie zaczęło działać.<br />Nie wiem, czy to źródło problemu, ale:<br />nie podoba mi sie edytor w arduino IDE i włączyłem opcje &quot; zewnętrzny edytor &quot;<br />program pisałem w VIM i ładowałem go przez IDE.<br />W chwili gdy zrezygnowałem z vim i wszystko pisałem w IDE, to problem zniknął.<br />Nie wiem czy tylko to było przyczyną, ale obecnie program działa i go nie ruszam.<br />Co prawda mam inny problem ,ale to w osobnym wątku.<br /><br />Pozdr<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=503">gaza</a> — 19 lis 2016, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-17T18:20:25+01:00</updated>
<published>2016-11-17T18:20:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174945#p174945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174945#p174945"/>
<title type="html"><![CDATA[Re: błąd  wartości w tablicy struktury przekazanej jako ptr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174945#p174945"><![CDATA[
<div class="quotetitle">gaza napisał(a):</div><div class="quotecontent"><br />Czy to możliwe, że ten pieprzony kompilator, albo optymalizator się spieprzył ?<br /></div><br />No jak zwykle - masakra <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... jak się zrobi BABOLA to co? ... no to przecież nie ja ! ... winny kompilator, albo procek, albo inny układ scalony <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> WSZYSTKO tylko nie ja <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=54">mirekk36</a> — 17 lis 2016, o 18:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gaza]]></name></author>
<updated>2016-11-17T14:22:02+01:00</updated>
<published>2016-11-17T14:22:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174929#p174929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174929#p174929"/>
<title type="html"><![CDATA[błąd  wartości w tablicy struktury przekazanej jako ptr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16837&amp;p=174929#p174929"><![CDATA[
nie wiem, czy temat w pełni oddaje to czego dotyczy problem. Spróbuje wyjasnić.<br />Mam zmienna tablicową której elementy są strukturą. Wskaźnik do tej zmiennej przekazuje do funkcji, gdzie wykonywane są operacje na polach struktury. Wygląda jednak na to, że wartości poprawnie zapisują sie do struktury pod jednym indeksem a pod drugim już nie. Wklejam kod i tłumaczę co się dzieje.<br />[syntax=cpp]#define POWER 2<br />#define DIRECTION 9<br />#define LEFT 11<br />#define RIGHT 10<br />#define CUR_LEFT 15<br />#define CUR_RIGHT 14<br />#define GATE_SIGNAL 3<br />#define WICKET_SIGNAL 4<br /><br />typedef struct {<br />  int pin;<br />  unsigned long time = 0;<br />  float measurment&#91;10&#93; = {0.0};<br />  int next = 0;<br />  float avg = 0.0;<br />} t_current; //definicja zmiennej z pomiarami prądu<br /><br />enum t_state {OPENING, ALARM, CLOSING, PENDING};<br />enum t_action {OPEN, STOP, CLOSE, PAUSE};<br />/*<br />  OPEN - otwieranie ustawiane z pilota<br />  STOP - ustawiane przez sterownik po zakończeniu otwierania lub zamykania<br />  CLOSE - zamykanie ustawiane z pilota<br />  PAUSE - ustawiane z pilota tylko w czasie ruchu<br />*/<br />enum names {NORMAL, WICKED };<br /><br />//String state&#91;3&#93; ={&quot;OPEN&quot;, &quot;STOP&quot;, &quot;CLOSE&quot;, &quot;STOP&quot;};<br /><br />typedef struct  {<br />        String name;<br />        int pin;<br />        unsigned long start_time;<br />        t_current current;<br />        t_state state;<br />        t_action action;<br />        t_action last_move = OPEN;<br />} t_gate_part; //str definujaca stan skrzydła bramy<br /><br /><br />t_gate_part gate&#91;2&#93;;<br /><br />word zupka=0;<br />word kubek = 0;<br />unsigned long timer1 = 0;<br />boolean sec_flag = false;<br />unsigned long timer2 = 0;<br />unsigned long timer3 = 0;<br />unsigned long timer4 = 0;<br />String action_dict&#91;&#93; = {&quot;OPEN&quot;, &quot;STOP&quot;, &quot;CLOSE&quot;, &quot;PAUSE&quot;};<br /><br /><br />void checkAction(t_gate_part gate&#91;&#93;);<br /><br /><br />void setup() {<br />  Serial.begin(9600);//Uruchomienie komunikacji przez USART<br />  Serial.println(&quot;Uruchomienie sterownika bramy wjazdowej&quot;);<br />  pinMode(POWER, OUTPUT); //przekaźnik załaczenia 230V na transformator<br />  pinMode(DIRECTION, OUTPUT); //Przekaźnik mostka H - zmiana kierunku ruchu bramy<br />  pinMode(LEFT, OUTPUT); //Przekaźnik lewego skrzydła<br />  pinMode(RIGHT, OUTPUT); //Przekaźnik prawego skrzydła<br />  pinMode(GATE_SIGNAL, INPUT_PULLUP); //sygnał otwarcia/zamknięcia bramy<br />  pinMode(WICKET_SIGNAL, INPUT_PULLUP); //sygnał otwarcia/zamknięcia bramy<br />  <br />  digitalWrite(POWER, LOW);//Włączenie przekaźnika  <br />  digitalWrite(LEFT, LOW);//Włączenie przekaźnika<br />  digitalWrite(RIGHT, LOW);//Włączenie przekaźnika<br />  digitalWrite(DIRECTION, LOW);//Włączenie przekaźnika<br /> <br />  //inicjalizacja obiektu bramy<br />  gate&#91;NORMAL&#93;.name = &quot;NORMAL&quot;;<br />  gate&#91;NORMAL&#93;.pin = LEFT;<br />  gate&#91;NORMAL&#93;.current.pin = CUR_LEFT;<br />  gate&#91;NORMAL&#93;.current.avg = 0.0;<br />  gate&#91;NORMAL&#93;.state = PENDING;<br />  gate&#91;NORMAL&#93;.action = STOP;<br />  gate&#91;NORMAL&#93;.last_move = OPEN;<br />  gate&#91;WICKED&#93;.name = &quot;WICKED&quot;;<br />  gate&#91;WICKED&#93;.pin = RIGHT;<br />  gate&#91;WICKED&#93;.current.pin = CUR_RIGHT;<br />  gate&#91;WICKED&#93;.current.avg = 0.0;<br />  gate&#91;WICKED&#93;.current.measurment&#91;0&#93; = (0.0);<br />  gate&#91;WICKED&#93;.state = PENDING;<br />  gate&#91;WICKED&#93;.action = STOP;<br />  gate&#91;WICKED&#93;.last_move = OPEN;<br /><br />//&quot;NORMAL&quot;LEFT, 0, {15, 0, { }, 1, 0.0}, PENDING, STOP} ;  <br />//  gate&#91;WICKED&#93; ={&quot;WICKED&quot;, RIGHT, 0, {14, 0, { }, 1, 0.0}, PENDING, STOP} ;<br /><br />    Serial.print(&quot;STATE|&quot;);<br />          Serial.println(action_dict&#91;gate&#91;NORMAL&#93;.last_move&#93;);<br />}<br /> <br />void loop() {<br />  <br /><br />  checkAction(gate); // sprawdzamy stan przycisku i maszyny stanów<br />  Serial.print(gate&#91;NORMAL&#93;.action);<br />  Serial.println(gate&#91;WICKED&#93;.action);<br /><br />}<br /><br />/*Sprawdzanie niciśnietych przycisków <br />Ustawianie odpowiednie statusu pracy bramy<br /><br />*/<br />void checkAction(t_gate_part gate&#91;&#93;){<br />  String name = &quot;&quot;;<br />  if (digitalRead(GATE_SIGNAL) == LOW &amp;&amp; zupka == 0){<br />    zupka=30000;<br />    // STATE|prev_move|state<br />    Serial.print(&quot;STATE|&quot;);<br />    switch (gate&#91;NORMAL&#93;.action){<br />      case STOP :<br />        if ( gate&#91;NORMAL&#93;.last_move == OPEN ){<br />          // obsługa ustawień dla CLOSE<br />          Serial.print(action_dict&#91;gate&#91;NORMAL&#93;.last_move&#93;);<br />          gate&#91;NORMAL&#93;.action = CLOSE;<br />          gate&#91;NORMAL&#93;.last_move = CLOSE;<br />          gate&#91;NORMAL&#93;.state = CLOSING;<br />          gate&#91;NORMAL&#93;.start_time = millis();<br />          gate&#91;WICKED&#93;.action = CLOSE;<br />          gate&#91;WICKED&#93;.state = CLOSING;<br />          gate&#91;WICKED&#93;.last_move = CLOSE;<br />          gate&#91;WICKED&#93;.start_time = millis();<br />          Serial.print(&quot;|&quot;);<br />          Serial.println(action_dict&#91;gate&#91;NORMAL&#93;.action&#93;);<br />        } else if ( gate&#91;NORMAL&#93;.last_move == CLOSE ){<br />          // obsługa ustawień dla OPEN<br />          Serial.print(action_dict&#91;gate&#91;NORMAL&#93;.last_move&#93;);<br />          gate&#91;NORMAL&#93;.action = OPEN;<br />          gate&#91;NORMAL&#93;.state = OPENING;<br />          gate&#91;NORMAL&#93;.last_move = OPEN;<br />          gate&#91;WICKED&#93;.action = OPEN;<br />          gate&#91;WICKED&#93;.state = OPENING;<br />          gate&#91;WICKED&#93;.last_move = OPEN;<br />          Serial.print(&quot;|&quot;);<br />          Serial.println(action_dict&#91;gate&#91;NORMAL&#93;.action&#93;);<br />        }else{<br />          Serial.println(&quot;&quot;);<br />          Serial.print(&quot;DEBUG|blad warunku if w akcji STOP - nieobslugiwana wartosc gate&#91;NORMAL&#93;.last_move :&quot;);<br />          Serial.println(gate&#91;NORMAL&#93;.last_move);<br />        }<br />        break;<br />    }<br />  }else<br />    zupka = zupka == 0 ? 0 : zupka-1; <br />}[/syntax]<br /><br />po wgraniu programu i odpaleniu minicoma program zaczyna wyświetlać dane.<br />na początku widzę po dwie jedynki w wierszu:<br />11<br />11<br />11<br />11<br />11<br /><br />Po zwarciu do masy nóżki 3 ( arduino nano) jest informacja o zmianie statusu  po czym prezentowane są liczby:<br />21<br />21<br />21<br />21<br />21<br /><br />Dziwne, bo w fragmencie<br />[syntax=cpp]gate&#91;NORMAL&#93;.action = CLOSE;<br />gate&#91;NORMAL&#93;.last_move = CLOSE;<br />gate&#91;NORMAL&#93;.state = CLOSING;<br />gate&#91;NORMAL&#93;.start_time = millis();<br />gate&#91;WICKED&#93;.action = CLOSE;<br />gate&#91;WICKED&#93;.state = CLOSING;<br />gate&#91;WICKED&#93;.last_move = CLOSE;<br />gate&#91;WICKED&#93;.start_time = millis();[/syntax]<br /><br />jest przypisywanie do obu elementów tablicy do pól action tych samych wartości.<br /><br />co z tym kodem jest nie tak ?<br /><br />Pozdrawiam<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 52 minutyach ]</span></strong><br /><br />Zrobiłem drobną modyfikację.<br />W fragmencie gdzie ustawiam &quot;action&quot; dodałem jeszcze zmiane zmiennej &quot;name&quot;.<br />[syntax=cpp]gate&#91;NORMAL&#93;.action = CLOSE;<br />    gate&#91;NORMAL&#93;.last_move = CLOSE;<br />    gate&#91;NORMAL&#93;.state = CLOSING;<br />    gate&#91;NORMAL&#93;.start_time = millis();<br />    gate&#91;NORMAL&#93;.name = &quot;norm&quot;;<br />    gate&#91;WICKED&#93;.action = CLOSE;<br />    gate&#91;WICKED&#93;.state = CLOSING;<br />    gate&#91;WICKED&#93;.last_move = CLOSE;<br />    gate&#91;WICKED&#93;.start_time = millis();<br />    gate&#91;WICKED&#93;.name = &quot;wick&quot;;[/syntax]<br />Ta zmiana spowodowała, że teraz wyświetla mi się prawidłowo, czyli :<br />22<br />22<br />22<br />22<br />itd...<br /><br />Czy to możliwe, że ten pieprzony kompilator, albo optymalizator się spieprzył ?<br />siedzę nad tym już drugi tydzień i co chwilę wyskakują jakieś kwiatki.<br />Często jest to spowodowane moją winą, ale w tym przypadku dodałem tylko dwie linijki kodu i wszystko zaczęło działać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=503">gaza</a> — 17 lis 2016, o 14:22</p><hr />
]]></content>
</entry>
</feed>