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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-12T20:57:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=11034&amp;mode</id>
<entry>
<author><name><![CDATA[kamilos3092]]></name></author>
<updated>2015-03-12T20:57:59+01:00</updated>
<published>2015-03-12T20:57:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11034&amp;p=123281#p123281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11034&amp;p=123281#p123281"/>
<title type="html"><![CDATA[Problem z obrabianiem danych po stronie Arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11034&amp;p=123281#p123281"><![CDATA[
Witam, walczę od rana z tym problemem, nie wiem co można zrobić dlatego mam nadzieje że poradzicie mi tutaj. <br /><br />Do rzeczy, buduje ploter, taki do rysowania, nic nadzwyczajnego. Po prostu chce się rozwinąć w kwestii programowania. Zrobiłem analize G-codu (generowanego z Inkscape) + wizualizacje. Wszystko ładnie pięknie chodzi. <br /><br />Na komputerze z takiej lini kodu G1 X-2.48 Y-116.26 F3500.00 <br />konwertuje ją przykładowo do takiej. <strong>X</strong>100<strong>D</strong>1<strong>Y</strong>500<strong>R</strong>0 W której X i Y to ilość kroków a D i R to kierunki silników. Wysyłam taką ramkę danych do arduino. Problem zaczyna się gdy w arduino zaczynam sobie rozbijać tą ramkę i wyciągać wartości. Przesył danych po prostu się zatrzymuje w pewniej chwili. Zawsze jest to ten sam moment. <br /><br />Poniżej kod z Arduino, zapewne mnie zjedziecie że słabo to wyciągam, ale nie jestem jakiś mega dobry w programowaniu a miałem tylko taki pomysł na język C. <br /><br />[syntax=c]&#91;code&#93;      <br />      <br />      <br />      #include &lt;LiquidCrystal.h&gt;<br />      <br />      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);<br />       String msg;<br />       int X, Y, dirX, dirY, elek;<br />       char X_string&#91;5&#93;;<br />      char Y_string&#91;5&#93;;<br />      char dirX_string&#91;2&#93;;<br />      char dirY_string&#91;2&#93;;<br />      char elek_string&#91;2&#93;;<br />      <br />     <br />      <br />      void setup() {<br />        Serial.begin(19200);<br />        lcd.begin(20, 2);<br />        lcd.print(&quot;Czekam na dane!&quot;);<br />         pinMode(13, OUTPUT);<br />        <br />      }   <br />     void szukaj(String work);<br />     <br />     void loop() {<br />             /*digitalWrite(13, HIGH);<br />             delay(200);<br />             digitalWrite(13,LOW);<br />             delay(100);*/<br />        msg=&quot;&quot;;<br />        String m = &quot;1&quot;;<br />      <br />        if(Serial.available() &gt;0){<br />          <br />            while(Serial.available() &gt; 0)<br />            {<br />                msg += char(Serial.read());<br />            }<br />          <br />            /*szukaj(msg);<br />            lcd.clear();<br />            lcd.setCursor(0,0);<br />            lcd.print(X_string);<br />            <br />            lcd.setCursor(10,0);<br />            lcd.print(Y_string);<br />            <br />            lcd.setCursor(1,1);<br />            lcd.print(dirX_string);<br />            <br />            lcd.setCursor(10,1);<br />            lcd.print(dirY_string);<br />            <br />            lcd.setCursor(16,1);<br />            lcd.print(elek_string);<br />            */<br />          <br />  <br />         Serial.println(m);<br />       <br />        }<br />      }<br />      <br />    void szukaj(String work){<br />        <br />      int j = 0, l = 0, k, m;<br />      <br />      <br />      if(work&#91;0&#93; == 'X')<br />      {<br />        <br />          while(1)<br />          {<br />        if(work&#91;j&#93; == 'D')<br />        {<br />              break;<br />            }<br />          j++;<br />      }<br />    <br />        for(k = 0; k&lt;j-1; k++)<br />        {<br />        X_string&#91;k&#93; = work&#91;k+1&#93;;<br />        }<br />        X_string&#91;k+1&#93; = '\0';<br /><br />        while(1)<br />        {<br />            if(work&#91;j&#93; == 'Y')<br />          {<br />            break;<br />        }<br />        j++;<br />        }<br />        l = j;<br />    dirX_string&#91;0&#93; = work&#91;j-1&#93;;<br />    dirX_string&#91;1&#93; = '\0';<br />    <br />        while(1)<br />        {<br />          if(work&#91;j&#93; == 'R')<br />            {<br />    break;<br />        }<br />        j++;<br />    }<br /><br /><br />    for(m = 0 ;(m+l)&lt;j-1;m++)<br />    {<br />      Y_string&#91;m&#93; = work&#91;l+m+1&#93;;<br />    }<br />    Y_string&#91;m+1&#93; = '\0';<br /><br />    dirY_string&#91;0&#93; = work&#91;j+1&#93;;<br />    dirY_string&#91;1&#93; = '\0';<br />    <br />    <br />        <br />        /*X = X_string.toInt();<br />        Y = Y_string.toInt();<br />        dirX = dirX_string.toInt();<br />        dirY = dirY_string.toInt();*/<br />      }<br />      <br />      <br />      else if(work&#91;0&#93; == 'E')<br />      {<br />    elek_string&#91;0&#93; = work&#91;1&#93;;<br />    elek_string&#91;1&#93; = '\0';<br />               // elek = elek_string.toInt();<br />    <br />    }<br />      }&#91;/code&#93;[/syntax]<br /><br />Program napisany na kompie czeka na znak &quot;1&quot;. Jak go otrzyma (czyli wtedy gdy paczka danych zostanie przeanalizowana na arduino) to wtedy wysyła kolejną paczkę. W kodzie mam wykomentowane wyświetlanie danych i przeszukiwanie(ale domyślnie tak nie ma być). Jeśli arduino nic nie musi analizować to mogę wrzucać tam tak duże pliku jak tylko chce i nic sie nie dzieje. Ale przecież nie o to chodzi. Próbowałem z czyszczeniem buforów Serial ale to nic nie dało. Program generalnie się nie zawiesza na początku pętli dałem miganie diodą i poza tym jak program przestał odbierać dane to dioda nadal migła wiec na pewno procek się nie zwiesza cały. <br /><br />Mam nadzieje że pomożecie <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=4252">kamilos3092</a> — 12 mar 2015, o 20:57</p><hr />
]]></content>
</entry>
</feed>