Here I demonstrate our current setup with a test board. I'm demonstrating the closed-loop operation with periodic trimming. I only showed the ailerons working, but the pitch control surface works as well.
The first part of the program "demos" the control surfaces, then checks to see if the IMU is connected. If it is not connected, it will not move on to the main part of the program. (This will be useful when we program the plane to take-off, as we do not want it to take-off without receiving positional data!)
The main part of the program uses a single line of code to control the roll, pitch, yaw, speed, and duration; like this:
myPlane.fly(roll, pitch, yaw, motor, time);
Inputting any particular values into the function will cause the plane to "hold" the given angles and speeds for the duration specified.
By creating this handy function, it will be now easy to chain these functions together dynamically to create complex maneuvers based on mathematical functions.
All the best,