shifting drive code

can you have your robot shift between a high and low gear if the controller is at full power and the wheels are not moving with out using a button?

I would say theoretically yes, you could detect motors being stalled using an IME or quad encoder and shift to a lower gear. When a certain speed was reached you could shift back to a higher gear, the programming will not be trivial but is possible. There are more comments here.