Awesome, the sensor is working great now. With the last edit you did. Thanks for that. Now, is there a way to get these readings with this code in a PD via a custom render ? I imagine somebody has done it before?

the file that you referred to as

brings up with a bunch of errors despite that I believe it's configured the way I need( d0 d1 output input although it also uses d2 and d3 )I would need to deactivate those so that I can use for other purposes. any reason this one you believe why this one is not working here is the full error messages:

In file ./include/legacy/UdpServer.h: [warning] You included file UdpServer.h. This is now deprecated. You should instead use #include <libraries/UdpServer/UdpServer.h> [-W#warnings] column: 2, line: 2
In file ./include/legacy/Midi.h: [warning] You included file Midi.h. This is now deprecated. You should instead use #include <libraries/Midi/Midi.h> [-W#warnings] column: 2, line: 2
In file ./include/legacy/Scope.h: [warning] You included file Scope.h. This is now deprecated. You should instead use #include <libraries/Scope/Scope.h> [-W#warnings] column: 2, line: 2
In file ./include/legacy/PulseIn.h: [warning] You included file PulseIn.h. This is now deprecated. You should instead use #include <libraries/PulseIn/PulseIn.h> [-W#warnings] column: 2, line: 2
no member named 'init' in 'PulseIn' column: 13, line: 317
no member named 'init' in 'PulseIn' column: 14, line: 319
In file included from /root/Bela/projects/pd3/render.cpp:15:
./include/legacy/UdpServer.h:2:2: warning: You included file UdpServer.h. This is now deprecated. You should instead use #include <libraries/UdpServer/UdpServer.h> [-W#warnings]
#warning You included file UdpServer.h. This is now deprecated. You should instead use #include <libraries/UdpServer/UdpServer.h>
^
In file included from /root/Bela/projects/pd3/render.cpp:16:
./include/legacy/Midi.h:2:2: warning: You included file Midi.h. This is now deprecated. You should instead use #include <libraries/Midi/Midi.h> [-W#warnings]
#warning You included file Midi.h. This is now deprecated. You should instead use #include <libraries/Midi/Midi.h>
^
In file included from /root/Bela/projects/pd3/render.cpp:17:
./include/legacy/Scope.h:2:2: warning: You included file Scope.h. This is now deprecated. You should instead use #include <libraries/Scope/Scope.h> [-W#warnings]
#warning You included file Scope.h. This is now deprecated. You should instead use #include <libraries/Scope/Scope.h>
^
In file included from /root/Bela/projects/pd3/render.cpp:22:
./include/legacy/PulseIn.h:2:2: warning: You included file PulseIn.h. This is now deprecated. You should instead use #include <libraries/PulseIn/PulseIn.h> [-W#warnings]
#warning You included file PulseIn.h. This is now deprecated. You should instead use #include <libraries/PulseIn/PulseIn.h>
^
4 warnings generated.
/root/Bela/projects/pd3/render.cpp:317:13: error: no member named 'init' in 'PulseIn'
pulseIn.init(context, gEchoDigitalInPin, HIGH);

/root/Bela/projects/pd3/render.cpp:319:14: error: no member named 'init' in 'PulseIn'
    pulseIn2.init(context, gEchoDigitalInPin2, HIGH);
    ~~~~~~~~ ^
2 errors generated.
make: *** [/root/Bela/projects/pd3/build/render.o] Error 1

Use this one instead.
Follow instructions to enable analog out instead of digital out if you so wish

(also note the receiver name is now distance (not distance1))

  • tkay replied to this.

    Awesome, thanks so much. Works beautifuly much better than the pd only methods.

      Yes, I did try that one. And got useful readings but not as precise

      hmm that's sad. It would be interesting to compare them side-by-side

        giuliomoro
        I found the same as @tkay: as commented elsewhere, regular pulsing jumps in the Pd patch - introducing a kind of yodelling effect - which I tried to filter out. I experimented with the [delay] object for the output and that improved things a bit, but the combined C++/Pd approach still gives much better results.

        3 years later

        tkay
        Hello!
        I'm back trying to use the HC-SR-04 sensor, this time with a regular full size bela. However I'm getting some errors. I'm not sure if this:

        giuliomoro this one instead.
        was meant to be used with the mini only. I am now using the analog out instead and as instructed i commented out the #define ULTRASONIC_DISTANCE_DIGITAL_OUT I connected the echo in (with resistor divider of course) in digital in 8 (pd 19)
        What am I missing?

        Here's the full error message:

        In file render.cpp: no matching function for call to 'sys_doio' column: 3, line: 656
        In file render.cpp: call to function 'strcmp' that is neither visible in the template definition nor found by argument-dependent lookup column: 11, line: 59
        /root/Bela/projects/FX/render.cpp:656:3: error: no matching function for call to 'sys_doio'
        sys_doio();
        ~~~~
        /usr/local/include/libpd/s_stuff.h:243:12: note: candidate function not viable: requires single argument 'pd_that', but no arguments were provided
        extern int sys_doio(struct _pdinstance* pd_that);
        ^
        /root/Bela/projects/FX/render.cpp:59:11: error: call to function 'strcmp' that is neither visible in the template definition nor found by argument-dependent lookup
        if(0 == strcmp(id, db[n].first.c_str()))
        ^
        /root/Bela/projects/FX/render.cpp:544:13: note: in instantiation of function template specialization 'getIdxFromId<Trill *>' requested here
        int idx = getIdxFromId(sensorId, gTouchSensors);
        ^
        /usr/include/string.h:140:12: note: 'strcmp' should be declared prior to the call site
        extern int strcmp (const char *s1, const char *s2)
        ^
        2 errors generated.
        make: *** [/root/Bela/projects/FX/build/render.o] Error 1

        This has been "canonized" and the 2024 advice is: use the example PureData/custom-render-ultrasonic-distance-sensor that comes with the latest Bela core code. If it's not present on your board, it means you have to update your core code following this procedure.

        Awesome! thanks so much again

        Is it possible to recieve the values in a faster interval? it seems to be coming in pulses of 1 second

        The code seems to indicate it is being sent out every 60 milliseconds, you can check that by adding in render.cpp the following lines:

        static unsigned int last;
        unsigned int current = context->audioFramesElapsed + n;
        rt_printf("%u (%u) HIGH\n", current, current - last);
        last = current;

        at line 1659 (before the state = HIGH; line, within those curly braces).
        Then re run the program and see what gets printed there and how often.