HAL2Arduino 0.5 – Released.

Happy Holidays everyone!😀

With that said, I would like to introduce you to a new version of HAL2Arduino version 0.5.

Our shiny new version has added support for:

  • Quadrature encoders for precise position control.
  • PID Servo control. For fine grain tuning.
  • Basic Jog Wheel support.
  • Internal and/or external feedback support. Allows servos/steppers to auto-correct positional errors.


  • Faster PC-Host side script.
  • Lock-step synchronization between microcontroller clients.

In the pipe-line:

  • I2C support for mcp23017 IO expander chips. To allow up to 112 additional pins, per client. Very useful for matrix keypads.
  • Analog joystick input. Some people prefer these to jog wheels, especially scrap-bot builders.
  • User definable M-Codes. This will allow users to add special commands right in to their G-Code that can signal the microcontroller(s) to perform specific tasks. (Like ‘Brew Coffee’, ‘tweet when complete’ etc.)

Enjoy the holidays.


67 Responses to HAL2Arduino 0.5 – Released.

  1. Adam says:

    Thank you for your holiday gift for us. Your work is very important for me for connecting LINUXCNC and complicated 3d printer that I build.

  2. arne says:

    Another big thank you from me for your holiday gift🙂 I’ll test it soon🙂 2014 looks more interesting now🙂

  3. arne says:

    Hi Dewy,

    tried out the Hal 0.5 version today, and it works fine. But I had to comment out lines 52-54 of the custom.hal file in my working directory:

    net getXspeed Hal2Arduino.axis_0_joint-vel-cmd
    net getXspeed Hal2Arduino.axis_1_joint-vel-cmd
    net getXspeed Hal2Arduino.axis_2_joint-vel-cmd

    As these lines were in the 0.4 version, I wonder why there is the need to comment them out.

    If not commented out the error file says: custom.hal:52: Pin ‘Hal2Arduino.axis_0_joint-vel-cmd’ does not exist 9041

    Best regards

    • dewy721 says:

      Sorry, I at some point had been experimenting with remote velocity control. While it is supported; I concluded that the additional expense was less productive than just re-tuning the host-side script to update faster. (I forgot to remove it from the .hal file.)

      Many thanks Duane

  4. Gava says:

    Hi, congratulations on your work is really excellent

    My question is whether there is any pin came out for handling the spindle motor?

    I might say that part of the programming is in located?

    Thank you.

    • dewy721 says:

      The code for it has not been made yet. Hence there is no pin assignment for it.

      However, the framework is in place to add it easily.

      Spindle codes are 129~138 and ideally they would be called from line #63 under the ‘program’ tab.

      From there, perhaps a function call could be crafted to accept 2 variables: SindleAxis and SpindleData (aka. RPM).

      Something like:

       byte spindleOutputPin={3,5,6,9,10,11}; // Six separate spindles for example. (ie. Turret lathe.) 
      #define spindleDriveType pwm 
      #define ratedSpindleSpeedMin 0 
      #define ratedSpindleSpeedMax 3260 // A common U.S. single-phase 120vac/60hz motor speed. 
      #define spindlePwmMin 50 // minimum power to rotate spindle. 
      #define spindlePwmMax 255 // full speed. 
      void setSpindleSpeed(byte axis, long speed){
         if(spindleEnabled[axis] && spindleDriveType==pwm){ // Did we receive code 133 to enable this spindle? // To be set by some other hypothetical function.
           byte spindleOutput=constrain(map(speed,ratedSpindleSpeedMin,ratedSpindleSpeedMax,spindlePwmMin,spindlePwmMax),spindlePwmMin,spindlePwmMax);
           analogWrite(spindleOutputPin[axis],output); // Apply the value to the motor drive pin.
           // spindle is disabled, so do nothing here.

      I will try to get it added into the next release, this weekend.

      On Thu, Jan 30, 2014 at 10:24 PM, Emc2Arduino

  5. Robert Burns says:

    I am looking to use a Mega 2560 and RAMPS 1.4 with LinuxCNC, Will HAL2Arduino or EMC2Arduino do that?

    • dewy721 says:

      While yes, it ‘can’ be made to work for basic 3axis control (think simple router table).

      If you already own a mega2560 and just want make use of it that’s not a bad idea at all.

      However, if you’re still shopping for a microcontroller there is a much better solution for the same amount of money. For example the “BeagleBone Black” from beagleboard.org is the same price and can run LinuxCNC right on the microcontroller itself, which is a huge speed boost.

      • Robert Burns says:

        yes,BBB is cheap, but the io capes are like $150-$180. I’d like to get my feet wet with linuxCNC before buying one if possible….and practicable.

        a Deltabot would not be basic 3 axis though. I have the 2560/ramps combo, but it is underpowered cpu/memory wise for a kossel. I want to try EMC2Arduino, but I don’t know what have the stuff the config is asking for is, much less what to set them to. All the pin configs and such are kept in parts of the firmware the user never has to modify.

        I posted a thread on the Deltabot Google Group to see if someone more experienced then me would take a whack at it. I think there are a ton of people there running Marlin or Repetier that would love to run linuxCNC.

        I saw how helpful you are on shapeko and other CNC forums, My hope is you can help our group the same.

      • dewy721 says:

        Well, actually HAL2Arduino is just a bridge to get linuxcnc to talk to an arduino. Effectively what it does is listen to a serial stream (ticker-tape style) for commands from a pc running linuxcnc.

        With that in mind, it’s not realtime. There is about a 10~50ms lead-time for communications overhead.

        With that said however, it does use the accelstepper library for movement.

        Some of its features: Has user selectable modules, cut out the stuff you don’t want. Allows ganging multiple arduinos to one pc. Each arduino can be configured to handle different sections of the machine. Can support multiple slave machines. (Farming) Supports multiple arduino types simultaneously, tested so far: Uno, Mege2560 and Due.

        Compared to the Uno & 2560, the Due will run circles around them. Uno = Run up to two steppers. Best used for buttons/lcds, not much else. 2560 = 3 steppers ok, 4 at best. Due = 9 or more steppers + cpu power to spare for encoder feedback etc.

        There are way too many configuration options to offer you any ‘silver bullet’ “copy & paste” config.

        The version I’m slowly developing (0.6a) as time permits (fulltime job +2hr commute +family +active developer for PocketNC.com) will adapt to varying speed/acceleration that linuxcnc likes to throw around. This solves a studdering issue that earlier versions have where the arduino races into a slowly moving set of coordinates, stops, races to the next coordinates, stops, repeat.

        So in a nut-shell if you like modifying code then HAL2Arduino might be what your looking for, however if your seeking a silver bullet solution then what your after is still yet beyond the level of what H2A currently is at the moment.

        Although, if your intent on running linuxcnc you’ll still have to roll up your sleeves and get your hands dirty, hand editing files regardless.

        The BBB can run generic stepper driver boards, can be loaded linuxcnc on-board and can also run the pc-side of H2A to control one or more arduinos. But the learning curve is high.

        That’s really the best answer I can provide you at the moment, since I don’t have a delta bot myself. That is unless you really, really wanna send me one to develop with that is.😉

        On Wed, May 28, 2014 at 5:15 AM, Emc2Arduino wrote:


      • dewy721 says:

        Oh, and a far as EMC2Arduino. Its depreciated as I haven’t looked at that code for over a year now.

  6. Jose San says:

    Hi Dewy, I am using a Arduino Uno board but I have problems. I could start linuxCNC. It works but I don’t have communication with arduino board through the serial port. The lights Rx y Tx don’t turn on when I put play in the program and the motors don’t work too. I just changed the digital outputs for stepPin and dirPin for each motor in the program modAccelStepper but I don’t know what should do it now.

    • dewy721 says:

      Hello Jose, I’m sorry for taking so long to respond. (Been buried with a new job, cnc collaboration project and helping Wife with med-school.) *:-)

      The problem is that the link between the computer running Linux and the Arduino are not talking.

      Try the following:
      Install the Arduino IDE for Linux and see if you can upload/run the “blink” sketch. This will verify that Linux has the ability to link with it.

      Let me know if you can get that established so I can help you further.

      I’ll try to respond faster this time tho.😉

      • Don´t worry Dewy,

        I probed with 0.4 version and it works well. I have some problem with the continue speed but I hope to resolve that reducing the baud rate.

        Thanks for you reponse. Bye

  7. Adrien G. says:

    I’m a part of a FRENCH robotic club and I want to try H2A to run our CNC on USB with a laptop.
    I just have a doubt on the right card I have to choose. I want to manage 3 steppers, a LCD, 5 relays, 5 buttons and 3 sensor inputs (home position). I want to stay with an Arduino board. Is a Mega is sufficient or I should buy a Due board ?
    I’m quite new in arduino world but I’m familiar with PIC uC and C language so I’m not afraid to have hands dirty😉
    Thank you !

    • Duane Bishop says:

      Hello Adrien, It is nice to hear from someone in Europe again.🙂

      An Arduino Mega2560 could do what you want, and it is better supported by the community than the Arduino Due.

      However, the Arduino Due would be slightly faster than a Mega2560 for moving 3 steppers.

      With 4 or more steppers the Mega2560 will become slower for each additional stepper, this is where the Due becomes the better choice.

      Either way, H2A supports multiple simultaneous Arduino connections (even different kinds) at the same time. You could have one Arduino running an entire machine, or several Arduinos working to run the machine, together in concert.

      I have tested the Uno, Mega2560 and the Due. I can say that I know that all 3 or these will work, possibly other types as well.

      One performance challenge for you will be the LCD screen, the library for using the LCD is considered of a “blocking” type of code. It will cause the Arduino “wait for completion” and/or not allow it to move in a smooth fashion when updating the screen. I have tried to accommodate for this by setting the LCD updates to an IDLE priority. But the best solution would be to use a dedicated Arduino just for the LCD. That way all the motion control is smooth and proper.

      If you have yet to buy a uC, and can write some code…. I have been working on a newer project using the more powerful “BeagleBone Black” (same price as Mega2560/Due) to both run LinuxCNC AND move the steppers!

      The BBB can be found at http://beagleboard.org/
      The software at http://blog.machinekit.io/
      The new project I am working on is at http://www.pocketnc.com/

      • Adrien G; says:

        Thank you very much for your reply !
        I will buy an extra UNO board for the lcd screen, just to be sure. For now I still want to keep a computer to manage our CNC.

        I looked at your new project, it’s amazing ! Well designed, cute, I will follow this new project closely and share it with my friends !

      • Adrien G says:


        I received everything and I make some tests since a few day : it’s working !!

        Now I want to add some panel controls, a file “modControls” exists, but it is not complete, is that correct ?

        The Arduino software seems clear and pretty easy to modify, but and the python script it’s not that clear to me. So, for an “estop-indicator”, what should I do ?

        In HAL2Arduino-0.5.py, add a command like :
        if command = 320:
        c[‘ioncontrol_estop-indicator’] = val

        and after :
        if codesAcceptes.find(“320”) > -1:
        if simulation == True
        printf “creating : ioncontrol_estop-indicator”
        print “makePins: creating: %r % pinLabel
        Is that ok ?

        After, I should add something in custom.hal, but everything I have tried provokes an “KeyboardIterrupt, Error in sys.excepthook”


        Adrien G.

  8. Adrien G says:


    I received everything and I make some tests since a few day : it’s working !!

    Now I want to add some panel controls, a file “modControls” exists, but it is not complete, is that correct ?

    The Arduino software seems clear and pretty easy to modify, but and the python script it’s not that clear to me. So, for an “estop-indicator”, what should I do ?

    In HAL2Arduino-0.5.py, add a command like :
    if command = 320:
    c[‘ioncontrol_estop-indicator’] = val

    and after :
    if codesAcceptes.find(“320″) > -1:
    if simulation == True
    printf “creating : ioncontrol_estop-indicator”
    print “makePins: creating: %r % pinLabel
    Is that ok ?

    After, I should add something in custom.hal, but everything I have tried provokes an “KeyboardIterrupt, Error in sys.excepthook”


    Adrien G.

  9. Dimitris says:

    Hi Dewy,congratulations for your project..! I used emc2arduino and its worked fine, now i tried with hal2arduino, i put everything together,emc start, but i dont get anything when moving the axis. And arduino’s tx-rx dont blink at all,like not communicating. Witch commands should i enable for axis movement? Or something else maybe.. thanks and sorry for my english..

    • dewy721 says:

      Hello Dimitris!🙂

      It sounds like the pc/arduino handshake is failing.

      There is likely one of four reasons for this:

      1. Your linux machine is not setup for playing with arduinos. (Not likely since you said that you used EMC2Arduino successfully already.)

      2. Your old EMC2Arduino install is conflicting with you new install.
      Check your custom.hal file for:
      loadusr -Wn arduino 9axis_arduino
      If present, then your trying to load linuxcnc with the old config files. Unfortunately, that won’t work!

      3. Check that your arduino is on comport:
      HAL2Arduino scans the first ten ports of each looking for a connection.
      However you can change it on lines 1976 or 1980 in the HAL2Arduino-0.5.py file.

      4. Unlikely, but it might just be slow hardware. If this is the case, take a look at the HAL2Arduino-0.5.py file with a ‘LINUX’ (as in not a windows) text editor.
      On line 121 you should see:
      ser = Serial(port, 115200) #, timeout=0.06)

      The timeout of 0.06 usually works reliably but if you have a sleepy Arduino (or PC for that matter) it may need to be set is little higher. Like 0.07 or 0.08 etc. Beware this data speed down very easily, so adjust slowly.

      Let me know if that works for you.

      • Dimitris says:

        Hi Dewy..! Thanks for the reply. I tried with version 4 and it worked fine. I’ll try again with version 5 and i’ll post the results. And of course hal2arduino is much better than emc2arduino, especially in the very smoother and faster stepper movement.. Congratulations again..!!

  10. Vitor says:

    Hi dewy,
    Thanks for sharing this amazing code!
    I’m making a CNC Lathe with it, but I’m having some problems. I’ve changed the files to leave it only with X and Z, but the infarce of the program doesn’t looks like a lathe and it still have the 3 Axis and when I try to home the axis a warning pops up with a error on joint 2.
    Can you help me?
    Once again Thanks for all!!!

    • dewy721 says:

      Hey Vitor!

      For your ‘error on joint 2’:
      Sounds like the the Z axis limit switch is set to the opposite polarity, by default it looks for a ‘normally closed’ switch to trigger when opened. The easiest way to solve it is to move the wire connected to the switch’s N.O. terminal to the N.C. terminal. (Or was it the other way around?)

      As for changing the interface to look more like a lathe, for that you’d benefit from adding
      LATHE = 1
      to the [DISPLAY]
      section of your .ini file.
      At least, that’s what page-14 of the LinuxCNC integrator’s guide says to do.

  11. powercycle says:

    I’m trying your version 0.5, but I can’t seem to get it to move the motors. I don’t have any limit switches connected up, maybe that is the problem?

    I know it sees the Arduino board because if I unplug the USB cable, it fails to load linuxcnc.

    What steps can I take to figure out?

    Also, I’ve loaded GRBL to the arduino board and it works as expected.

    I’m using the Protoneer shield with A4988 drivers…are the pins different maybe?

    That is the next thing I’m going to try, but I’m still learning all this stuff.

    Thanks for any guidance.

    • dewy721 says:

      HAL2Arduino can fake having switches. But it is HIGHLY recommended that you at least use some real homing switches. Without them your machine has no way to know where it really is. If you’re low on unused pins you can gang all those switches onto just one pin and get away with it.

      Yes, the pins are different. By default the code uses pins 32~43 (Arduino Mega/Due).
      Fear not though!🙂 You can still use your shield as well.

      Here’s how:
      Using the Arduino IDE program, open the HAL2Arduino_0_5.ino file.
      Click on the tab labeled ‘modAccelStepper’ then scroll down to line 46.
      You should see…
      AccelStepper stprX(1, 41, 43); //type, stepPin, dirPin

      Change ’41’ to your X-step pin, and ’43’ to your X-dir pin.
      Repeat the process for the rest of your steppers.

      Look around at the rest of the tabs and setup any other pins you may need as well.

      Let me know if you need more help with it.🙂

  12. powercycle says:

    OK. I’ll give that a shot…when I was reading through the comments, I got the impression that I didn’t need modAccelStepper, so I changed that one to false.

    Also, I’m using the live version of the linuxcnc CD (2.5) and adding the stuff for the Arduino IDE seems to have broke it, so I will probably have to re-install. What a bummer.

    I will add the switches at some point, but for now, I’m just testing that I have everything hooked up to the motors at this point, so nothing will get damaged

    At least I was on the right track!! I’ll report back the changes I made for others….thanks for the response..

    Two more things: what command can I use to make the X motor step and how do I disable the limit switches so it doesn’t think they are active because none exist?


  13. dewy721 says:

    Well, to get the steppers to move you can run linuxcnc and either use the jog commands -or- click on the ‘MDI’ tab and type in G0 X2 press enter and if the E-Stop is off and power button is on. It should move.

    As far as the limit switches go, poke around with the modLimSwitch tab in the HAL2Arduino_0_5.ino’ file.

  14. powercycle says:

    As far as moving the motor…If I directly connect to the arduino, what is the command needed to move the X axis? I’m referring to the commands formatted like ;

    That way I can ensure that the pins are configured as they should be without having to hassle with the linuxcnc software.

    This will help in isolating where the problem lies….

    Thanks for the help.

  15. powercycle says:

    I guess it stripped my formatting: 200 0 1 201;

    I don’t know if that is a valid command, but just wanted to make sure it was clear I was looking for…


  16. dewy721 says:

    OH! I see, you mean send it a raw serial command. In THAT case….

    Fist you have to give it the ‘Green Light’ command: 996 0 0 996;
    Then you can issue a move command with: 224 0 10 234; (move 10 inch/mm/revs/etc.)

    PS. the command ‘200’ is accepted but has no code for it yet.

  17. powercycle says:

    OK, when I do this I get back nothing for the ‘Green Light’ and 997 0 1 998; for the move command.

    Since things didn’t move, I’m assuming it is some sort of error code.


  18. dewy721 says:

    Are your steppers powered-up and holding a position or can you move them fairly easily?
    (I’m trying to sort out if your stepper driver is enabled.)

  19. powercycle says:

    I can move them…I wondered about that….how do we ensure they get enabled? As a reminder it is an A4988 driver.

    • Duane Bishop says:

      Check the modAccelStepper section again: Line 14: #define enablePins false change to true

      Then on line 151: look for stprX.setEnablePin(39); change ’39’ to the enable pin of your driver.

  20. powercycle says:

    We are getting closer. Motor is held, but 224 command does not make it move.

    Also, shaft of motor is a bit warm, is that normal?

    Thanks so much for sticking with me on this.

  21. dewy721 says:

    You gotta issue a 996 0 0 996; command before anything will move.

  22. powercycle says:

    Yeah, have been doing that.

    996 0 0 996;
    224 0 10 234;

    no movement.

    Only thing I can think of at the moment is that the pins I’ve chosen aren’t correct.

    I got the from the grbl code here https://github.com/grbl/grbl/blob/5edf078065de9a5af058f75f17c822e3944698db/cpu_map.h


    Maybe I need to be inverting them?

  23. dewy721 says:

    Doh! I just remembered. Since LinuxCNC moves in 1/10000th inch/mm, “224 0 10 234;” actually equals 0.0001 in/mm. You won’t see much movement at all.

    So try, 224 0 10000 10224;
    Sorry about that. <:)

    Oh, and yes. The motor can be warm but not hot, if you can firmly grab and hold the body of the motor for more than 3 seconds it actually ok. Hotter than 170F and the magnets degrade. The driver chip runs pretty much the same but 10 degrees warmer than the motor.

    Best practice is to use as little power as needed to reliably get the work done.

  24. powercycle says:

    Didn’t seem to matter. Still no movement.

    This implies that a pin needs to be high to move it, is that the default?


    Or do I have step and direction backwards possibly?

    Any other thoughts?

    Again, your time is appreciated and I will write something up when it gets figured out.

  25. dewy721 says:

    Actually that sketch has the enable pin held low, always low.

    Besides, if the motor is warm to the touch and holds a position then its enabled.

    Hmm, double-triple check that what you believe is the X stepper, is actually the board’s X stepper driver.

    As far as helping goes, don’t sweat it. SO many people helped me along the way too.😉
    However, it’s bed time here. (Work and all.) I’ll check in tomorrow.

  26. powercycle says:

    It is the X axis for GRBL, maybe that is a bad assumption here?

    I’ll still double check everything….maybe even start over, just because I’ve been fooling around and could have inadverdantly turned something on/off.

    I’ll test GRBL one more time to ensure I haven’t broken something with the electronics.

    Talk with you later.

  27. powercycle says:

    OK. Rebuilding things made it work. I’m going to diff the files to see what might have caused my issue.

    Maybe we can make a README for the Protoneer board?

    Thanks so much. Now I just have to make linuxcnc work.

    One step closer!

  28. powercycle says:

    Well, now I’m getting Hal2arduino.axis.0.joint-pos-cmd does not exist. Given that we have tested the joint move command (224) directly, something else must be broken in my config files.

    Suggestions on where to look and what to look for?

    I’m so close I can almost taste it….


  29. powercycle says:

    Nevermind, figured it out on my own…the custom.hal file that is included in the zip file doesn’t match up with the name of the loaded user module, which is HAL-2-Arduino.

    All the entries in the custom.hal say Hal2Arduino.

    Notice the CAPS letters for HAL and no dashes.

  30. dewy721 says:

    Yep. You got it!😀

  31. powercycle says:

    OK. So now that linuxcnc starts, it still doesn’t control the motor. I tried it both with the limit switches in the custom.hal file and without.

    I can home it OK.

    Any thoughts on things to try? I double checked that it worked in “raw” mode and it works as expected.

  32. powercycle says:

    So I turned on debugging for linuxcnc and noticed that when I send it a ‘G0 X1.0’ command from the MDI screen to get the axis to move, it looks to be sending a 220 command instead of 224 like I was expecting.

    I also noticed that 220 isn’t listed as one of the possible accepted commands in the firmware code.

    I’m using linuxcnc version 2.5.

    Thoughts on how to go about addressing this?

  33. dewy721 says:

    220, hmm. Odd, that’s the place marker for “axis.N.jog-counts”.

    My setup has the following for linking the X-axis movement:

    (from ‘my-mill.hal’)
    net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd

    (from ‘custom.hal’)
    net xpos-cmd Hal2Arduino.axis_0_joint-pos-cmd

  34. powercycle says:

    Mine too. except mine really says HAL-2-Arduino.axis_0_joint-pos-cmd if it says what your says it won’t work.

    The debug output is saying:

    Issuing EMC_TRAJ_LINEAR_MOVE (220, …etc

    What version of linuxcnc are you using?

  35. powercycle says:

    Would you be willing to share the debug output from your machine when issuing G0 X1.0?

    It seems likely that we have some setting that is different and seeing the output from your setup might help me discover the problem.

    So, it seems like the firmware is working as it should, now I just need to get linuxcnc to issue the right command to the HAL-2-Arduino module.

    If you have other thoughts, I’m open to whatever suggestions you might provide.

  36. powercycle says:

    Any chance you would share how to find out what the card is actually receiving as a command?

    I tried adding a print command on line 167 of the python script, but it only reported one time at the very beginning during the initialization of the serial port.

    I’m assuming because the process detaches and no longer reports to the linuxcnc debug output.

    Do you have any thoughts for that?

    Thanks in advance for any help.

  37. powercycle says:

    Thought I would reach out again and ask for suggestions on debugging this issue.

    I’ve uncommented some of the print statements that you have in the code, but they don’t show when I run linuxcnc from the command line.

    I’m so close to making this work.

    Mike B.

    • dewy721 says:

      Sorry for the delay, life happens. Hmm, well. You ‘could’ try having the sub process echo the commands into to a text file. That would give you a line-by-line debug of what’s going on. Better yet… hold on just a sec… I’ll see if I can package up the last (as yet un-released) version I was working on for you to hack into.😉

  38. dewy721 says:

    Tada! Below you can grab the latest version I’ve been developing for the current project I’m collaborating on.
    This version is a lot faster than previous ones since it ditches the checksum that never gets used in the communication protocol.

    Link to files: (Version 0.6d)

    Link to current project I’m helping with: http://www.PocketNC.com

  39. powercycle says:

    OK! That worked!

    I’ll try to do some comparisons so I can maybe figure out the issue.

    I did notice that you changed some of the values for the steps per inch, etc…

    It is entirely possible that the values I was using on the MDI command line were too small to make stuff move on the older version.

    BTW, did you intend to leave out the PYVCP panel and the other custom entry from your files?

    I had to comment those two out in the .ini file to get things working.

    Thanks for the work.

    Would you accept a README for the Protoneer board? or maybe a patch file?

  40. powercycle says:

    Yes. I’m not an expert, but have an account and have participated with a few projects.

    • dewy721 says:

      Gimme a sec and I’ll commit a non-compressed copy that you can fork a branch from. I say ‘branch’ as my dev cycle is WAY too slow for most people, you’d be happier to make mods separately.

  41. tjmarch says:

    I would like to thank you for writing this code. I plan on using it along with Machinekit. I for one do not like the Begalbone approch and I think your Arduino code fills a nich that is needed. I want a full computer to work on and to do my drawings, plus create my gcode then use sim all from one machine with out cluttering up my workshop with a seperate machine to do each function. Then I can packup my laptop and take it with me on the road for I travel for my work. Plus have you priced a para port cable lately if you can find one. This is more economical than you think. I am making 7 stackable shields for my Mega which will be alot cheaper than buying pre-made motor drivers. I have also wrote one script file to setup a 32bit or 64bit computer with the needed packages to compile Machinekit on Ubuntu 14.04, Debian Wheezy and Linux Mint 17.1
    I have a few pictures and files I posted on Google drive of my progress will be posting moe tonight when I get out of work link below


  42. dewy721 says:

    Nicely documented readme file! Unfortunately, I don’t have time to read it thoroughly this evening. (Chicago-time)

    But I’d be interested in your end results! I’ve been tinkering with Machinekit as well, but in a different direction. Mostly the UI stuff for the moment, after the dust settles I plan on adding HAL2Arduino to it for some extra (user available) IO options.

    Keep me posted!🙂

  43. Quest says:


    I am trying to use HAL2Arduino_0_6d but can’t compile

    if enable usespindle :

    program.ino: In function ‘void sendSpindleIndexPulse(byte)’:
    program:7: error: a function-definition is not allowed here before ‘{‘ token
    program:518: error: expected ‘}’ at end of input
    a function-definition is not allowed here before ‘{‘ token

    error fixed if i change :
    void sendSpindleIndexPulse(byte axis){ // Low speed signaling ie: <600rpm
    void sendSpindleIndexPulse(byte axis){ // Low speed signaling ie: <600rpm

    If i disable #define useAccelStepper false , because i use DC motors with quadrature encoders, i got compile error :

    program.ino: In function 'void processCommand(long int, long int, long int)':
    program:214: error: 'stepsPerUnit' was not declared in this scope
    program:218: error: 'velocityTimer' was not declared in this scope
    program:219: error: 'avgDist' was not declared in this scope
    program:220: error: 'velocity' was not declared in this scope
    program:222: error: 'velocity' was not declared in this scope
    'stepsPerUnit' was not declared in this scope

    if i leave #define useAccelStepper true , it compiles but i want to disable to save space, because i dont use steppers. (tested version 0.5 with useAccelStepper false and compiles).

    How to fix this ?

    • Quest says:

      fixed it by removing command 226 :

      if(command == 226){

      #if stepperX
      #if stepperY
      #if stepperZ
      #if stepperA
      #if stepperB
      #if stepperC
      #if stepperU
      #if stepperV
      #if stepperW

      is there another fix ? is this command needed?

  44. I am thinking of using your hal2arduino to push the current x,y,z to three different 7 Segment displays to act sort of like a DRO on the mill.

    I am wondering what I can use or push from LinuxCNC to do this. I want to maintain my current parallel port setup as it functions well……but add in this ability to push the x,y,z data.

    Thanks for all your hard work!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: