all your code is unclear to me what you’re trying to achieve. There’s PWM scattered in one of them (for what?) and it’s not clear what you’re focussing on or how you’re “developing” this.
Start with a single file, that represents a single intent, and focus…
As I’ve shown you, you want to have “primitives” that don’t do a wait. You’ve not considered that. in your last file, SinkerOne.py, you are somewhat there. But some of your code is weird.
Left.forward(5)
Right.forward(5)
So this will start the left wheel, and wait for a count of 5. So in that time, the vehicle will have slewed one way (assuming the right wheel won’t freewheel). Then the right wheel kicks in, and the code waits for a count of 5. The vehicle will essentially drive straight forward (but not the way it was faced when you started). And then the motors are still left running.
Left.stop(5)
Right.stop(5)
So now you stop the left wheel, and wait for another count of 5. In this time the right wheel is still driving, and so it’ll straighten the vehicle to approximately the way it was facing originally, and then it’ll stop the right wheel (it’s now doing nothing) and then you make it wait 5 again.
Left.reverse(5)
Right.reverse(5)
Now you do the whole thing in reverse, slew one way, wait 5, start the other motor, wait 5…
Left.stop()
Right.stop()
And now you stop them both instantly. So at this point, the vehicle is not pointing the way it was originally.
As you can see, these will make a vehicle do stuff - but honestly ordinarily what you want the “higher level” control to do is to direct the vehicle in small iterative steps, not turn it on, wait 5, and hope you get what you want… you really need to distil your primitives even more. Think logically - you’ve done well on your “motor” object, that is all it can really do, but when you start talking about a “wheel”, you have some things that just don’t make logical sense in their own object:
def leftTurnForward(self, wait=0):
self.leftMotor.stop()
time.sleep(wait)
What does that mean?? It just stops the wheel and then sleeps - pointless isn’t it?
def rightTurnForward(self, wait=0):
self.LeftMotor.forward()
time.sleep(wait)
Same here, it’s not a meaningful construct of other functions of a motor.
These are relying on the fact that the other constructs are operating in some way - where what you really want to do is to make them do their own thing and not assume something else is going on.