I am driving the AxiDraw through the serial port using the EBB commands and Max/MSP to make a series of experimental, real-time drawings. I have had some success in drawing circles from sampled signals/oscillators and simple straight lines. However, I’d like to translate, for example, an audio waveform to a series of maneuvers for the AxiDraw. This would be much easier with XY transformations.

I understand how the motors work in opposition or coordination to make straight lines, for example, but I just can’t wrap my head around how to translate XY movements to the native axes’ steps – both to protect the motors from exceeding their maximums and to scale drawings to the page. I’ve spent hours and hours trying to adapt other code that does this like the Processing utility’s moveToAB() commands and such. I essentially want to make something where [0.,0.] = top left, [1.,1.] = bottom right, [0.5,0.5] = center.

I *think* the general translation is: “SM,time,A,B” where A = X+Y and B = X-Y? (Experiments seem to bear this out but it doesn’t seem quite right). After each move, I’d ideally query the step position and adjust the maximum value of the next move to constrain the motor from exceeding its limits (I’m intentionally leaving out any calculation of travel time).

I understand the maximum XY positions (i.e. “1.” in either XY axis) must be calculated from the step position of both motors, but I can’t puzzle out the relationship even working backwards. It would be nice to figure out absolute XY position but even relative XY moves would be so helpful…I can implement the programming in Max but just need the math explained to me in another way…

apologies for the ramble, I’m really desperate to make this work.