Thanks for posting that. Yes your problem is in software. You are trying to multiplex a display at the same time as driving the motors, but you are using delay calls.
When you use delay everything stops and you can do nothing else. So the delay( 25 ) after each motor movement is stopping the display from multiplexing fast enough and so you see the display flicker. Also you have a delay ( 8 ) after each display is shown. Finally the other source of flickering is the delay caused by the serial print which is running at only 9600 baud. In short the code is badly organized.
First off up the serial baud rate to the fastest you can manage. Better still don't print out at all.
Next you need to remove all delays, this will make your code as written at the moment not work. What you have to do is to implement a state machine along the lines of the blink without delay example in the IDE. This sort of code is a step up from the simple minded do one thing after another. Their are two links that explain the same thing in different ways, my:-
http://www.thebox.myzen.co.uk/Tutorial/State_Machine.html
Or Robin2's several things at once
http://forum.arduino.cc/index.php?topic=223286.0
You need three state machines for your project.
- Multiplex the display - each time it is called it will show the next digit on the display and then return.
- Read the light sensors and move the motor
- Measure the voltage and store it in variables for part 1 to use.
When you used the transistors, was in the form of reply #24? From this code I suspect it wasn't because you have written it so that a HIGH on a digit turns it on. For that to work you have to have a common anode display. In which case you need to wire your transistors like this and use PNP transistors. Also with this configuration a LOW on the transistor's base turns the digit on where as a HIGH turns it off.