Shop Learn P1 Docs P2 Docs Events
Arlo with Eddie board — Parallax Forums

Arlo with Eddie board


I bought an Arlo some years ago where the Eddie controller card was still included.

I'm trying to use it with the Firmware that is available here:

However, I don't really get it to work. E.g. the command TURN doesn't do as I understand it should.

When trying the example in the Firmware documentation:

Should turn the robot -271 degrees but it turns ~90 degrees. However, when trying

TURN 005A 64
i.e. turning 90 degrees with the speed of 100 pos/s everything works fine. The next confusing thing is that

TURN 005A 14
i.e. 90 degrees with 20 pos/s, doesn't work (only turns ~30 degrees).

Am I missing something here?


  • I second using the archive Publison posted.

    I didn't have an Eddie board to test the software I wrote. I used an external H-bridge to simulate my guess of how the Eddie board would behave.

    That said, I'll be glad to try to get the new version of the firmware compatible with the Eddie board.
  • Great! What can I do to help?
  • I'll dust off my Arlo and connect the appropriate hardware. I'll try out the commands you listed and see what my robot does.
  • I've been familiarizing myself with the Eddie/Arlo code again.
    I my Arlo hardware up and running using a Quickstart board with a dual MC33926 h-bridge.
    One of the things I had forgotten about was the way the code stops the motors when there hasn't been any UART command for one second. To change this use the command:
    WATCH 0

    This turns off the internal kill switch. You can experiment with other values once you get your robot up and running.

    I personally prefer to use decimal based commands. The following commands will cause the program to accept and output decimal values rather than hexadecimal.
    DECIN 1
    DECOUT 1

    I changed line 76 of the header to:

    The constant had previously been set to one which works with the HB-25 motor controllers but not the MC33926 h-bridge.

    Type the following commands and count the number of times your robot rotates in place.
    WATCH 0
    DECIN 1
    DECOUT 1
    TURN 3600 50

    The robot should rotate ten times. Make sure to note the start orientation and compare it with the final orientation. If the final orientation is different than the initial orientation, we may need to adjust some of the constants.

    As a debug aid, I included debug statements in the code. To activate the debug feature use the following command:
    DEBUG 4

    The above command will provide the greatest debug output. A lower value will result is less information being sent to the terminal. Using a parameter of zero with the DEBUG command will turn the debugging back off.

    You can change back to hexadecimal input with the following:
    DECIN 0
    DECOUT 0

    A reset or power cycle will also switch back to hexadecimal mode.

    Now that I have my hardware hooked up, I should be in a better position to answer your questions.
  • This absolutely did the trick!

    Thank you so much for all your help!
  • Duane DegnDuane Degn Posts: 10,583
    edited 2020-01-20 22:48
    Hoffa sent an email requesting assistance with the PING and related commands. With his permission, here's a portion of the email.
    I have stumbled into a new one that I cannot solve. When using a Ping-sensor the firmware says that this will be check continuously and the command PING will give the array of distances.
    However, When starting the firmware the distance is only measured one to never be updated again.
    I have tried to run the command PNGP 0, but this doesn't seem to work.
    When running e.g. PNGD 10, the PING measures once more and then stop.
    Also, when running PNGP 1 the whole firmware seems to lock and no further command is possible.
    Any ideas?

    It took me a bit to get up to speed with the Ping code but I think I'm starting to understand some of the trouble. One of the problems with the present code is only two Ping sensors could be used without changing the constant "PINGS_IN_USE" in the header. I've changed to to allow "MAX_ALLOWED_PINGS" which is set to 10 rather than 2.

    Many Ping objects, including the one used in this firmware, have an issue if no Ping sensor is connected. In these cases, the code will hang as it waits for the Ping's pin to change state. I believe in an attempt to watch for a possible hanging cog, I included the variable "pingCount". This variable is incremented each time a Ping sensor is read. This variable would allow one to see if the Ping monitoring cog was blocked. Unfortunately I didn't include a way for the user to monitor this value. The attached code adds the command "PNGC". This returns the value of the pingCount variable.

    By default, two Ping sensors are assumed in use. If only one sensor is used, the SPNG command should be used to set an appropriate pin mask. For example, if a Ping sensor is only used on pin #0 use the command "SPNG 1".

    I haven't finished my investigations why PNGP (pause Ping monitoring) causes the firmware to lockup. I'll report back here when I figure this out.

    I have my Ping sensors mounted on pan/tilt mechanism. In order to position these devices I added the "SERVO" command to the firmware.
    SERVO <pin> <pulse length>
    The parameter pulse length is in microseconds.

    It's been a lot of fun revisiting this project. Feel free to continue asking any questions you might have.

    Edit: Added the zip file.
Sign In or Register to comment.