<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 15:06, Martin Peach a
      écrit :<br>
    </div>
    <blockquote
cite="mid:CAN5xZ3ZGquDBeJCFJXJ4gA6MK3A=C5qW25MOhU1_ma9o8yXMTg@mail.gmail.com"
      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>
    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<br>
    <br>
    <blockquote
cite="mid:CAN5xZ3ZGquDBeJCFJXJ4gA6MK3A=C5qW25MOhU1_ma9o8yXMTg@mail.gmail.com"
      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>
  </body>
</html>