<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Le 14/10/2014 19:51, Martin Peach a
      écrit :<br>
    </div>
    <blockquote
cite="mid:CAN5xZ3ZRkVjnKZ_7ottgu2Vzk41TWf-1cUy2c_kSDZpbnmYD9g@mail.gmail.com"
      type="cite">
      <div dir="ltr">Oh sorry, I thought you were using an arduino.<br>
        <br>
      </div>
    </blockquote>
    <br>
    I'm using an emulated arduino, it's called pcduino and it's the most
    powerfull miniPC we can actually find.<br>
    PureData is running so fine on it even through ssh there is no
    latency like I've encountered on raspberry,<br>
    and Multitrack USB soundcards runs greatly on it.<br>
    <br>
    <blockquote
cite="mid:CAN5xZ3ZRkVjnKZ_7ottgu2Vzk41TWf-1cUy2c_kSDZpbnmYD9g@mail.gmail.com"
      type="cite">
      <div dir="ltr">Martin<br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Tue, Oct 14, 2014 at 1:16 PM, Colet
          Patrice <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:colet.patrice@free.fr" target="_blank">colet.patrice@free.fr</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF">
              <div>Le 14/10/2014 15:06, Martin Peach a écrit :<br>
              </div>
              <span class="">
                <blockquote type="cite">
                  <div dir="ltr">
                    <div>Not sure why it segfaults, just want to say
                      that that method is really bad. Because of Pd's
                      control rate as well as the serial interface
                      latency, your timing will be really sketchy. The
                      way to do what you want is to implement the
                      ranging entirely on the arduino and send the
                      values back to Pd via [comport]. So a Pd [pulseIn]
                      object shoud simply send a request to the arduino
                      to start a pulse and return the time. It could be
                      implemented as an abstraction containing
                      [comport].<br>
                    </div>
                    <br>
                  </div>
                </blockquote>
                <br>
              </span> I'm not using serial to read gpio state but
              fopen() (may be fopen() is not fast enough), like in a
              raspberry (but it's not on raspberry), I will try to do
              this with python and use pdsend for retrieving value into
              puredata.<br>
              thank you for the advice.<br>
              pc
              <div>
                <div class="h5"><br>
                  <br>
                  <blockquote type="cite">
                    <div dir="ltr">Martin<br>
                    </div>
                    <div class="gmail_extra"><br>
                      <div class="gmail_quote">On Mon, Oct 13, 2014 at
                        9:29 PM, Colet Patrice <span dir="ltr"><<a
                            moz-do-not-send="true"
                            href="mailto:colet.patrice@free.fr"
                            target="_blank">colet.patrice@free.fr</a>></span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:0
                          0 0 .8ex;border-left:1px #ccc
                          solid;padding-left:1ex">Hello, I'm trying to
                          implement the pulseIn() function we can find
                          in arduino libraries into an external.<br>
                          <br>
                          I couldn't make it work because some part
                          doesn't seem to behave like I expect so I'm
                          wondering if it's caused by puredata process,<br>
                          so maybe someone in the list could enlight me
                          about that.<br>
                          <br>
                          The purpose of the external is about using an
                          ultrasound sensor connected on gpio that
                          require a microsecond timer for getting
                          distance like this:<br>
                          <br>
                          <br>
                          //here is a custom timer using a struct
                          provided by pcduino headers:<br>
                          #include core.h<br>
                          unsigned long pat_micros() {<br>
                              struct timeval tv;<br>
                              gettimeofday(&tv,NULL);<br>
                              return
                          tv.tv_sec*(uint64_t)1000000+tv.tv_usec;<br>
                          }<br>
                          <br>
                          //here is the custom pulseIn() function:<br>
                          unsigned long pat_pulseIn(t_pdpcduino *x, int
                          pin)<br>
                          {<br>
                              unsigned long timeout = 100000;<br>
                              unsigned long start = pat_micros();<br>
                          <br>
                              while( pdpcduino_gpio_read2 (x, pin) == 1
                          )<br>
                                  if( pat_micros() - start > timeout
                          )<br>
                                      return 0;<br>
                          <br>
                          // this is where I'm getting a segmentation
                          fault:<br>
                          <br>
                              while ( pdpcduino_gpio_read2 (x, pin) == 0
                          )<br>
                                  if( pat_micros() - start > timeout
                          )<br>
                                  return 0;<br>
                          <br>
                          //...<br>
                              unsigned long value = pat_micros();<br>
                          <br>
                              while( pdpcduino_gpio_read2 (x, pin) == 1
                          )<br>
                                  if( pat_micros() - start > timeout
                          )<br>
                                      return 0;<br>
                          <br>
                              return pat_micros() - value;<br>
                          <br>
                          }<br>
                          <br>
                          //...<br>
                          <br>
                          <br>
                          If I reduce the timeout number, segfault comes
                          randomly after this function has been
                          triggered, so I'm wondering if this method is
                          really appropriate,<br>
                          is there an exemple of external (containing
                          such while loops) I could get inspired from to
                          write this pulseIn() function?<br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
_______________________________________________<br>
                          Pd-dev mailing list<br>
                          <a moz-do-not-send="true"
                            href="mailto:Pd-dev@lists.iem.at"
                            target="_blank">Pd-dev@lists.iem.at</a><br>
                          <a moz-do-not-send="true"
                            href="http://lists.puredata.info/listinfo/pd-dev"
                            target="_blank">http://lists.puredata.info/listinfo/pd-dev</a><br>
                        </blockquote>
                      </div>
                      <br>
                    </div>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>