The basics of using Arduino for CNC?

Having played with a stepper motor and one CNC driver module coupled with the Arduino I'm tempted to go further and make a smaller CNC machine.

I've read loads on the internet about CNC but theres a lot of information I don't understand.

If I want to run my arduino via USB to send the gcode, which of the user created pieces of software would I use? I think I understand that if I'm happy to have the computer constantly connected to the Arduino I don't need to worry about memory etc as it will just send the code line by line?

What sort of programs do people use to create there gcode?

So really I'm just after a simple overview of how hard or easy it is to go from having arudino running your stepper motors to getting it to work off gcode.

TIA!

If I want to run my arduino via USB to send the gcode, which of the user created pieces of software would I use?

Use for what? For sending the gcodes? For generating the gcodes? On the Arduino?

I think I understand that if I'm happy to have the computer constantly connected to the Arduino I don't need to worry about memory etc as it will just send the code line by line?

How will the Arduino know how much/whether scaling is needed, until it sees the whole file? If scaling is not needed, then, yes, the PC application can send the data one line at a time, every time the Arduino says that it is ready.

So really I'm just after a simple overview of how hard or easy it is to go from having arudino running your stepper motors to getting it to work off gcode.

Running a stepper motor means telling it how many steps to take, in which direction. A gcode is either an relative movement (move 1 inch in X) which is rare, or absolute movement (go to some specific position).

Figuring out how many steps are needed to get from where you are to where you need to be is the hard part.

Figuring out how to drive two stepper motors at the same time is not trivial, either. The way drivers work is such that they are completely unaware of any possible other motors/axes. So, you can only move one stepper at a time. Therefore, it is necessary to divide the X motion into a number of steps and the y motion into a number of steps, and move so far in X (some number of steps) and then so far in Y (some number of steps) so that, after a number of iterations of a loop, the head has arrived at the right location. The motion will not have been linear, usually, but the smaller the step size, the closer to a line you can follow.

http://www.thebox.myzen.co.uk/Hardware/CNC_Conversion.html
Is my arduino CNC project. I have also written processing sketches to feed the arduino with Gcode, this is always done a line at a time and never scaled.
There are many programs that generate Gcode, I have written several, there are commercial ones like the excellent CAMBAM, PC only and the free vector drawing application inkscape can also output Gcode. Or you can write it by hand in any text editor.

You can connect arduino to three stepper motors through L293 and get things going pretty fast. You can make the arduno execute simple g codes such as G00 and G01s, drilling, facing etc. If you however want to make the arduino understand complex operations, such as circular operations, arc programming (G02, G03 etc), cutter radius offset etc, you will need to have a math library and things can get complicated from there on.

In short, if you want to restrict to simple G codes along with drilling and facing operations, you can put the "G code decoding logic" in your arduino. If you want complex operations, you would be better off having it on your computer in the form of a c/c++/java application; this app instructs your arduino whenever you feed it with Gcode.

Well my project uses G2 and G3 commands without the maths library in an arduino.