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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-06-07T14:04:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=11852&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-06-07T14:04:33+01:00</updated>
<published>2015-06-07T14:04:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131146#p131146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131146#p131146"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131146#p131146"><![CDATA[
oczywiście , możesz przecież zrobić sobie PWM programowy ....<br /><br />[syntax=cpp]#define LED_PIN 13  // pin może być dowolny <br />byte liczPWM = 0;<br />byte wypPWM = 10; // tu regulujesz wypełnienie 0 = min / 255 = max<br /><br />void setup()<br />{  <br />  pinMode(LED_PIN, OUTPUT);<br />  digitalWrite(LED_PIN, LOW);<br />}<br /><br />void loop()<br />{<br />  <br />  if (liczPWM == 0)<br />  {<br />    digitalWrite(LED_PIN, HIGH);<br />  }<br /><br />  if (liczPWM == wypPWM)<br />  {<br />    digitalWrite(LED_PIN, LOW);<br />  }<br /><br />  // +1<br />  liczPWM++;<br />}[/syntax]<br /><br /><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=58">SunRiver</a> — 7 cze 2015, o 14:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcineQ]]></name></author>
<updated>2015-06-07T13:23:29+01:00</updated>
<published>2015-06-07T13:23:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131143#p131143</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131143#p131143"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131143#p131143"><![CDATA[
no dobra, jakoś sobie poradziłem.. mam nadzieję, że ten typ rozwiązania przejdzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />pojawił się jednak problem z kolorem niebieskim  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />otóż gdy chciałem zrobić rozjaśnianie/przyciemnianie kolorów na przyciskach, to czerwony i zielony działały bez problemu.. jednak niebieski bez żadnego przejścia, zaraz po  kliknięciu włączał się na maxa.. <br /><br />poszukałem przyczyn i okazało się, że tak naprawdę niedziałające piny PWM są zajęte przez TIMERy 1 i 2, a działające działają dlatego, że nie używam TIMERA 0... (<!-- m --><a class="postlink" href="http://playground.arduino.cc/Learning/Pins" >http://playground.arduino.cc/Learning/Pins</a><!-- m --> )<br /><br />rozwiązałem problem poprzez brutalne pozbycie się TIMERa 1 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Chciałbym jednak zapytać, czy jest możliwość utworzenia własnego PWMa np na pinach 0,1,2 lub 3? (te akurat + analogowe mam wolne <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> )Tak, bym był w stanie jednak ten TIMER1 odzyskać? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />wrzucę wersje `mini` programów do zaprezentowania problemu i jego rozwiązania:<br />[syntax=cpp]#include &quot;niebieski.h&quot;<br /><br /># define ledG 6 <br /># define ledB 3 // gdy zamieniłem na płytce miejscami z innymi wejściami gdzie miałem PWM (9, 10, 11) to i tak nie działał, a gdy zamieniłem na płytce miejscami z czerwonym, to działał..<br /># define ledR 5 // gdy zamieniłem na płytce miejscami z niebieskim, to niebieski zaczynał działać, a czerwony wtedy miał problem<br /># define jasniej 7<br /># define ciemniej 11<br /># define SWdwn 12<br /># define SWup 13<br />int dzielnikTimer2;  // do programowego opóźnienia TIMER'a 2, który jest odświeżany co 16ms<br />int jasnoscG=255;   // diody dla 255 - wyłączone, dla 0 - włączone<br />int jasnoscB=255;<br />int jasnoscR=255;<br />int fade = 51;     // poziom o jaki diody przygasają/rozjaśniają się<br />int i=0;            // do wyboru case'a<br />void setup() {<br /><br />  cli();//zatrzymanie przerwań<br />//ustwienie timera1<br />  // TCCR1A i TCCR1B - rejestry kontrolne timera 1<br />  TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />  TCCR1B = 0;<br />  // ustawianie rejestru porównawczego na 2 Hz<br />  OCR1A = 7811;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (1024*2) - 1 = 7 812,5<br />  TCCR1B |= (1 &lt;&lt; WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= (1 &lt;&lt; CS12) | (1 &lt;&lt; CS10);;     // ustawienie dzielnika na 1024<br />   TIMSK1 |= (1&lt;&lt;OCIE1A);<br /><br />   //ustwienie timera2<br /><br />   TCCR2A=0;<br />   TCCR2B=0;<br />   TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />   TIMSK2 |= (1&lt;&lt;TOIE0); //Overflow Interrupt - &quot;ctc&quot; = 255, 61,3Hz = 0,01632s (co 16ms)<br />   sei();//allow interrupts<br /><br /><br />  pinMode(jasniej,INPUT);<br />  pinMode(ciemniej,INPUT);<br />  pinMode(SWup,INPUT);<br />  pinMode(SWdwn,INPUT);<br />  pinMode(ledR,OUTPUT);<br />  pinMode(ledG,OUTPUT);<br />  pinMode(ledB,OUTPUT);<br />  Serial.begin(9600);<br /><br /><br />}<br /><br /><br />void loop() {<br /><br /><br />if (digitalRead(SWup) == HIGH){<br />if (i&lt;4){<br />  i++;<br />  delay(500);<br />}<br />  else{i=0;}<br />}<br />if (digitalRead(SWdwn) == HIGH){<br />if (i&gt;0){<br />  i--;<br />  delay(500);<br />}<br />  else{i=4;}<br />}<br /><br />   analogWrite(ledR, jasnoscR);<br />   analogWrite(ledB, jasnoscB);<br />   analogWrite(ledG, jasnoscG);<br /><br /><br />}    //koniec loop'a<br /><br />ISR(TIMER1_COMPA_vect){<br /><br />if (i==4) {    //miganie czerwono-niebieskie<br />        Serial.println(&quot;POLICJA!!!&quot;);<br /><br />   if (jasnoscR == 0){<br />  jasnoscR = 255;<br /> jasnoscB = 0;<br />   }<br />    else{<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    }<br />             }<br />}<br /><br /><br />ISR(TIMER2_OVF_vect) {<br /><br /><br />dzielnikTimer2++;<br />if (dzielnikTimer2==19){   // sprawdzanie co 0,01632s * 19 = 310ms<br /><br />if (i==1){ //rozjaśnianie / przyciemnianie niebieskiego<br /><br /> if (digitalRead(jasniej) == HIGH){<br />   if (jasnoscB &gt; 0)<br />         { jasnoscB = jasnoscB - fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />         }<br /> }<br /><br /> if (digitalRead(ciemniej) == HIGH){<br />   if (jasnoscB &lt; 255 &amp;&amp; jasnoscB != 255) {<br />           jasnoscB = jasnoscB + fade;<br />           Serial.println(&quot;BLUE:&quot;);<br />           Serial.println(jasnoscB);<br />         }<br /> }<br /> }<br />if (i==2){ //rozjaśnianie / przyciemnianie zielonego<br /><br /> if (digitalRead(jasniej) == HIGH){<br />   if (jasnoscG &gt; 0)<br />         { jasnoscG = jasnoscG - fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />         }}<br /><br /> if (digitalRead(ciemniej) == HIGH){<br />   if (jasnoscG &lt; 255 &amp;&amp; jasnoscG != 255) {<br />           jasnoscG = jasnoscG + fade;<br />           Serial.println(&quot;GREEN:&quot;);<br />           Serial.println(jasnoscG);<br />         }<br /> }<br /> }<br /><br />if(i==3){//rozjaśnianie / przyciemnianie czerwonego<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscR &gt; 0)<br />        { jasnoscR = jasnoscR - fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />        }}<br /><br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscR &lt; 255 &amp;&amp; jasnoscR != 255) {<br />          jasnoscR = jasnoscR + fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />        }<br />}<br /><br />}<br /><br /><br /><br /><br /><br />dzielnikTimer2=0;<br />}<br />}[/syntax]<br /><br /><br />a tutaj po usunięciu TIMERa1 <br /><br />[syntax=cpp]#include &quot;niebieski.h&quot;<br /><br /># define ledG 6  <br /># define ledB 9 // pin 9 był zajmowany przez TIMER1, którego się pozbyłem<br /># define ledR 5 <br /># define jasniej 7<br /># define ciemniej 11<br /># define SWdwn 12<br /># define SWup 13<br />int dzielnik;   // do programowego opóźnienia TIMER'a 2, który jest odświeżany co 16ms<br />int dzielnikTimer2;   // do programowego opóźnienia TIMER'a 2, który jest odświeżany co 16ms<br />int jasnoscG=255;   // diody dla 255 - wyłączone, dla 0 - włączone<br />int jasnoscB=255;<br />int jasnoscR=255;<br />int fade = 51;     // poziom o jaki diody przygasają/rozjaśniają się<br />int i=0;            // do wyboru case'a<br />void setup() {<br /><br />  cli();//zatrzymanie przerwań<br />/* //ustwienie timera1                                            //pozbycie się TIMERa 1<br />  // TCCR1A i TCCR1B - rejestry kontrolne timera 1<br />  TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />  TCCR1B = 0;<br />  // ustawianie rejestru porównawczego na 2 Hz<br />  OCR1A = 7811;//*time;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (1024*2) - 1 = 7 812,5<br />  TCCR1B |= (1 &lt;&lt; WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= (1 &lt;&lt; CS12) | (1 &lt;&lt; CS10);;     // ustawienie dzielnika na 1024<br />   TIMSK1 |= (1&lt;&lt;OCIE1A);<br />*/<br />   //ustwienie timera2<br /><br />   TCCR2A=0;<br />   TCCR2B=0;<br />   TCCR2B |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />   TIMSK2 |= (1&lt;&lt;TOIE0); //Overflow Interrupt - &quot;ctc&quot; = 255, 61,3Hz = 0,01632s (co 16ms)<br />   sei();//allow interrupts<br /><br /><br />  pinMode(jasniej,INPUT);<br />  pinMode(ciemniej,INPUT);<br />  pinMode(SWup,INPUT);<br />  pinMode(SWdwn,INPUT);<br />  pinMode(ledR,OUTPUT);<br />  pinMode(ledG,OUTPUT);<br />  pinMode(ledB,OUTPUT);<br />  Serial.begin(9600);<br /><br /><br />}<br /><br /><br />void loop() {<br /><br /><br />if (digitalRead(SWup) == HIGH){<br />if (i&lt;4){<br />  i++;<br />  delay(500);<br />}<br />  else{i=0;}<br />}<br />if (digitalRead(SWdwn) == HIGH){<br />if (i&gt;0){<br />  i--;<br />  delay(500);<br />}<br />  else{i=4;}<br />}<br /><br />   analogWrite(ledR, jasnoscR);<br />   analogWrite(ledB, jasnoscB);<br />   analogWrite(ledG, jasnoscG);<br /><br /><br />}    //koniec loop'a<br /><br />/*ISR(TIMER1_COMPA_vect){                 // z tego już nie korzystam<br /><br />if (i==4) {    //miganie czerwono-niebieskie<br />        Serial.println(&quot;POLICJA!!!&quot;);<br /><br />   if (jasnoscR == 0){<br />  jasnoscR = 255;<br /> jasnoscB = 0;<br />   }<br />    else{<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    }<br /><br /><br />   }<br /><br /><br /><br />}<br />*/<br />ISR(TIMER2_OVF_vect) {<br /><br /><br />dzielnikTimer2++;<br />if (dzielnikTimer2==19){   // sprawdzanie co 0,01632s * 19 = 310ms<br /><br />if (i==1){ //rozjaśnianie / przyciemnianie niebieskiego<br /><br /> if (digitalRead(jasniej) == HIGH){<br />   if (jasnoscB &gt; 0)<br />         { jasnoscB = jasnoscB - fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />         }<br /> }<br /><br /> if (digitalRead(ciemniej) == HIGH){<br />   if (jasnoscB &lt; 255 &amp;&amp; jasnoscB != 255) {<br />           jasnoscB = jasnoscB + fade;<br />           Serial.println(&quot;BLUE:&quot;);<br />           Serial.println(jasnoscB);<br />         }<br /> }<br /> }<br />if (i==2){ //rozjaśnianie / przyciemnianie zielonego<br /><br /> if (digitalRead(jasniej) == HIGH){<br />   if (jasnoscG &gt; 0)<br />         { jasnoscG = jasnoscG - fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />         }}<br /><br /> if (digitalRead(ciemniej) == HIGH){<br />   if (jasnoscG &lt; 255 &amp;&amp; jasnoscG != 255) {<br />           jasnoscG = jasnoscG + fade;<br />           Serial.println(&quot;GREEN:&quot;);<br />           Serial.println(jasnoscG);<br />         }<br /> }<br /> }<br /><br />if(i==3){//rozjaśnianie / przyciemnianie czerwonego<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscR &gt; 0)<br />        { jasnoscR = jasnoscR - fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />        }}<br /><br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscR &lt; 255 &amp;&amp; jasnoscR != 255) {<br />          jasnoscR = jasnoscR + fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />        }<br />}<br /><br />}<br /><br /><br /><br /><br /><br />dzielnikTimer2=0;<br />}<br /><br /><br />dzielnik++;<br />if (dzielnik==31){   // zmiana koloru co 0,01632s * 31 = 505ms<br /><br />if (i==4) {    //miganie czerwono-niebieskie<br />        Serial.println(&quot;POLICJA!!!&quot;);<br /><br />   if (jasnoscR == 0){<br />  jasnoscR = 255;<br /> jasnoscB = 0;<br />   }<br />    else{<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    }<br /><br /><br />   }<br />   dzielnik=0;<br />}}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9168">MarcineQ</a> — 7 cze 2015, o 13:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-06-05T18:35:55+01:00</updated>
<published>2015-06-05T18:35:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131021#p131021</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131021#p131021"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131021#p131021"><![CDATA[
no dobrze ....<br /><br /><!-- m --><a class="postlink" href="https://www.pjrc.com/teensy/td_libs_TimerOne.html" >https://www.pjrc.com/teensy/td_libs_TimerOne.html</a><!-- m --><br /><!-- m --><a class="postlink" href="https://arduinodiy.wordpress.com/2012/02/28/timer-interrupts/" >https://arduinodiy.wordpress.com/2012/0 ... nterrupts/</a><!-- m --><br /><!-- m --><a class="postlink" href="http://blog.oscarliang.net/arduino-timer-and-interrupt-tutorial/" >http://blog.oscarliang.net/arduino-time ... -tutorial/</a><!-- m --><br />powinno ci rozjaśnić <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=58">SunRiver</a> — 5 cze 2015, o 18:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcineQ]]></name></author>
<updated>2015-06-05T14:50:41+01:00</updated>
<published>2015-06-05T14:50:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131010#p131010</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131010#p131010"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=131010#p131010"><![CDATA[
a więc jak.. pomoże lub chociaż podpowie ktoś coś? <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=9168">MarcineQ</a> — 5 cze 2015, o 14:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcineQ]]></name></author>
<updated>2015-06-02T02:15:34+01:00</updated>
<published>2015-06-02T02:15:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130656#p130656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130656#p130656"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130656#p130656"><![CDATA[
<div class="quotetitle">SunRiver napisał(a):</div><div class="quotecontent"><br />Nikt ci karze pisać w ArduinoIDE  ....  <br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2622.html" >topic2622.html</a><!-- l -->  zobacz to ... zanim ci podpowiemy więcej<br /></div><br />no tak, głupi błąd <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />jednak dalej nie działa...<br /><br />w starym kodzie gdy zaprowadziłem zmiany gdy kliknę przycisk SWdwn BARDZO szybko miga mi czerwony i niebieski po czym nic się nie dzieje. jeśli przytrzymam ten przycisk miga cały czas, bardzo szybko... a gdy przycisnę do tego jeszcze inny przycisk, to wtedy wykonuje się to, co niby według tego powinno.. ale bardzo szybko..<br />wygląda to tak, jakby timer inkrementował mi cały czas zmienną `i` <br /><br />[syntax=c]# define ledG 6<br /># define ledB 3<br /># define ledR 5<br /># define jasniej 7<br /># define ciemniej 11<br /># define SWdwn 12<br /># define SWup 13<br /># define swR 4<br /># define swG 10<br /># define swB 8<br />boolean stanR = 5;<br />boolean stanG = 6;<br />boolean stanB = 3;<br />int stopp=0;          //do zatrzymania pętli while podprogramów<br />int stoptimer=0;<br />int jasnoscG=255;   // diody dla 255 - wyłączone, dla 0 - włączone<br />int jasnoscB=255;<br />int jasnoscR=255;<br />int fade = 51;     // poziom o jaki diody przygasają/rozjaśniają się<br />int i=0;            // do wyboru case'a<br />void setup() {<br /> cli();//stop interrupts<br /> // TCCR1A i TCCR1B - rejestry kontrolne timera 1  <br />  TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />  TCCR1B = 0;<br />  TCNT1  = 0;// zerowanie licznika <br />  // ustawianie rejestru porównawczego na 2 Hz<br />  OCR1A = 32624;//*time;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (256*2) - 1 = 31249<br />   TIMSK1 |= (1&lt;&lt;OCIE1A)|(1&lt;&lt;OCIE1B);                            <br />  TCCR1B |= (1 &lt;&lt; WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= (1 &lt;&lt; CS12)|(1 &lt;&lt; CS10) ;     // ustawienie dzielnika na 1024<br />    sei();//allow interrupts<br />  pinMode(jasniej,INPUT);<br />  pinMode(ciemniej,INPUT);<br />  pinMode(SWup,INPUT);<br />  pinMode(SWdwn,INPUT);<br />  pinMode(ledR,OUTPUT);<br />  pinMode(ledG,OUTPUT);<br />  pinMode(ledB,OUTPUT);<br />  pinMode(swR,INPUT);<br />  pinMode(swG,INPUT);<br />  pinMode(swB,INPUT);<br />  Serial.begin(9600);<br /><br />}<br /><br /><br /><br />void loop() {<br />    stopp=0;<br /><br /><br />// wybór programu (case'a) do wykonania<br />if (digitalRead(SWup) == HIGH){  <br />if (i&lt;7){<br />  i++;<br />  delay(500);<br />}<br />  else{i=0;}<br />}<br />if (digitalRead(SWdwn) == HIGH){  <br />if (i&gt;0){<br />  i--;<br />  delay(500);<br />}<br />  else{i=7;}<br />}   <br /><br />// Programy:<br />switch (i){<br /><br />case 1:   //rozjaśnianie / przyciemnianie czerwonego<br />//jasnoscG=255;<br />//jasnoscB=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscR &gt; 0)<br />        { jasnoscR = jasnoscR - fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);        <br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscR &lt; 255 &amp;&amp; jasnoscR != 255) {<br />          jasnoscR = jasnoscR + fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />          delay(500);<br />        }<br />}      <br />break;<br /><br />case 2:    //rozjaśnianie / przyciemnianie zielonego<br />//jasnoscR=255;<br />//jasnoscB=255;<br /><br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscG &gt; 0)<br />        { jasnoscG = jasnoscG - fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscG &lt; 255 &amp;&amp; jasnoscG != 255) {<br />          jasnoscG = jasnoscG + fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }<br />}     <br /><br />break;<br /><br />case 3:   //rozjaśnianie / przyciemnianie niebieskiego<br />//jasnoscR=255;<br />//jasnoscG=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscB &gt; 0)<br />        { jasnoscB = jasnoscB - fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscB &lt; 255 &amp;&amp; jasnoscB != 255) {<br />          jasnoscB = jasnoscB + fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }<br />}     <br /><br /><br />break;<br /><br />case 4:     // program z możliwością wyboru 3 kolorów na różnych przyciskach<br />kolorki();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />case 6:    // program migający trzema kolorami<br />Serial.println(&quot;MIGANIE!!&quot;);<br />miganie();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />case 7:    // program migający dwoma kolorami<br />  Serial.println(&quot;Policja!&quot;);<br />policja();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br /><br />}  //koniec switch'a<br />        <br />   analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br /><br /><br />}    //koniec loop'a<br /><br /><br /><br />void  miganie(){<br />  while (stopp &lt; 1)<br />  {<br />    jasnoscG = 255;<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br />    delay(500);<br />    <br />    if(digitalRead(SWup) == HIGH) {<br />      stopp = 1;<br />      i++;<br />              delay(50);<br />      }<br />      if(digitalRead(SWdwn) == HIGH) {<br />        stopp = 1;<br />        i--;<br />              delay(50);<br />        }<br />        jasnoscG = 255;<br />        jasnoscR = 255;<br />        jasnoscB = 0;<br />        analogWrite(ledR, jasnoscR);<br />        analogWrite(ledB, jasnoscB);<br />        analogWrite(ledG, jasnoscG);<br />        if(digitalRead(SWup) == HIGH) {<br />          stopp = 1;<br />          i++;<br />              delay(50);<br />          }<br />          if(digitalRead(SWdwn) == HIGH) {<br />            stopp = 1;<br />            i--;<br />              delay(50);<br />            }<br />            <br />            delay(500);<br />            <br />           jasnoscG = 0;<br />           jasnoscR = 255;<br />           jasnoscB = 255;<br />           analogWrite(ledR, jasnoscR);<br />           analogWrite(ledB, jasnoscB);<br />           analogWrite(ledG, jasnoscG);<br />           if(digitalRead(SWup) == HIGH) {<br />             stopp = 1;<br />             i++;<br />              delay(50);<br />             }<br />             if(digitalRead(SWdwn) == HIGH) {<br />               stopp = 1;<br />               i--;<br />              delay(50);<br />               }<br />               delay(500);        <br />      }}<br />      <br />void policja(){<br /><br />  while (stopp &lt; 1){<br /><br />            jasnoscG = 255;<br />            jasnoscR = 0;<br />            jasnoscB = 255;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br />      //      delay(250);<br /> opoznienie();<br />     stoptimer = 0;<br />            jasnoscG = 255;<br />            jasnoscR = 255;<br />            jasnoscB = 0;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br /> //           delay(250);             <br />     opoznienie();<br />     stoptimer = 0;              <br />      }}    <br />        <br />        <br />void kolorki(){<br />           <br />  Serial.println(&quot;kolorki&quot;);<br />  while (stopp &lt; 1){<br />    if(digitalRead(swR) == HIGH){<br />      delay(500);<br />      stanR=!stanR;<br />      digitalWrite(ledR,stanR);}<br />    if(digitalRead(swG) == HIGH) {<br />      delay(500);<br />      stanG=!stanG;<br />      digitalWrite(ledG,stanG);}<br />    if(digitalRead(swB) == HIGH){<br />      delay(500);<br />      stanB=!stanB;<br />      digitalWrite(ledB,stanB);<br />      }<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br />             } <br />   <br />        }}<br />        <br />     <br />  <br />void opoznienie() {    //(unsigned int time)<br /><br />while (stoptimer &lt; 1) {<br />  if( OCF1A ){  //((TIFR1 &amp; (1 &lt;&lt; OCF1A)) || stopp &lt; 1)     //przerwanie, gdy TCNT = OCR <br />             TIFR1 = (1 &lt;&lt; OCF1A); // Wyzerowanie flagi CTC poprzez wpisanie do niej jedynki<br />             stoptimer = 1;              <br />             if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br /><br />           }<br />             <br /> <br />}}<br />}[/syntax]<br /><br /><br />Spróbowałem więc rozwiązać to w inny sposób... (przy okazji przesiadając się na program Eclipse i próbując się z nim oswoić)<br /><br />Próbowałem zastąpic funkcję policja() funkcją/wektorem ISR w którym przy pojawieniu się odpowiedniej wartości `i` wykonywałaby się naprzemienna zmiana kolorów(świecenia/nieświecenia) czerwonego i niebieskiego..<br />Jednak w ten sposób również nic nie uzyskałem, gdyż dla wartości zmiennej `i` równej 1 żadne widoczne efekty się nie pojawiały.. Natomiast zepsuła się funkcja rozjaśniania/przyciemniania koloru czerwonego - po jednym kliknięciu rozjaśniania rozjaśnia i gaśnie od razu, a później nic więcej się nie da zrobić..<br /><br /><br />[syntax=c]// Do not remove the include below<br />#include &quot;SwitchRGB1.h&quot;<br /><br /><br />//The setup function is called once at startup of the sketch<br />// Do not remove the include below<br /><br /><br /><br />//The setup function is called once at startup of the sketch<br /># define ledG 6<br /># define ledB 3<br /># define ledR 5<br /># define jasniej 7<br /># define ciemniej 11<br /># define SWdwn 12<br /># define SWup 13<br /># define swR 4<br /># define swG 10<br /># define swB 8<br />boolean stanR = 5;<br />boolean stanG = 6;<br />boolean stanB = 3;<br />int stopp=0;          //do zatrzymania pętli while podprogramów<br />int stoptimer=0;<br />int jasnoscG=255;   // diody dla 255 - wyłączone, dla 0 - włączone<br />int jasnoscB=255;<br />int jasnoscR=255;<br />int fade = 51;     // poziom o jaki diody przygasają/rozjaśniają się<br />int i=0;            // do wyboru case'a<br />int ledStanR = HIGH;<br />int ledStanB = LOW;<br />int ledStanG = LOW;<br />void setup() {<br /> cli();//stop interrupts<br /> // TCCR1A i TCCR1B - rejestry kontrolne timera 1<br /><br />  //TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />  //TCCR1B = 0;<br />  //TCNT1  = 0;// zerowanie licznika<br />  // ustawianie rejestru porównawczego na 2 Hz :<br />  OCR1A = 7812;//*time;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (1024*2) - 1 = 7 811,5<br />  TIMSK1 |= (1&lt;&lt;OCIE1A)|(1&lt;&lt;OCIE1B);<br />  TCCR1B |= (1&lt;&lt;WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10) ;     // ustawienie dzielnika na 1024<br /><br />    sei();//allow interrupts<br />  pinMode(jasniej,INPUT);<br />  pinMode(ciemniej,INPUT);<br />  pinMode(SWup,INPUT);<br />  pinMode(SWdwn,INPUT);<br />  pinMode(ledR,OUTPUT);<br />  pinMode(ledG,OUTPUT);<br />  pinMode(ledB,OUTPUT);<br />  pinMode(swR,INPUT);<br />  pinMode(swG,INPUT);<br />  pinMode(swB,INPUT);<br />  Serial.begin(9600);<br /><br />}<br /><br /><br />void  miganie(){<br />  while (stopp &lt; 1)<br />  {<br />    jasnoscG = 255;<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br />    delay(500);<br /><br />    if(digitalRead(SWup) == HIGH) {<br />      stopp = 1;<br />      i++;<br />              delay(50);<br />      }<br />      if(digitalRead(SWdwn) == HIGH) {<br />        stopp = 1;<br />        i--;<br />              delay(50);<br />        }<br />        jasnoscG = 255;<br />        jasnoscR = 255;<br />        jasnoscB = 0;<br />        analogWrite(ledR, jasnoscR);<br />        analogWrite(ledB, jasnoscB);<br />        analogWrite(ledG, jasnoscG);<br />        if(digitalRead(SWup) == HIGH) {<br />          stopp = 1;<br />          i++;<br />              delay(50);<br />          }<br />          if(digitalRead(SWdwn) == HIGH) {<br />            stopp = 1;<br />            i--;<br />              delay(50);<br />            }<br /><br />            delay(500);<br /><br />           jasnoscG = 0;<br />           jasnoscR = 255;<br />           jasnoscB = 255;<br />           analogWrite(ledR, jasnoscR);<br />           analogWrite(ledB, jasnoscB);<br />           analogWrite(ledG, jasnoscG);<br />           if(digitalRead(SWup) == HIGH) {<br />             stopp = 1;<br />             i++;<br />              delay(50);<br />             }<br />             if(digitalRead(SWdwn) == HIGH) {<br />               stopp = 1;<br />               i--;<br />              delay(50);<br />               }<br />               delay(500);<br />      }}<br />/*void opoznienie() {    //(unsigned int time)<br /><br />while (stoptimer &lt; 1) {<br />  if( OCF1A ){  //((TIFR1 &amp; (1 &lt;&lt; OCF1A)) || stopp &lt; 1)     //przerwanie, gdy TCNT = OCR<br />             TIFR1 = (1 &lt;&lt; OCF1A); // Wyzerowanie flagi CTC poprzez wpisanie do niej jedynki<br />             stoptimer = 1;<br />   /*           if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br /><br />           }<br /><br /><br />}}<br />}*/<br /><br />/*void policja(){    // próbowałem zastąpic to funkcją/wektorem ISR w którym przy pojawieniu się<br /> * odpowiedniej wartości `i` wykonywałaby się zmiana koloru(świecenia/nieświecenia)<br /><br />  while (stopp &lt; 1){<br /><br />            jasnoscG = 255;<br />            jasnoscR = 0;<br />            jasnoscB = 255;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br />      //      delay(250);<br /> opoznienie();<br />     stoptimer = 0;<br />            jasnoscG = 255;<br />            jasnoscR = 255;<br />            jasnoscB = 0;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br /> //           delay(250);<br />     opoznienie();<br />     stoptimer = 0;<br />      }}<br />*/<br /><br /><br /><br />void kolorki(){<br /><br />  Serial.println(&quot;kolorki&quot;);<br />  while (stopp &lt; 1){<br />    if(digitalRead(swR) == HIGH){<br />      delay(500);<br />      stanR=!stanR;<br />      digitalWrite(ledR,stanR);}<br />    if(digitalRead(swG) == HIGH) {<br />      delay(500);<br />      stanG=!stanG;<br />      digitalWrite(ledG,stanG);}<br />    if(digitalRead(swB) == HIGH){<br />      delay(500);<br />      stanB=!stanB;<br />      digitalWrite(ledB,stanB);<br />      }<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br />             }<br /><br />        }}<br /><br /><br />void loop() {<br />    stopp=0;<br /><br /><br />// wybór programu (case'a) do wykonania<br />if (digitalRead(SWup) == HIGH){<br />if (i&lt;7){<br />  i++;<br />  delay(500);<br />}<br />  else{i=0;}<br />}<br />if (digitalRead(SWdwn) == HIGH){<br />if (i&gt;0){<br />  i--;<br />  delay(500);<br />}<br />  else{i=7;}<br />}<br /><br />// Programy:<br />switch (i){<br /><br />case 7:   //rozjaśnianie / przyciemnianie czerwonego<br />//jasnoscG=255;<br />//jasnoscB=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscR &gt; 0)<br />        { jasnoscR = jasnoscR - fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />          delay(500);<br />        }}<br /><br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscR &lt; 255 &amp;&amp; jasnoscR != 255) {<br />          jasnoscR = jasnoscR + fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />          delay(500);<br />        }<br />}<br />break;<br /><br />case 2:    //rozjaśnianie / przyciemnianie zielonego<br />//jasnoscR=255;<br />//jasnoscB=255;<br /><br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscG &gt; 0)<br />        { jasnoscG = jasnoscG - fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }}<br /><br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscG &lt; 255 &amp;&amp; jasnoscG != 255) {<br />          jasnoscG = jasnoscG + fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }<br />}<br /><br />break;<br /><br />case 3:   //rozjaśnianie / przyciemnianie niebieskiego<br />//jasnoscR=255;<br />//jasnoscG=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscB &gt; 0)<br />        { jasnoscB = jasnoscB - fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }}<br /><br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscB &lt; 255 &amp;&amp; jasnoscB != 255) {<br />          jasnoscB = jasnoscB + fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }<br />}<br /><br /><br />break;<br /><br />case 4:     // program z możliwością wyboru 3 kolorów na różnych przyciskach<br />kolorki();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />case 6:    // program migający trzema kolorami<br />Serial.println(&quot;MIGANIE!!&quot;);<br />miganie();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />/*case 7:    // program migający dwoma kolorami<br />  Serial.println(&quot;Policja!&quot;);<br />policja();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br />*/<br /><br />}  //koniec switch'a<br /><br />   analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br /><br /><br />}    //koniec loop'a<br /><br />ISR(TIMER1_COMP_vect)<br />{<br /> if (i==1) {<br /><br />    if (ledStanR == LOW){<br />   ledStanR = HIGH;}<br />    else{<br />    ledStanR = LOW;<br />    }<br />   if (ledStanB == LOW){<br />   ledStanB = HIGH;}<br />    else{<br />    ledStanB = LOW;<br />    }<br />   digitalWrite(ledR, ledStanR);<br />   digitalWrite(ledB, ledStanB);<br />   digitalWrite(ledG, LOW);<br /><br /> }<br />}<br /><br /><br /><br />//  TIMSK1 |= (1 &lt;&lt; OCIE1A); // wzkazanie, że przerwanie ma być wywołane dla rejestru OCR1A<br /><br />//sei();//zezwalamy na wykonywanie przerwań[/syntax]<br /><br /><br />spróbowałem też całkowicie testowo zrobić proste miganie diodą, które również nie wyszło.. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />dioda świeci się cały czas (co odpowiada stanowi niskiemu)<br /><br />[syntax=c]#include &quot;testtt.h&quot;<br /><br /># define ledR 5<br />int ledStanR;<br /><br />void setup()<br />{<br /> cli();//stop interrupts<br />TCCR1A i TCCR1B - rejestry kontrolne timera 1<br />TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />TCCR1B = 0;<br />TCNT1  = 0;// zerowanie licznika<br />  // ustawianie rejestru porównawczego na 2 Hz :<br />OCR1A = 7812;//*time;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (1024*2) - 1 = 7 811,5<br />      TIMSK1 |= (1&lt;&lt;OCIE1A)|(1&lt;&lt;OCIE1B);<br />  TCCR1B |= (1&lt;&lt;WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10) ;     // ustawienie dzielnika na 1024<br />    sei();//allow interrupts<br /><br />pinMode(ledR,OUTPUT);<br />Serial.begin(9600);<br />}<br /><br />void loop()<br />{<br />}<br /><br />ISR(TIMER1_COMP_vect)<br />{<br />   if (ledStanR == HIGH){<br />   ledStanR = LOW;}<br /> else{<br /> ledStanR = HIGH;<br /> }<br />digitalWrite(ledR, ledStanR);<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9168">MarcineQ</a> — 2 cze 2015, o 02:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-06-01T20:42:58+01:00</updated>
<published>2015-06-01T20:42:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130623#p130623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130623#p130623"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130623#p130623"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Tez czytam ta nagonke na arduino i sie dziwie...<br /></div><br /><br />wynika ona z kilku faktów ...<br /><br />1. Heretyków nie brakuje na różnych eleblogozgrozach <br />2. Brak wiedzy czym jest tak naprawdę arduino <br />3. Brak chęci zadania sobie trudu by poznać i zrozumieć <br /><br />Ale tu na forum każdy następny negatyw- w stronę arduino będzie nagradzany warnem <br />może wreszcie każdy zrozumie że to nie arduino jest złe tylko banda The Billi  która pisze farmazony a nie ma pojecia o czym <br /><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=58">SunRiver</a> — 1 cze 2015, o 20:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[eMCe2]]></name></author>
<updated>2015-06-01T05:33:12+01:00</updated>
<published>2015-06-01T05:33:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130544#p130544</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130544#p130544"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130544#p130544"><![CDATA[
Tez czytam ta nagonke na arduino i sie dziwie... Wydawalo mi sie ze to tez nie jezyk arduino tylko po prostu c++. Sam kupilem sobie arduino mini i nano bo to fajne male gotowe plytki, ale programuje na nie w eclipse w c. Za to przydatny jest bootloader w nich bo nie musze programatorka wozic <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Kolego popatrz na poradniki Mirka i temat timerow programowych...<br />A swoja droga co tam klecisz na zaliczenie? Moze jeszcze warto zmienic srodowisko i jezyk na inne...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1363">eMCe2</a> — 1 cze 2015, o 05:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-05-31T10:28:08+01:00</updated>
<published>2015-05-31T10:28:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130475#p130475</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130475#p130475"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130475#p130475"><![CDATA[
Nikt ci karze pisać w ArduinoIDE  ....  <br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2622.html" >topic2622.html</a><!-- l -->  zobacz to ... zanim ci podpowiemy więcej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 31 maja 2015, o 10:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcineQ]]></name></author>
<updated>2015-05-31T00:39:06+01:00</updated>
<published>2015-05-31T00:39:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130462#p130462</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130462#p130462"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130462#p130462"><![CDATA[
chodzi głównie o język arduino, do którego osobiście nic nie mam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ale w tym przypadku trochę on przeszkadza, bo prowadzący raczej mi nie przyjmie programu z funkcją Millis, gdyż na początku chciał, bym pisał w assemblerze, albo ewentualnie w czystym C <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> jednak kupiłem wtedy już Arduino i się uparłem na to rozwiązanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />przerwania zewnętrzne mógłbym zaimplementować jako podprogram do zmiany wartości `i`, który wybiera case'a... tylko że przez drgania styków i tak musiałbym użyć jakiegoś opóźnienia.. być może to w przyszłości to zrobię, chociaż i tak się obawiam o to, czy prowadzący zaakceptuje funkcję attachInterrupt... narazie wolałbym jednak przeskoczyć problem użycia przerwań do wykonania opóźnienia...<br /><br />tak jak pisałem wcześniej - timer1 mam ustawiony, lecz to co chciałem z nim zrobić kompletnie nie działa. <br />założenie co do wykonania tego opóźnienia miałem takie, by wysyłać program do funkcji opoznienie(), która oczekiwałaby na pojawienie się po 500ms (albo sekundzie.. już nie pamiętam dla ilu to wyliczałem, ale nawet przy ustawieniu OCR1A na 15111 nie chce działać) flagi OCF1A, a następnie wracała do programu. <br /><br />To niestety nie działa, w efekcie czego świecą się jednocześnie obydwa kolory (a przynajmniej sprawiają takie wrażenie optyczne)<br /><br />kolejnym problemem jest to, że mój prowadzący nie chce bym zamykał się w podprogramie i zajmował czas procesora.. jak to pięknie zobrazował w obrazku podobnym do załączonego poniżej, jestem w sytuacji takiej jak po lewej, a on chce, bym zrobił to tak jak po prawej, czyli odłączył się od pętli głównej z tym opóźnieniem... tak, by w teorii procesor mógł w tym czasie wykonywać inne programy.. <br /><br />jak już mówiłem, przerwania to troche dla mnie magia.. założenie ogólne ich rozumiem, jednak wykonania tego nie daje rady ogarnąć i prosiłbym o pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/9168/7166a114d7ef9c59f2770a34f8c887ab.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9168/7166a114d7ef9c59f2770a34f8c887ab.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9168">MarcineQ</a> — 31 maja 2015, o 00:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2015-05-30T22:42:13+01:00</updated>
<published>2015-05-30T22:42:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130453#p130453</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130453#p130453"/>
<title type="html"><![CDATA[Re: Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130453#p130453"><![CDATA[
<div class="quotetitle">MarcineQ napisał(a):</div><div class="quotecontent"><br />a tym bardziej w Arduino Uno, w które sam się niestety wkopałem...<br /></div><br /><br />Dlaczego wszyscy macie jakieś ale negatywne do Arduino ??  To zaczyna być plagą .... <br />To tylko płytka z prockiem nic więcej jak nie radzisz sobie z AVR to nie zwalaj na arduino ...<br /><br />a teraz .... <br />możesz też tak ... <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic161.html" >topic161.html</a><!-- l -->  ....<br /><br />Arduino UNO obsługuje <br />--- przerwania wewnętrzne od timerów co masz zrealizowane a opis np tu <!-- m --><a class="postlink" href="http://www.instructables.com/id/Arduino-Timer-Interrupts/" >http://www.instructables.com/id/Arduino ... nterrupts/</a><!-- m --><br /><br /><br />--- przerwania zewnętrzne na pinach 2 i 3  odpowiednio INT0 i INT1 do ich obsługi służy funkcja    <strong>attachInterrupt()</strong> ,a przykład użycia może wyglądać np tak :<br /><br />[syntax=cpp]#define pin = 13<br />volatile int stan = LOW;<br /> <br />void setup()<br />{<br />  pinMode(pin, OUTPUT);<br />  attachInterrupt(0, blink, CHANGE);<br />}<br /> <br />void loop()<br />{<br />  digitalWrite(pin, stan);<br />}<br /> <br />void blink()          // funkcja obsługi przerwania<br />{<br />  stan = !stan;<br />}[/syntax]<br /><br />gdzie na INT0 (pin2) podajesz np OUT z RTC<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 30 maja 2015, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcineQ]]></name></author>
<updated>2015-05-30T18:24:48+01:00</updated>
<published>2015-05-30T18:24:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130422#p130422</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130422#p130422"/>
<title type="html"><![CDATA[Przerwania w Arduino - jak wykonać?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11852&amp;p=130422#p130422"><![CDATA[
Witam, <br /><br />Mam problem z projektem, który muszę wykonać na uczelni, gdyż przyznam szczerze, nie do końca ogarniam temat przerwań w mikroprocesorach, a tym bardziej w Arduino Uno, w które sam się niestety wkopałem...<br />Do wykonania mam Sterownik diod RGB. Do czasu, gdy nie musiałem używać przerwań, to wszystko było w miarę `okej`. Jednak prowadzący uparł się, bym te przerwania wykorzystał. Powiedział, bym w moim programie do opóźnień pomiędzy zmianami kolorów diod nie używał funkcji <span style="color: #FFBF00">delay</span>(), a zastosował przerwania właśnie. No i nie bardzo potrafię to wykonać. Jeśli byłby ktoś w stanie pomóc, to byłbym niezmiernie wdzięczny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zamieszczę poniżej poglądowy schemat układu oraz kod programu, który aktualnie posiadam. W programie jest <span style="color: #FFBF00">if</span>() zmieniający wartośc zmiennej `i`, która służy do wybrania podprogramu za pomocą <span style="color: #FFBF00">switch</span>'a.<br />Dla <span style="color: #FFBF00">case</span>'a 6 wykonywana jest funkcja miganie(), która oparta jest o <span style="color: #FFBF00">delay</span>'e. <br />W <span style="color: #FFBF00">case</span>'ie 7 próbowałem w funkcji policja() jakoś pozbyć się <span style="color: #FFBF00">delay</span>'a za sprawą funkcji opoznienie().<br />Jednak poza tym, że nie chce to działać odpowiednio (kolory czerwony i niebieski świecą się cały czas, a przynajmniej tak to wygląda), to w dodatku prowadzący zwrócił uwagę, iż ponownie zamykam się w podprogramie i zajmuję czas procesora.<br />Nie bardzo wiem w jaki sposób odłączyć ten podprogram od pętli głównej, by nie zajmować czasu procesora (by w teorii można było równolegle wykonywać inne czynności)...<br /><br />Prosiłbym o pomoc w rozwiązaniu tego problemu.. Każda sugestia wykonania byłaby niezmiernie dla mnie cenna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Schemat: (wejścia diod różnią się od aktualnego położenia, ponieważ tamte wykorzystywane są przez Timer1)<br /><a href="http://forum.atnel.pl/_obrazki/o/9168/d5241ada56f37018740412d4b018b431.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/9168/d5241ada56f37018740412d4b018b431.png" alt="Obrazek" /></a><br /><br /><br />Kod:<br />[syntax=c]# define ledG 6<br /># define ledB 3<br /># define ledR 5<br /># define jasniej 7<br /># define ciemniej 11<br /># define SWdwn 12<br /># define SWup 13<br /># define swR 4<br /># define swG 10<br /># define swB 8<br />boolean stanR = 5;<br />boolean stanG = 6;<br />boolean stanB = 3;<br />int stopp=0;          //do zatrzymania pętli while podprogramów<br />int stoptimer=0;<br />int jasnoscG=255;   // diody dla 255 - wyłączone, dla 0 - włączone<br />int jasnoscB=255;<br />int jasnoscR=255;<br />int fade = 51;     // poziom o jaki diody przygasają/rozjaśniają się<br />int i=0;            // do wyboru case'a<br />void setup() {<br /> <br /> // TCCR1A i TCCR1B - rejestry kontrolne timera 1  <br />  TCCR1A = 0;// zerowanie rejestrów kontrolnych A i B<br />  TCCR1B = 0;<br />  TCNT1  = 0;// zerowanie licznika <br />  // ustawianie rejestru porównawczego na 2 Hz<br />  OCR1A = 7811;//*time;// = ( częstotliwość procesora / ( dzielnik * oczekiwana częstotliwość) ) – 1<br />                            // (16000000) / (256*2) - 1 = 31249<br />  TCCR1B |= (1 &lt;&lt; WGM12);  // ustawienie timer1 w tryb obsługi przerwań (CTC)<br />  TCCR1B |= ( 1 &lt;&lt; CS12 | (1 &lt;&lt; CS10)) ;     // ustawienie dzielnika na 1024<br />    <br />  pinMode(jasniej,INPUT);<br />  pinMode(ciemniej,INPUT);<br />  pinMode(SWup,INPUT);<br />  pinMode(SWdwn,INPUT);<br />  pinMode(ledR,OUTPUT);<br />  pinMode(ledG,OUTPUT);<br />  pinMode(ledB,OUTPUT);<br />  pinMode(swR,INPUT);<br />  pinMode(swG,INPUT);<br />  pinMode(swB,INPUT);<br />  Serial.begin(9600);<br /><br />}<br /><br />/*ISR(TIMER1_COMPA_vect){<br /><br />}*/<br /><br /><br />void loop() {<br />    stopp=0;<br /><br /><br />// wybór programu (case'a) do wykonania<br />if (digitalRead(SWup) == HIGH){  <br />if (i&lt;7){<br />  i++;<br />  delay(500);<br />}<br />  else{i=0;}<br />}<br />if (digitalRead(SWdwn) == HIGH){  <br />if (i&gt;0){<br />  i--;<br />  delay(500);<br />}<br />  else{i=7;}<br />}   <br /><br />// Programy:<br />switch (i){<br /><br />case 1:   //rozjaśnianie / przyciemnianie czerwonego<br />//jasnoscG=255;<br />//jasnoscB=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscR &gt; 0)<br />        { jasnoscR = jasnoscR - fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);        <br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscR &lt; 255 &amp;&amp; jasnoscR != 255) {<br />          jasnoscR = jasnoscR + fade;<br />          Serial.println(&quot;RED:&quot;);<br />          Serial.println(jasnoscR);<br />          delay(500);<br />        }<br />}      <br />break;<br /><br />case 2:    //rozjaśnianie / przyciemnianie zielonego<br />//jasnoscR=255;<br />//jasnoscB=255;<br /><br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscG &gt; 0)<br />        { jasnoscG = jasnoscG - fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscG &lt; 255 &amp;&amp; jasnoscG != 255) {<br />          jasnoscG = jasnoscG + fade;<br />          Serial.println(&quot;GREEN:&quot;);<br />          Serial.println(jasnoscG);<br />          delay(500);<br />        }<br />}     <br /><br />break;<br /><br />case 3:   //rozjaśnianie / przyciemnianie niebieskiego<br />//jasnoscR=255;<br />//jasnoscG=255;<br />if (digitalRead(jasniej) == HIGH){<br />  if (jasnoscB &gt; 0)<br />        { jasnoscB = jasnoscB - fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }}<br />        <br />if (digitalRead(ciemniej) == HIGH){<br />  if (jasnoscB &lt; 255 &amp;&amp; jasnoscB != 255) {<br />          jasnoscB = jasnoscB + fade;<br />          Serial.println(&quot;BLUE:&quot;);<br />          Serial.println(jasnoscB);<br />          delay(500);<br />        }<br />}     <br /><br /><br />break;<br /><br />case 4:     // program z możliwością wyboru 3 kolorów na różnych przyciskach<br />kolorki();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />case 6:    // program migający trzema kolorami<br />Serial.println(&quot;MIGANIE!!&quot;);<br />miganie();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br />case 7:    // program migający dwoma kolorami<br />  Serial.println(&quot;Policja!&quot;);<br />policja();<br />stopp=0;<br />jasnoscR=255;<br />jasnoscG=255;<br />jasnoscB=255;<br />break;<br /><br /><br />}  //koniec switch'a<br />        <br />   analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br /><br /><br />}    //koniec loop'a<br /><br /><br /><br />void  miganie(){<br />  while (stopp &lt; 1)<br />  {<br />    jasnoscG = 255;<br />    jasnoscR = 0;<br />    jasnoscB = 255;<br />    analogWrite(ledR, jasnoscR);<br />    analogWrite(ledB, jasnoscB);<br />    analogWrite(ledG, jasnoscG);<br />    delay(500);<br />    <br />    if(digitalRead(SWup) == HIGH) {<br />      stopp = 1;<br />      i++;<br />    //          delay(50);<br />      }<br />      if(digitalRead(SWdwn) == HIGH) {<br />        stopp = 1;<br />        i--;<br />    //          delay(50);<br />        }<br />        jasnoscG = 255;<br />        jasnoscR = 255;<br />        jasnoscB = 0;<br />        analogWrite(ledR, jasnoscR);<br />        analogWrite(ledB, jasnoscB);<br />        analogWrite(ledG, jasnoscG);<br />        if(digitalRead(SWup) == HIGH) {<br />          stopp = 1;<br />          i++;<br />    //          delay(50);<br />          }<br />          if(digitalRead(SWdwn) == HIGH) {<br />            stopp = 1;<br />            i--;<br />    //          delay(50);<br />            }<br />            <br />            delay(500);<br />            <br />           jasnoscG = 0;<br />           jasnoscR = 255;<br />           jasnoscB = 255;<br />           analogWrite(ledR, jasnoscR);<br />           analogWrite(ledB, jasnoscB);<br />           analogWrite(ledG, jasnoscG);<br />           if(digitalRead(SWup) == HIGH) {<br />             stopp = 1;<br />             i++;<br />    //          delay(50);<br />             }<br />             if(digitalRead(SWdwn) == HIGH) {<br />               stopp = 1;<br />               i--;<br />    //          delay(50);<br />               }<br />               delay(500);        <br />      }}<br />      <br />void policja(){<br /><br />  while (stopp &lt; 1){<br /><br />            jasnoscG = 255;<br />            jasnoscR = 0;<br />            jasnoscB = 255;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br />      //      delay(250);<br /> opoznienie();<br />     stoptimer = 0;<br />            jasnoscG = 255;<br />            jasnoscR = 255;<br />            jasnoscB = 0;<br />            analogWrite(ledR, jasnoscR);<br />            analogWrite(ledB, jasnoscB);<br />            analogWrite(ledG, jasnoscG);<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />    //          delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />    //          delay(50);<br />             }<br /> //           delay(250);             <br />     opoznienie();<br />     stoptimer = 0;              <br />      }}    <br />        <br />        <br />void kolorki(){<br />           <br />  Serial.println(&quot;kolorki&quot;);<br />  while (stopp &lt; 1){<br />    if(digitalRead(swR) == HIGH){<br />      delay(500);<br />      stanR=!stanR;<br />      digitalWrite(ledR,stanR);}<br />    if(digitalRead(swG) == HIGH) {<br />      delay(500);<br />      stanG=!stanG;<br />      digitalWrite(ledG,stanG);}<br />    if(digitalRead(swB) == HIGH){<br />      delay(500);<br />      stanB=!stanB;<br />      digitalWrite(ledB,stanB);<br />      }<br />              if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br />             } <br />   <br />        }}<br />        <br />     <br />  <br />void opoznienie() {    <br /><br />while (stoptimer &lt; 1) {<br />  if( OCF1A ){  //((TIFR1 &amp; (1 &lt;&lt; OCF1A)) || stopp &lt; 1)     //przerwanie, gdy TCNT = OCR <br />             TIFR1 = (1 &lt;&lt; OCF1A); // Wyzerowanie flagi CTC poprzez wpisanie do niej jedynki<br />             stoptimer = 1;              <br />   /*           if(digitalRead(SWup) == HIGH) {<br />              stopp = 1;<br />              i++;<br />              delay(50);<br />             }<br />              if(digitalRead(SWdwn) == HIGH) {<br />              stopp = 1;<br />              i--;<br />              delay(50);<br /><br />           }*/ <br />             <br /> <br />}}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9168">MarcineQ</a> — 30 maja 2015, o 18:24</p><hr />
]]></content>
</entry>
</feed>