The buttons will be on one of the Arduino boards which transmits to the other board. The motor is
an EG-530KD with an RPM of 1600/3200 the load should be suitable for variable. Maybe the attached block diagram maybe of some help.
EG-530KD seems to be a very small motor, but I see words like drill bit and mud pump on that diagram. If I may ask, what is this device going to drill? This isn't a very powerful motor and therefore it may experience loads that might slow it down significantly. In this situation driving a non-sensor BLDC like the EG-530KD motor is extremely difficult, next to impossible. You really need to implement some kind of a rotational sensor feedback to be able to catch the moment when the motor's rotor had slowed down compared to the winding commutation that the Arduino has setup and lost its sync and with it torque and will essentially stall if you don't slower the rate of commutation in a matter of milliseconds.
Neither a drill nor a pump would in my mind require smooth rotation (the dynamic properties of the loads will smooth that rotation for you), so you can safely dispose of PWM from your project. That will increase the possible RPMs.
I don't have a ready software for your particular situation although I've just recently worked on something similar, also for a small motor. I'll try to put together my notes and perhaps post something here. But if you are in a hurry, I would suggest that you look at a possibility of buying a ready-to-use ESC controller and hook the motor up that way. Also, it will be easier to drive it if you increase the RPMs - sensorless ESCs like high RPMs. If you are going to consistently go lower than 600~800 RPM, you really need to install a rotation sensor because sensorless ESCs will lose sync at slow RPMs.