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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-01-17T19:55:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21880&amp;mode</id>
<entry>
<author><name><![CDATA[tokirium]]></name></author>
<updated>2019-01-17T19:55:06+01:00</updated>
<published>2019-01-17T19:55:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215907#p215907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215907#p215907"/>
<title type="html"><![CDATA[Re: Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215907#p215907"><![CDATA[
Też przychylam się do pierwszej propozycji, bo dla mnie jest bardziej przejrzysta, ale wszystkim dziękuję za pomoc. Od razu zadziałało tak jak powinno <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15668">tokirium</a> — 17 sty 2019, o 19:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2019-01-16T20:01:45+01:00</updated>
<published>2019-01-16T20:01:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215891#p215891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215891#p215891"/>
<title type="html"><![CDATA[Re: Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215891#p215891"><![CDATA[
Tak, masz rację @<strong>andrews</strong>. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Poprawiłem w między czasie logikę w drugim &quot;while&quot;, bo niepotrzebnie umieściłem tam '!'.<br />Nie ma adnotacji &quot;edytowano&quot;, bo skorygowałem to zanim umieściłeś post.<br /><strong>(było - póki oba są w stanie niskim !( PINA &amp; 3), zamiast póki nie są oba w stanie niskim ( PINA &amp; 3).)</strong>  sorka <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 16 sty 2019, o 20:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-01-16T19:37:50+01:00</updated>
<published>2019-01-16T19:37:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215890#p215890</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215890#p215890"/>
<title type="html"><![CDATA[Re: Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215890#p215890"><![CDATA[
<div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />albo-<br />skoro masz wybrane PA0 i PA1, to może. <br /><br />[syntax=c]while( 3 != PINA &amp; 3){....} // dopoki oba nie są w stanie wysokim<br />while( !( PINA &amp; 3) ) {....}  // dopoki oba nie sa w stanie niskim[/syntax]<br /><br />może?<br /></div><br /><br />Tak też zapewne zadziała. Zwróć tylko uwagę, że w przypadku konieczności zmiany portu lub pinu w dalszej fazie programu trzeba będzie pamiętać, żeby odnaleźć ten fragment kodu i ręcznie zmienić liczbę 3 lub w ogóle zmienić ten fragment kodu w przypadku, gdy trzeba przenieść się z przyciskiem na inny port. A co jeśli trzeba by było (przy bardziej rozbudowanym programie) zmienić to w kilku miejscach? A jeśli wrócisz do modyfikacji kodu po dłuższej przerwie? Pewnie już nie będziesz pamiętał, gdzie właściwie kod trzeba będzie zmienić.<br /><br />Lepszym rozwiązaniem byłoby przykładowo:[syntax=c]#define SWITCHA_PIN     PINA<br />#define SWITCHA_BIT     (1&lt;&lt;PA0)<br />#define SWITCHB_PIN     PINA<br />#define SWITCHB_BIT     (1&lt;&lt;PA1)<br /><br />// pętla, wykonywana dopóki na obydwu pinach SWITCHA i SWITCHB nie pojawi się stan niski<br />while(  (SWITCHA_PIN &amp; SWITCHA_BIT) || (SWITCHB_PIN &amp; SWITCHB_BIT) ) {...}<br /><br />// pętla, wykonywana dopóki na obydwu pinach ASWITCH i BSWITCH nie pojawi się stan niski<br />while( !((SWITCHA_PIN &amp; SWITCHA_BIT) &amp;&amp; (SWITCHB_PIN &amp; SWITCHB_BIT)) ) {...}[/syntax]<br />Wtedy w razie potrzeby wystarczy zmienić PINA np. na PINB i/lub zmienić numer bitu, a kod sam się zmodyfikuje.<br /><br />Ewentualnie (<strong>przy założeniu, że piny będą na pewno na tym samym porcie</strong>) rozwiązanie kolegi <strong><span style="color: #0080FF">Daro69</span></strong>:<br />[syntax=c]#define SWITCH_PIN      PINA<br />#define SWITCHA_BIT     (1&lt;&lt;PA0)<br />#define SWITCHB_BIT     (1&lt;&lt;PA1)<br /><br />// pętla, wykonywana dopóki na obydwu pinach SWITCHA i SWITCHB nie pojawi się stan wysoki<br />while( (SWITCH_PIN &amp; (SWITCHA_BIT | SWITCHB_BIT) != (SWITCHA_BIT | SWITCHB_BIT)) ) {...}<br /><br />// pętla, wykonywana dopóki na obydwu pinach SWITCHA i SWITCHB nie pojawi się stan niski<br />while( SWITCH_PIN &amp; (SWITCHA_BIT | SWITCHB_BIT) ) {...}[/syntax]<br /><br />Być może wygląda to nieco bardziej skomplikowanie i trzeba się więcej napisać (ewentualnie nazwy makr można skrócić), ale jeśli w miarę rozwoju projektu trzeba będzie coś zmienić, to taki sposób pisania naprawdę procentuje.<br /><br />Oczywiście nie ma takiego przymusu, będzie działać też z wpisaną &quot;na sztywno&quot; wartością 3, ale styl jaki przedstawiłem to taka &quot;dobra praktyka&quot;. I proszę nie traktować moich uwag jako złośliwość czy wymądrzanie się <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Moim zdaniem dobrze jest od początku uczyć się dobrych nawyków <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=14165">andrews</a> — 16 sty 2019, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2019-01-16T18:18:47+01:00</updated>
<published>2019-01-16T18:18:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215888#p215888</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215888#p215888"/>
<title type="html"><![CDATA[Re: Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215888#p215888"><![CDATA[
albo-<br />skoro masz wybrane PA0 i PA1, to może. <br /><br />[syntax=c]while( 3 != PINA &amp; 3){....} // dopoki oba nie są w stanie wysokim<br />while( PINA &amp; 3 ) {....}  // dopoki oba nie sa w stanie niskim[/syntax]<br /><br />może?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 16 sty 2019, o 18:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-01-16T06:45:57+01:00</updated>
<published>2019-01-16T06:45:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215869#p215869</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215869#p215869"/>
<title type="html"><![CDATA[Re: Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215869#p215869"><![CDATA[
[syntax=c]// pętla, wykonywana dopóki na obydwu pinach ASWITCH i BSWITCH nie pojawi się stan niski<br />while( (PINA &amp; ASWITCH) || (PINA &amp; BSWITCH) ){...}<br /> <br />// pętla, wykonywana dopóki nie pojawi się stan wysoki na obu pinach<br />while( !( (PINA &amp; ASWITCH) &amp;&amp; (PINA &amp; BSWITCH) ) ){....}<br />// lub<br />while( !(PINA &amp; ASWITCH) || !(PINA &amp; BSWITCH) ){....}[/syntax]<br />Poczytaj o algebrze Boola, o upraszczaniu funkcji boolowskich (w szczególności prawo de Morgana).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 16 sty 2019, o 06:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tokirium]]></name></author>
<updated>2019-01-16T01:03:32+01:00</updated>
<published>2019-01-16T01:03:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215860#p215860</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215860#p215860"/>
<title type="html"><![CDATA[Pętla while - warunek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21880&amp;p=215860#p215860"><![CDATA[
Mam małą zagwozdkę z funkcją while, program nie działa mi tak jak bym tego oczekiwał i trochę się pogubiłem, bo nie jestem pewien gdzie jest błąd. <br />Jedna pętla while ma się zakończyć, gdy na pinach PA0 i PA1 mikrokontrolera Attiny2313  będzie stan niski, natomiast druga odwrotnie - gdy na obu pinach będzie stan wysoki. Wykombinowałem coś takiego, chyba coś za bardzo namieszałem? Oczywiście to nie cały program, tylko wycinki kodu.<br />[syntax=c]#define ASWITCH (1&lt;&lt;PA1)// czujniki krańcowe<br />#define BSWITCH (1&lt;&lt;PA0)<br /><br />// pętla, wykonywana dopóki na obydwu pinach ASWITCH i BSWITCH nie pojawi się stan niski<br />while( !((PINA &amp; ASWITCH) &amp;&amp; (PINA &amp; BSWITCH)) ){...} <br /><br />// pętla, wykonywana dopóki nie pojawi się stan wysoki na obu pinach<br />while( !(!(PINA &amp; ASWITCH) &amp;&amp; !(PINA &amp; BSWITCH)) ){....}[/syntax]Te warunki będą użyte w funkcjach do sterowania mechanizmem wysuwu tacki - wysuwanie/wsuwanie do osiągnięcia skrajnego położenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15668">tokirium</a> — 16 sty 2019, o 01:03</p><hr />
]]></content>
</entry>
</feed>