Arduino - stepper motor wrong steps number
You're driving the stepper too fast, unintentionally though.

The while loop you use to delay is likely optimized out by the compiler:

while (tmp2++&lt;Speed);


Easiest way to fix would be to declare tmp2 as a volatile variable when you declare it up in the top of your program.  Thusly:

volatile unsigned int tmp2;


This will inform the compiler that tmp2 might possibly change at any time and not to optimize it away. It's more complicated than that really, but it'll fix your issue in a single tweak.

Better, would be to use the delay() function, to pause execution for some specified milliseconds, much like you're attempting to do with the empty while loop.

You're using an UNO, so probably running at 16Mhz, so your delay of 7500 loops is technically about 5 instructions long, multiplied by 7500... so 37,500 instructions executed, and at approximately 16,000,000 instructions per second, that's (37500/16M) that's about 2.34 milliseconds.  So maybe a delay() of 3-5 milliseconds would be useful.

Basically, you're trying to step the motor too fast, and it can't keep up.  Mass, inertia and all that stuff are involved too.

Try replacing the while statements with delays, start with big delays (25 or so), and work lower as long as stepper motion is consistent.  As you said, 200 steps should be 180°.

replace:

while (tmp2++&lt;Speed);


with:

delay(Speed);


and change Speed to an appropriate value (25 or so to begin with, play with it!).

There are many improvements to your code which could be discussed, but you need to crawl before you walk, before you run.  Get THIS code working, then finesse it.