Thursday, November 20, 2008
IT'S WORKING!!!!
Wednesday, November 12, 2008
Automating your Password
If you’re like me, you’re getting really annoyed when you have to type in your password multiple times every time you want to update your source code on the svn. Here’s the work around I found.
You’ll notice the box that pops up to ask for your password is named “plink”. It’s part of the putty suit of ssh tools which you’ll need. they can be found here. Once you have that, you can then login to your cssgate account with putty and follow the directions here to set up a public/private key for yourself. To download the key, you’ll need a client like WinSCP. Once you have your private key downloaded, go to the folder you put putty in and launch pageant.exe. You’ll notice a hat icon in your windows tray. Right click on that, “Add Key” select your private key and you will never have to enter your password more than once again.
Tuesday, November 11, 2008
Suggestion:
danielmiester@gmail.com
Thursday, October 30, 2008
Wednesday, October 29, 2008
Tuesday, October 28, 2008
Saturday, October 25, 2008
why they're called "sketches"
the arduino programming environment is an offshoot of "processing" right? well processing is mostly designed for writing qraphics programs, and what is a graphics output? a drawing or a "sketch".
bresenham algorithm in 3d
void move(long x2, long y2, long z2)
{
long dx = x2 - x;
long dy = y2 - y;
long dz = z2 - z;
long x_inc;
if (dx < 0)
x_inc = -1;
else
x_inc=1;
long l = abs(dx);
long y_inc;
if (dy < 0)
y_inc = -1 ;
else
y_inc=1;
long m = abs(dy);
long z_inc;
if (dz < 0)
z_inc = -1 ;
else
z_inc=1;
long n = abs(dz);
long dx2 = 2^l ;
long dy2 = 2^m ;
long dz2 = 2^n ;
if ((l >= m) & (l >= n))
{
err_1 = dy2 - l;
err_2 = dz2 - l;
for (long i = 1;i<=l;i++)
{
if (err_1 > 0)
{
_step(Y);
err_1 = err_1 - dx2;
}
if (err_2 > 0)
{
_step(Z);
err_2 = err_2 - dx2;
}
err_1 = err_1 + dy2;
err_2 = err_2 + dz2;
step(X);
}
}
else if ((m >= l) & (m >= n))
{
err_1 = dx2 - m;
err_2 = dz2 - m;
for (long i = 1;i<=m;i++)
{
if (err_1 > 0)
{
_step(X);
err_1 = err_1 - dy2;
}
if (err_2 > 0)
{
_step(Z);
err_2 = err_2 - dy2;
}
err_1 = err_1 + dx2;
err_2 = err_2 + dz2;
_step(Y);
}
}
else
{
err_1 = dy2 - n;
err_2 = dx2 - n;
for (long i = 1;i<=n;i++)
{
if (err_1 > 0)
{
_step(Y)
err_1 = err_1 - dz2;
}
if (err_2 > 0)
{
_step(X);
err_2 = err_2 - dz2;
}
err_1 = err_1 + dy2;
err_2 = err_2 + dx2;
_step(Z);
}
}
}
Wednesday, October 22, 2008
assembly in arduino
I've just discovered that the arduino supports inline assembly.
guide to avr Assembler commands
http://www.avr-asm-tutorial.net/
examble:
asm volatile(
// DDRC = 0010 0000, ie. PORTB5 is OUT
"ldi r16,48\n"
"out 0x27,r16\n"
);
Startrek looms ever closer...
Monday, October 20, 2008
Tuesday, October 14, 2008
Monday, October 13, 2008
Thursday, October 9, 2008
proposed hardware interface
comments please
/**************************************
*movement types
*LINEAR is the expected movement
*COS starts out full speed and tapers to 0
*SIN is the opposite
**************************************/
#define LINEAR 0
#define COS 1
#define SIN 2
/**************************************
*enumeration of the axis movement selected
*allows for easy scaling later
**************************************/
#define AXIS_X 0
#define AXIS_Y 1
#define AXIS_Z 2
/**************************************
*sets the feedrate
*@param feedrate feedrate in steps/min
**************************************/
void set_feedrate(float feedrate);
/**************************************
*this queues up a move to be executed upon call of start()
*if feedrate is set to 0, movements will happen at maximum rate.
*@param axis The axis to move.
*@param destination final location for this axis (in steps)
*@param movement_type specifies the movement rate modifier
*@param degrees_start specifies where on the sin/cos curve to start (required if movement_type != 0)
*@param degrees_end specifies where on the sin/cos curve to end (required if movement_type != 0)
**************************************/
void add_move(char axis, long destination);
void add move(char axis, long destination, char movement_type, int degrees_start, int degrees_end);
/**************************************
* call this to start a movement.
* this is only called after all axis movements are entered.
* @return 0 upon success, non zero if error
**************************************/
int start();
/**************************************
*returns the current location of the axis (in steps)
*@param axis axis to read
*@return selected axis location in steps from home
***************************************/
long get_axis_location(char axis);
/**************************************
*gets status of machine
*returns 1 if all systems go.
*@return status bits
**************************************/
unsigned int status();
Wednesday, October 8, 2008
A simple DC Motor Controller
Wednesday, October 1, 2008
gcode references
There's wikipedia of course, the NIST website also has one, it is in reference to their interpreter, but I see no reason why we can't use it as a resource. Cncezpro.com seems to be the reference Mr. Gutmann prefers, and he also pointed out this one. I personally prefer the one by the NIST because it seems to give a deeper view into the inner workings of a proper gcode interpreter. It mentions the use of variables and mathematics.
the line
g0 x[#1550 + 3.6] y1.6
would be interpreted as Rapid move to (<value at register 1550> + 3.6, 1.6)
this probably isn't neccasary for drawing the roadrunner, but if we want to replicate a industrial control as much as possible, i think this is information worthwhile knowing, or at least considering.

