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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-03-08T11:48:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=22908&amp;mode</id>
<entry>
<author><name><![CDATA[yarek1313]]></name></author>
<updated>2020-03-08T11:48:29+01:00</updated>
<published>2020-03-08T11:48:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225240#p225240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225240#p225240"/>
<title type="html"><![CDATA[Re: Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225240#p225240"><![CDATA[
witam<br /><br />poradziłem sobie wstawiając pętle WHILE<br /><br />jeśli ktoś ma jakieś uwagi lub spostrzeżenia albo zastrzeżenia co do prawidłowości tego kodu proszę o info<br /><br />[syntax=c]else {<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        while (digitalRead(krancowka) == HIGH){      //jezeli krancowka HIGH -&gt; pila LOW<br />        digitalWrite(pila, LOW );<br />         <br />      }                        <br />          }                        <br />        digitalWrite(pila, HIGH );<br />        digitalWrite(zacisk, HIGH );<br />        delay(4000);<br />        //digitalWrite(dol, HIGH );<br />        digitalWrite(posow, LOW );        <br />        licznik = 0;<br />        ciecia++;<br />          //w tym miejscu nie odswieza licznika<br />          lcd.setCursor(7,2);<br />          lcd.print(ciecia);<br /> <br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16989">yarek1313</a> — 8 mar 2020, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yarek1313]]></name></author>
<updated>2020-03-07T10:01:51+01:00</updated>
<published>2020-03-07T10:01:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225234#p225234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225234#p225234"/>
<title type="html"><![CDATA[Re: Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225234#p225234"><![CDATA[
Bardzo dziękuje @Lex_  za naprowadzenie. Wszystko działa OK<br /><br />Ale zatrzymał mnie kolejny problem z którym myślałem że sobie poradzę.<br /><br />Potrzebuje w pewnym momencie wykonywania kodu poczekać aż krańcówka da sygnał.<br /><br /><strong><span style="color: #0000BF">KOD CAŁEGO PROGRAMU</span></strong><br />[syntax=c]#include &lt;LCD.h&gt;<br />#include &lt;LiquidCrystal_I2C.h&gt;<br />#include &lt;RotaryEncoder.h&gt;<br />#include &lt;Bounce2.h&gt;<br /><br />Bounce debouncer = Bounce();  <br /><br />LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);<br /><br />RotaryEncoder encoder_dlugosc(11, 10);  // encoder wprowadzajacy dlugosc<br />RotaryEncoder encoder_ilosc(3, 2);      // encoder wprowadzajacy ilosc<br /><br />#define encoder1 8           //encoder odczytujacy ilosc obraotów<br />#define encoder2 9          //encoder odczytujacy ilosc obraotów<br /><br />#define encoder_przycisk 12  //przycisk z encodera (moze byc dodowlny przycick<br /><br />//#define krancowka A0<br />int krancowka = A1;<br />int dioda = 13;<br /><br />int licznik = 0;<br />int ciecia = 0; <br />int stan;<br />int ostatniStan;  <br /><br />int pila = 6;<br />int dol = 5;<br />int zacisk = 4;  // IN4<br />int posow = 7; // IN1<br /><br /><br />int value = 0;<br />static int pos = 0;<br />static int pos2 = 0;<br />int newPos = 0;<br />int newPos2 = 0;<br />int dlugosc_wybrana = 10;<br />int ilosc_gotowych;<br /><br />void setup()<br />{<br /><br />  pinMode(krancowka, INPUT);<br />  digitalWrite(krancowka, HIGH);<br />  pinMode(dioda, OUTPUT); <br />  <br />  pinMode (encoder1,INPUT_PULLUP);<br />  pinMode (encoder2,INPUT);<br /><br />  pinMode(pila, OUTPUT);<br />  pinMode(posow, OUTPUT);<br />  pinMode(dol, OUTPUT);<br />  pinMode(zacisk, OUTPUT);<br />  <br />  pinMode(encoder_przycisk, INPUT_PULLUP);<br />  //pinMode(krancowka, INPUT_PULLUP);<br />  //pinMode(13,OUTPUT);<br />  //digitalWrite(13, LOW);<br />  digitalWrite(pila, HIGH );<br />  digitalWrite(posow, HIGH );<br />  digitalWrite(dol, HIGH );<br />  digitalWrite(zacisk, HIGH );<br />  lcd.begin(20, 4);<br /><br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;   -= TEST =- &quot;);<br />  lcd.setCursor(0, 2);<br /> lcd.print(&quot;      ver.3.&quot;);<br /> delay(3000);<br /><br /><br />  // ekran LCD po uruchomieniu<br /> lcd.setCursor(0, 0);<br /> lcd.print(&quot;Dlugosc: &quot;);<br /> lcd.setCursor(12, 0);<br /> lcd.print(&quot;Ilosc: &quot;);<br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;Dlugosc wybrana:     &quot;);<br /> lcd.setCursor(0, 2);<br /> lcd.print(&quot;Sztuki:   &quot;);<br /> lcd.setCursor(10, 2);<br /> lcd.print(&quot;Licznik:  &quot;);<br /> //lcd.print(&quot;T: &quot;);<br /><br /> debouncer.attach(encoder1);                      //drgania na encoderze liczacego<br /> debouncer.interval(1); // interval in ms<br />   <br />   // Reads the initial state of the outputA<br />   ostatniStan = digitalRead(encoder1);              //odczytanie stanu encodera liczacego<br /><br />}<br /><br />void loop()<br />// warunek dla krancowki<br />{ <br /> digitalRead(krancowka); //odczytujemy stan przycisku<br /> if(digitalRead(krancowka) == HIGH) {           //jesli przycisk nie jest wcisniety<br />    digitalWrite(dioda, LOW);  //dioda ma byc zgaszona<br />  }<br />  else                             //w przeciwnym wypadku<br />  {<br />    digitalWrite(dioda, HIGH); //dioda ma sie swiecic<br /> }<br />value = digitalRead(encoder_przycisk);         // podstawienie stanu przycisku<br />  <br />  if (value == LOW)                               //sprawdzenie stanu, jeśli wcisniety start<br />  {<br /> <br />   lcd.setCursor(17, 1);<br />   dlugosc_wybrana = newPos;<br />   licznik =0;<br />   lcd.print(dlugosc_wybrana);          //wyswietlenie ma LCD wybranego parametru<br />    <br />   delay(2000);                // czas oczekiwania na start opznienie 2s<br />   digitalWrite(zacisk, LOW );     // zalaczenie przekaznika odpowiedzialengo za docisk materialu<br />   delay(2000);                    // opznienie 2 s  <br />   digitalWrite(zacisk, HIGH );     // wylaczenie przekaznika odpowiedzialengo za docisk materialu<br />   digitalWrite(posow, LOW );   // zalaczenie przekaznika od posowu ktory rowniez kreci encoderem mierzacym dlugosc   <br />   lcd.setCursor(0, 3);<br />   lcd.print(&quot;PRACA&quot;);   //komunikaty na LCD<br />   lcd.setCursor(12,3);<br />   lcd.print(&quot;  POSOW&quot;);<br />  }<br /><br />  debouncer.update();<br />  stan  = debouncer.read();<br />  stan = digitalRead(encoder1); // Odczyt obecnego stanu z &quot;encoder1&quot; CLK<br />   // Jesli poprzedni stan i obecny stan na &quot;encoder1&quot; sa rozne, oznacza ze byl ruch (impuls)<br />   if (stan != ostatniStan){<br />       <br />     // Jesli &quot;encoder2&quot; jest inny niz stan &quot;encoder1&quot; to encoder kreci sie <br />   if (digitalRead(encoder2) != stan) { <br />       licznik ++;                                //zwiekszenie licznika obrotów<br />       {<br />        if (licznik == dlugosc_wybrana){            //jesli encoder w lewo dojdzie do parametru ktory został ustawiony<br />        digitalWrite(posow, HIGH );                 // zatrzymaj posów<br />        digitalWrite(zacisk, LOW );                 // zablokuj material ma na to czas 2s<br />        delay(2000);<br />        digitalWrite(pila, LOW );                   //uruchom przyzad<br />        delay(4000);                                // docelowo bedzie tu krancówka która pozniej wylaczy narazie 4s<br />        digitalWrite(pila, HIGH );                  // wylacz przyzad<br />        digitalWrite(zacisk, HIGH );               // zwolnij materiał<br />        licznik = 0;        //ustawienie licznika na odlicznie od 0<br />        }<br />        }<br />        }<br />        else {<br />        licznik ++;<br />        <br />        {<br />          if (ciecia &lt;= newPos2){<br />        if (licznik &gt;= dlugosc_wybrana){    //jak wyżej tylko jesli encoder kreci sie przeciwna strone co nei bedzie mialo miejsca<br />          if (ilosc_gotowych == ciecia){<br />            digitalWrite(posow, HIGH );<br />            lcd.clear();<br />            lcd.setCursor(4, 1);<br />            lcd.print(&quot; KONIEC &quot;);<br />            lcd.setCursor(2, 2);<br />            lcd.print(&quot; nacisnij RESET &quot;);<br />          }<br />          else {<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        digitalWrite(pila, LOW );<br />//       delay(4000);<br />      }<br /><br />        <br />        digitalWrite(zacisk, HIGH );<br />        //digitalWrite(dol, HIGH );<br />        digitalWrite(posow, LOW );        <br />        licznik = 0;<br />        ciecia++;<br />          //w tym miejscu nie odswieza licznika<br />          lcd.setCursor(7,2);<br />          lcd.print(ciecia);<br /> <br />        }<br />        }<br />        }<br />        }         <br />        }<br />   ostatniStan = stan; // Aktualizuj poprzedniStan z obecnym stanem<br /> <br /> // kod odpowiedzialny za obsluge encodera od nastaw to juz nie jest mojego autorstwa ale troche go modyfikowalem<br /><br />  encoder_dlugosc.tick();            //encoder od ustawiania dlugosci<br />  newPos = encoder_dlugosc.getPosition();<br />  if (pos != newPos)<br />  {<br />    <br />    if (newPos &gt; 200)<br />    {<br />      encoder_dlugosc.setPosition(200);     //maksymalna dlugosc<br />      newPos = 200;<br />    }<br />  <br />    if (newPos &lt; 1)<br />    {<br />      encoder_dlugosc.setPosition(1);    //minimalna dlugosc<br />      newPos = 0;<br />    }<br />   <br />    wybrana_dlugosc(newPos);<br />    pos = newPos; <br />    }<br /><br />//obsługa encodera od ilosci<br /><br />encoder_ilosc.tick();                             <br />  newPos2 = encoder_ilosc.getPosition();<br />  if (pos2 != newPos2)<br />  {<br />    <br />    if (newPos2 &gt; 200)<br />    {<br />      encoder_ilosc.setPosition(200);<br />      newPos2 = 200; // max dlugosc<br />    }<br />  <br />    if (newPos2 &lt; 1)<br />    {<br />      encoder_ilosc.setPosition(1);<br />      newPos2 = 1;<br />    }<br />  <br />    wybrana_ilosc(newPos2);<br />    pos2 = newPos2;<br />    <br />    }<br /><br />}<br /><br />void wybrana_dlugosc(int count)<br />{<br />  <br />  int present = (count * 3) - 1;<br />  if (count &gt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count &lt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  } <br />  lcd.setCursor(8, 0);<br />  lcd.print(count);<br />// wyswietla na LCD wartosci ustwionego parametru dlugosc<br />// jak bede wiedzial ile cm = 1 impuls to bede chcial wyswietlac cm<br />  <br />  }<br />   <br />void wybrana_ilosc(int count2)<br />{ <br />  int present2 = (count2 * 3) - 1;<br />  if (count2 &gt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count2 &lt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  lcd.setCursor(18, 0);<br />  ilosc_gotowych = count2;<br />  lcd.print(count2);      <br />}[/syntax] <br /><br /><span style="color: #0000BF"><strong>Fragment w którym potrzebuje zrobić zatrzymanie:</strong></span><br />[syntax=c]else {<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        digitalWrite(pila, LOW );<br />//       delay(4000);          // zamiast delay chce zeby sprawdzilo wartosc krancowki<br />      }                        // jesli LOW pila ma byc LOW i program ma czekac az bedzie HIGH<br />                               // w kodzie wyzej krancowka prawdlowo zalacza i wylacza diode<br />        <br />        digitalWrite(zacisk, HIGH );<br />        //digitalWrite(dol, HIGH );<br />        digitalWrite(posow, LOW );        <br />        licznik = 0;<br />        ciecia++;<br />          //w tym miejscu nie odswieza licznika<br />          lcd.setCursor(7,2);<br />          lcd.print(ciecia);<br /> <br />        }[/syntax]<br /><br />za cholerę żadne if-y tam mi nie wychodzą<br />Bardzo bym prosił jeszcze o pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16989">yarek1313</a> — 7 mar 2020, o 10:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lex_]]></name></author>
<updated>2020-03-05T09:24:31+01:00</updated>
<published>2020-03-05T09:24:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225218#p225218</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225218#p225218"/>
<title type="html"><![CDATA[Re: Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225218#p225218"><![CDATA[
Na moje oko zrobisz to zwykłym IFem zamiast pętli FOR. Warunek jest z góry błędny bo odnosi się do zmiennej, która jest gdzieś w trakcie zwiększana bez sprawdzenia czy słusznie.<br />Musisz IFem sprawdzać czy ilość cykli jest mniejsza niż zadana, a gdzieś w trakcie pracy zwiększać cykl o 1, kiedy masz pewność, że się wykonał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2676">Lex_</a> — 5 mar 2020, o 09:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yarek1313]]></name></author>
<updated>2020-03-05T07:48:11+01:00</updated>
<published>2020-03-05T07:48:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225217#p225217</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225217#p225217"/>
<title type="html"><![CDATA[Re: Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225217#p225217"><![CDATA[
Nie wiem dlaczego nie mogę edytować pierwszego postu<br /><br />Postarałem się opisać kod w miarę jasno. rzeczy oczywiste pozostawiłem bez opisu<br /><br />Bardzo dziękuję za zainteresowanie @Lex_<br /><br />kod:<br />[syntax=c]#include &lt;LCD.h&gt;   //obsluga LCD<br />#include &lt;LiquidCrystal_I2C.h&gt;  //obsluga LCD po i2c<br />#include &lt;RotaryEncoder.h&gt;  //obsluga encodera<br />#include &lt;Bounce2.h&gt;          // obsluga drgan na przyciskach<br /><br />Bounce debouncer = Bounce();  <br /><br />LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);<br /><br />RotaryEncoder encoder_dlugosc(11, 10);  // encoder wprowadzajacy dlugosc<br />RotaryEncoder encoder_ilosc(3, 2);      // encoder wprowadzajacy ilosc<br /><br />#define encoder1 8           //encoder odczytujacy ilosc obraotów<br />#define encoder2 9          //encoder odczytujacy ilosc obraotów<br /><br />#define encoder_przycisk 12  //przycisk z encodera (moze byc dodowlny przycick<br /><br /><br /><br />int licznik = 0; <br />int stan;<br />int ostatniStan;  <br /><br />int pila = 6;<br />int dol = 5;<br />int zacisk = 4;  // IN4<br />int posow = 7; // IN1<br /><br /><br />int value = 0;<br />static int pos = 0;<br />static int pos2 = 0;<br />int newPos = 0;<br />int newPos2 = 0;<br />int dlugosc_wybrana = 10;<br /><br />void setup()<br />{<br /><br /><br />  pinMode (encoder1,INPUT_PULLUP);<br />  pinMode (encoder2,INPUT);<br /><br />  pinMode(pila, OUTPUT);<br />  pinMode(posow, OUTPUT);<br />  pinMode(dol, OUTPUT);<br />  pinMode(zacisk, OUTPUT);<br />  <br />  pinMode(encoder_przycisk, INPUT_PULLUP);<br />  pinMode(13,OUTPUT);<br />  digitalWrite(13,LOW);<br />  digitalWrite(pila, HIGH );<br />  digitalWrite(posow, HIGH );<br />  digitalWrite(dol, HIGH );<br />  digitalWrite(zacisk, HIGH );<br />  lcd.begin(20, 4);<br /><br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;   -= TEST =- &quot;);<br />  lcd.setCursor(0, 2);<br /> lcd.print(&quot;      ver.2.&quot;);<br /> delay(5000);<br /><br /><br />  // ekran LCD po uruchomieniu<br /> lcd.setCursor(0, 0);<br /> lcd.print(&quot;Dlugosc: &quot;);<br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;Dlugosc wybrana:     &quot;);<br /> lcd.setCursor(0, 2);<br /> lcd.print(&quot;Licznik:       &quot;);<br /> lcd.setCursor(15, 2);<br /> lcd.print(&quot;T: &quot;);<br /><br /> debouncer.attach(encoder1);                      //drgania na encoderze liczacego<br /> debouncer.interval(1); // interval in ms<br />   <br />   // Reads the initial state of the outputA<br />   ostatniStan = digitalRead(encoder1);              //odczytanie stanu encodera liczacego<br /><br />}<br /><br />void loop()<br />{<br />value = digitalRead(encoder_przycisk);         // podstawienie stanu przycisku<br />  if (value == LOW)                               //sprawdzenie stanu, jeśli wcisniety start<br />  {<br /> <br />   lcd.setCursor(17, 1);<br />   dlugosc_wybrana = newPos;<br />   lcd.print(dlugosc_wybrana);          //wyswietlenie ma LCD wybranego parametru<br />    <br />   delay(2000);                // czas oczekiwania na start opznienie 2s<br />   digitalWrite(zacisk, LOW );     // zalaczenie przekaznika odpowiedzialengo za docisk materialu<br />   delay(2000);                    // opznienie 2 s  <br />   digitalWrite(zacisk, HIGH );     // wylaczenie przekaznika odpowiedzialengo za docisk materialu<br />   digitalWrite(posow, LOW );       // zalaczenie przekaznika od posowu ktory rowniez kreci encoderem mierzacym dlugosc   <br />   //lcd.setCursor(12,3);<br />   //lcd.print(&quot;PILA&quot;);<br />   //delay(czas_gilotyny);<br />   //digitalWrite(pila, HIGH );<br />   //delay(czas_przerwy);<br />   //digitalWrite(posow, LOW );<br />   //digitalWrite(zacisk, HIGH );<br />   //digitalWrite(dol, HIGH );<br />   //lcd.setCursor(12,3);<br />   //lcd.print(&quot;   POSOW&quot;);        <br />   //licznik = 0;<br />   //digitalWrite(gilotyna, HIGH );<br />   //digitalWrite(posow, LOW );<br />   lcd.setCursor(0, 3);<br />   lcd.print(&quot;!! PRACA !!&quot;);   //komunikaty na LCD<br />   lcd.setCursor(12,3);<br />   lcd.print(&quot;  POSOW&quot;);<br />  }<br /><br />for (int ciecia=0; ciecia&lt;5; ciecia++)     //moja proba wstawienia petli<br />{<br />  debouncer.update();<br />  stan  = debouncer.read();<br />  stan = digitalRead(encoder1); // Odczyt obecnego stanu z &quot;encoder1&quot; CLK<br />   // Jesli poprzedni stan i obecny stan na &quot;encoder1&quot; sa rozne, oznacza ze byl ruch (impuls)<br />   if (stan != ostatniStan){<br />       <br />     // Jesli &quot;encoder2&quot; jest inny niz stan &quot;encoder1&quot; to encoder kreci sie <br />   if (digitalRead(encoder2) != stan) { <br />       licznik ++;                                //zwiekszenie licznika obrotów<br />       {<br />        if (licznik == dlugosc_wybrana){            //jesli encoder w lewo dojdzie do parametru ktory został ustawiony<br />        digitalWrite(posow, HIGH );                 // zatrzymaj posów<br />        digitalWrite(zacisk, LOW );                 // zablokuj material ma na to czas 2s<br />        delay(2000);<br />        digitalWrite(pila, LOW );                   //uruchom przyzad<br />        delay(4000);                                // docelowo bedzie tu krancówka która pozniej wylaczy narazie 4s<br />        digitalWrite(pila, HIGH );                  // wylacz przyzad<br />        digitalWrite(zacisk, HIGH );               // zwolnij materiał<br />        <br />        digitalWrite(posow, LOW );;                // znów posow <br />        //lcd.setCursor(12,3);<br />        //lcd.print(&quot;PILA&quot;);<br />        //delay(czas_gilotyny);<br />        //digitalWrite(pila, HIGH );<br />        //delay(czas_przerwy);<br />        //digitalWrite(posow, LOW );<br />        //digitalWrite(zacisk, HIGH );<br />        //digitalWrite(dol, HIGH );<br />        lcd.setCursor(12,3);<br />        //lcd.print(&quot;   ==&quot;);<br />        lcd.print(ciecia);       // informacja na wyswietlaczu o ilosci wykonania sie petli i tu pokazuje mi losowo liczby od 1 do 4<br />        licznik = 0;        //ustawienie licznika na odlicznie od 0<br />        }<br />        }<br />        }<br />        else {<br />        licznik ++;<br />        <br />        {<br />        if (licznik &gt;= dlugosc_wybrana){          //jak wyżej tylko jesli encoder kreci sie przeciwna strone co nei bedzie mialo miejsca<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        digitalWrite(pila, LOW );<br />        delay(4000);<br />        digitalWrite(pila, HIGH );<br />        digitalWrite(zacisk, HIGH );<br />        <br />        digitalWrite(posow, LOW );<br />        //digitalWrite(posow, HIGH );<br />        //lcd.setCursor(12,3);<br />        //lcd.print(&quot;PILA&quot;);<br />        //delay(czas_gilotyny);<br />        //digitalWrite(pila, HIGH );<br />        //delay(czas_przerwy);<br />        //digitalWrite(posow, LOW );<br />        //digitalWrite(zacisk, HIGH );<br />       // digitalWrite(dol, HIGH );<br />        lcd.setCursor(12,3);<br />        lcd.print(ciecia);        <br />        licznik = 0;<br />        }<br />        }<br />        }<br />          lcd.setCursor(11,2);<br />          lcd.print(licznik);    //akltulany stan ilosci impulsow z encodera <br />          lcd.print(&quot;  &quot;); <br />        }<br />   ostatniStan = stan; // Aktualizuj poprzedniStan z obecnym stanem<br /> <br /> // kod odpowiedzialny za obsluge encodera od nastaw to juz nie jest mojego autorstwa ale troche go modyfikowalem<br /><br />  encoder_dlugosc.tick();            //encoder od ustawiania dlugosci<br />  newPos = encoder_dlugosc.getPosition();<br />  if (pos != newPos)<br />  {<br />    <br />    if (newPos &gt; 200)<br />    {<br />      encoder_dlugosc.setPosition(200);     //maksymalna dlugosc<br />      newPos = 200;<br />    }<br />  <br />    if (newPos &lt; 1)<br />    {<br />      encoder_dlugosc.setPosition(1);    //minimalna dlugosc<br />      newPos = 0;<br />    }<br />   <br />    wybrana_dlugosc(newPos);<br />    pos = newPos; <br />    }<br /><br />//obsługa encodera od ilosci<br />// ta wartosc docelowo ma byc podstawiona w petli<br /><br />encoder_ilosc.tick();                             <br />  newPos2 = encoder_ilosc.getPosition();<br />  if (pos2 != newPos2)<br />  {<br />    <br />    if (newPos2 &gt; 200)<br />    {<br />      encoder_ilosc.setPosition(200);<br />      newPos2 = 200; // max dlugosc<br />    }<br />  <br />    if (newPos2 &lt; 1)<br />    {<br />      encoder_ilosc.setPosition(1);<br />      newPos2 = 0;<br />    }<br />  <br />    wybrana_ilosc(newPos2);<br />    pos2 = newPos2;<br />    <br />    }<br />}<br />}<br />void wybrana_dlugosc(int count)<br />{<br />  <br />  int present = (count * 3) - 1;<br />  if (count &gt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count &lt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  } <br />  lcd.setCursor(14, 0);<br />  lcd.print(count);<br />// wyswietla na LCD wartosci ustwionego parametru dlugosc<br />// jak bede wiedzial ile cm = 1 impuls to bede chcial wyswietlac cm <br />  <br />  <br />  }<br />   <br /><br />void wybrana_ilosc(int count2)<br />{<br />  <br />  int present2 = (count2 * 3) - 1;<br />  if (count2 &gt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count2 &lt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  } <br />  lcd.setCursor(17, 0);<br />  lcd.print(count2);<br />  // wyswietla na LCD wartosci ustwionego parametru ilosc<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16989">yarek1313</a> — 5 mar 2020, o 07:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lex_]]></name></author>
<updated>2020-03-04T21:29:31+01:00</updated>
<published>2020-03-04T21:29:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225215#p225215</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225215#p225215"/>
<title type="html"><![CDATA[Re: Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225215#p225215"><![CDATA[
Nie wiem czy Ty to pisałeś czy ktoś inny, ale podstawą w kodzie są komentarze. <br />Człowiek potrafi po kilku miesiącach zapomnieć we własnym kodzie co dana linia miała za zadanie robić.<br />Chciałbym pomóc, ale bez opisanego kodu jest to kwestia domysłów i straty czasu.<br /><br />Ogarnij komentarze i może da się coś  tym zrobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2676">Lex_</a> — 4 mar 2020, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yarek1313]]></name></author>
<updated>2020-03-04T19:01:16+01:00</updated>
<published>2020-03-04T19:01:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225214#p225214</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225214#p225214"/>
<title type="html"><![CDATA[Pomiar odleglosci i uruchomienie maszyny do ciecia]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22908&amp;p=225214#p225214"><![CDATA[
Witam<br />zrobiłem sterownik który po wpisaniu pewnego parametru (są to impulsy encodera) i wciśnięciu przycisku uruchamia posuw po czym ucina dany materiał. Sterownik działa prawidłowo. O ile kod może nie jest idealny. <br />Zaszła potrzeba przerobienia kodu na potrzeby innej maszyny trochę bardziej rozbudowanej.  Potrzebuje wprowadzić encoderem ilość cykli jakie maszyna musi jeszcze wykonać. <br />Układ składa się z 3 encoderów i kilku przekaźników. <br />Jeden encoder liczy impulsy z maszyny<br />Drugi ustawia ilość impulsów po których maszyna ma uruchomić inny przekaźnik, naciśnięcie tego drugiego powoduje uruchomienie maszyny.<br />Trzeci ma za zadanie wprowadzić ilość ile razy ma się cały cykl wykonać. (ilość jestem w stanie odczytać) ale za cholerę nie mogę tego przełożyć na ilość wykonania pętli. W kodzie przykład pętli która ma sie wykonać 5 razy ale nie działa to prawidłowo i ilość wykonań wyświetla dowolnie. <br /><br />Bardzo proszę o pomoc ewentualnie jakieś nakierunkowanie. <br /><br />[syntax=c]#include &lt;LCD.h&gt;<br />#include &lt;LiquidCrystal_I2C.h&gt;<br />#include &lt;RotaryEncoder.h&gt;<br />#include &lt;Bounce2.h&gt;<br /><br />Bounce debouncer = Bounce();<br /><br />LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);<br /><br />RotaryEncoder encoder_dlugosc(3, 2);  // encoder menu  11 10<br />RotaryEncoder encoder_ilosc(11, 10);<br /><br />#define encoder1 8<br />#define encoder2 9<br />//#define encoder_menu1 10<br />//#define encoder_menu2 11<br />#define encoder_przycisk 12<br /><br /><br />//int czas_gilotyny = 500;  // czas pracy gilotyny w ms<br />//int czas_przerwy = 300;<br />int licznik = 0; <br />int stan;<br />int ostatniStan;  <br /><br />int pila = 6;<br />int dol = 5;<br />int zacisk = 4;  // IN4<br />int posow = 7; // IN1<br /><br /><br />int value = 0;<br />static int pos = 0;<br />static int pos2 = 0;<br />int newPos = 0;<br />int newPos2 = 0;<br />int dlugosc_wybrana = 10;<br /><br />void setup()<br />{<br /><br /><br />  pinMode (encoder1,INPUT_PULLUP);<br />  pinMode (encoder2,INPUT);<br /><br />  pinMode(pila, OUTPUT);<br />  pinMode(posow, OUTPUT);<br />  pinMode(dol, OUTPUT);<br />  pinMode(zacisk, OUTPUT);<br />  <br />  pinMode(encoder_przycisk, INPUT_PULLUP);<br />  pinMode(13,OUTPUT);<br />  digitalWrite(13,LOW);<br />  digitalWrite(pila, HIGH );<br />  digitalWrite(posow, HIGH );<br />  digitalWrite(dol, HIGH );<br />  digitalWrite(zacisk, HIGH );<br />  lcd.begin(20, 4);<br /><br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;   -= TEST =- &quot;);<br />  lcd.setCursor(0, 2);<br /> lcd.print(&quot;      ver.2.&quot;);<br /> delay(5000);<br /><br /> <br /> lcd.setCursor(0, 0);<br /> lcd.print(&quot;Dlugosc: &quot;);<br /> lcd.setCursor(0, 1);<br /> lcd.print(&quot;Dlugosc wybrana:     &quot;);<br /> lcd.setCursor(0, 2);<br /> lcd.print(&quot;Licznik:       &quot;);<br /> lcd.setCursor(15, 2);<br /> lcd.print(&quot;T: &quot;);<br /><br /> debouncer.attach(encoder1);<br /> debouncer.interval(1); // interval in ms<br />   <br />   // Reads the initial state of the outputA<br />   ostatniStan = digitalRead(encoder1);<br /><br />}<br /><br />void loop()<br />{<br />value = digitalRead(encoder_przycisk);<br />  if (value == LOW)<br />  {<br /> <br />   lcd.setCursor(17, 1);<br />   dlugosc_wybrana = newPos;<br />   lcd.print(dlugosc_wybrana);<br />    <br />   delay(2000);                // czas oczekiwania na start<br />   digitalWrite(zacisk, LOW );<br />   delay(2000);<br />   digitalWrite(zacisk, HIGH );<br />   digitalWrite(posow, LOW );<br />   //lcd.setCursor(12,3);<br />   //lcd.print(&quot;PILA&quot;);<br />   //delay(czas_gilotyny);<br />   //digitalWrite(pila, HIGH );<br />   //delay(czas_przerwy);<br />   //digitalWrite(posow, LOW );<br />   //digitalWrite(zacisk, HIGH );<br />   //digitalWrite(dol, HIGH );<br />   //lcd.setCursor(12,3);<br />   //lcd.print(&quot;   POSOW&quot;);        <br />   //licznik = 0;<br />   //digitalWrite(gilotyna, HIGH );<br />   //digitalWrite(posow, LOW );<br />   lcd.setCursor(0, 3);<br />   lcd.print(&quot;!! PRACA !!&quot;);<br />   lcd.setCursor(12,3);<br />   lcd.print(&quot;  POSOW&quot;);<br />  }<br /><br />for (int ciecia=0; ciecia&lt;5; ciecia++)<br />{<br />  debouncer.update();<br />  stan  = debouncer.read();<br />  stan = digitalRead(encoder1); // Odczyt obecnego stanu z &quot;encoder1&quot; CLK<br />   // Jesli poprzedni stan i obecny stan na &quot;encoder1&quot; sa rozne, oznacza ze byl ruch (impuls)<br />   if (stan != ostatniStan){<br />       <br />     // Jesli &quot;encoder2&quot; jest inny niz stan &quot;encoder1&quot; to encoder kreci sie w prawo<br />   if (digitalRead(encoder2) != stan) { <br />       licznik ++;<br />       {<br />        if (licznik == dlugosc_wybrana){            //encoder w lewo<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        digitalWrite(pila, LOW );<br />        delay(4000);<br />        digitalWrite(pila, HIGH );<br />        digitalWrite(zacisk, HIGH );<br />        <br />        digitalWrite(posow, LOW );;<br />        //lcd.setCursor(12,3);<br />        //lcd.print(&quot;PILA&quot;);<br />        //delay(czas_gilotyny);<br />        //digitalWrite(pila, HIGH );<br />        //delay(czas_przerwy);<br />        //digitalWrite(posow, LOW );<br />        //digitalWrite(zacisk, HIGH );<br />        //digitalWrite(dol, HIGH );<br />        lcd.setCursor(12,3);<br />        //lcd.print(&quot;   ==&quot;);<br />        lcd.print(ciecia);        <br />        licznik = 0;<br />        }<br />        }<br />        }<br />        else {<br />        licznik ++;<br />        <br />        {<br />        if (licznik &gt;= dlugosc_wybrana){          //encoder w prawo<br />        digitalWrite(posow, HIGH );<br />        digitalWrite(zacisk, LOW );<br />        delay(2000);<br />        digitalWrite(pila, LOW );<br />        delay(4000);<br />        digitalWrite(pila, HIGH );<br />        digitalWrite(zacisk, HIGH );<br />        <br />        digitalWrite(posow, LOW );<br />        //digitalWrite(posow, HIGH );<br />        //lcd.setCursor(12,3);<br />        //lcd.print(&quot;PILA&quot;);<br />        //delay(czas_gilotyny);<br />        //digitalWrite(pila, HIGH );<br />        //delay(czas_przerwy);<br />        //digitalWrite(posow, LOW );<br />        //digitalWrite(zacisk, HIGH );<br />       // digitalWrite(dol, HIGH );<br />        lcd.setCursor(12,3);<br />        lcd.print(ciecia);        <br />        licznik = 0;<br />        }<br />        }<br />        }<br />          lcd.setCursor(11,2);<br />          lcd.print(licznik);<br />          lcd.print(&quot;  &quot;); <br />        }<br />   ostatniStan = stan; // Aktualizuj poprzedniStan z obecnym stanem<br /> // kod odpowiedzialny za obsluge encodera od nastaw<br />  <br /><br />  encoder_dlugosc.tick();<br />  newPos = encoder_dlugosc.getPosition();<br />  if (pos != newPos)<br />  {<br />    <br />    if (newPos &gt; 200)<br />    {<br />      encoder_dlugosc.setPosition(200);<br />      newPos = 200;<br />    }<br />  <br />    if (newPos &lt; 1)<br />    {<br />      encoder_dlugosc.setPosition(1);<br />      newPos = 0;<br />    }<br />   <br />    wybrana_dlugosc(newPos);<br />    pos = newPos; <br />    }<br /><br />encoder_ilosc.tick();<br />  newPos2 = encoder_ilosc.getPosition();<br />  if (pos2 != newPos2)<br />  {<br />    <br />    if (newPos2 &gt; 200)<br />    {<br />      encoder_ilosc.setPosition(200);<br />      newPos2 = 200; // max dlugosc<br />    }<br />  <br />    if (newPos2 &lt; 1)<br />    {<br />      encoder_ilosc.setPosition(1);<br />      newPos2 = 0;<br />    }<br />  <br />    wybrana_ilosc(newPos2);<br />    pos2 = newPos2;<br />    <br />    }<br />}<br />}<br />void wybrana_dlugosc(int count)<br />{<br />  <br />  int present = (count * 3) - 1;<br />  if (count &gt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count &lt; pos)<br />  {<br />    lcd.print(&quot; &quot;);<br />  } <br />  lcd.setCursor(14, 0);<br />  lcd.print(count);<br /><br /><br />  <br />  <br />  }<br />   <br />//int count2;<br />void wybrana_ilosc(int count2)<br />{<br />  <br />  int present2 = (count2 * 3) - 1;<br />  if (count2 &gt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  }<br />  if (count2 &lt; pos2)<br />  {<br />    lcd.print(&quot; &quot;);<br />  } <br />  lcd.setCursor(17, 0);<br />  lcd.print(count2);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16989">yarek1313</a> — 4 mar 2020, o 19:01</p><hr />
]]></content>
</entry>
</feed>