ok, I think the issue may be with using Impulse to send over the messages.
What if you change the button monitor to:
~buttonMonitor = {
var d0 = DigitalIn.kr(0); // Digital pin 0 - Button
var d1 = DigitalIn.kr(1); // Digital pin 1 - Button
var d2 = DigitalIn.kr(2); // Digital pin 2 - Button
var d3 = DigitalIn.kr(3); // Digital pin 3 - Button
SendReply.kr(Changed.kr(d0+d1+d2+d3), '/buttonMonitor', [d0, d1, d2, d3]);
}.play;
Then a message gets sent each time one of the DigitalIn values changes, and not 10 times per second. With 10 times per second you may miss a button change.
I'm also not entirely sure how you use Pfunc
in your code, Pfunc is something you'd normally use in Patterns and would allow you to access the button value in a running pattern sequence, but the timing of when the button is then read is determined by the pattern, not by when the button value changes.
But I think for your application, I would look at Dseq and use the button input as a trigger for the Demand.kr ugen (the button input can of course first be sent to a bus with Out.kr, and then read into your synth with In.kr, this is normal routing on the server). See the Dseq helpfile.
PS, I forgot to turn on 'following' for this thread, so I didn't get notifications when new messages appeared. I'm not a regular visitor to the forum, but when I see an email message (which is generated when putting @... in a reply) I will try and go to the forum if I have the time.
PPS, and yes, it would be great if there was incredibly extensive documentation on how to use UGens. We put in a lot of volunteer effort into making SuperCollider run on Bela and writing the UGens, writing basic helpfiles, and then in making basic examples, which are available as example projects in Bela, see e.g. https://github.com/BelaPlatform/Bela/blob/master/examples/12-SuperCollider/2-digital-in/_main.scd. So it is not like there is no documentation at all.
DigitalIn is a UGen that produces a 1 or a 0 based on a button press. From there on it is regular supercollider usage. Of course, since Bela's strength is running everything on the server, rather than in the language, that does require a different thinking than most usual SuperCollider programming. I'd love to write an extensive tutorial on this, but I'd need to find time for this. But this is hard: I'm working as a freelancer with a bunch of other (paid) projects on my plate right now.