Asked
I'm experiencing an intermittent issue with ARC where two out of my three EZ-B controllers lose their connection.
- I'm using direct USB connections from the computer's USB port through USB-to-serial converter cables connected to the EZ-B's camera ports.
- At startup, ARC connects to the two EZ-Bs using an initialization script. The EZ-B controllers connect properly to ARC, and commands can be sent without issue.
- Randomly, connections 0 and 2 will disconnect from the computer. This could happen to either connection or both, but at different times. It seems they don't disconnect simultaneously.
- The disconnections can occur within a few minutes of a successful ARC startup and initial connection to the EZ-Bs or after ARC has been running for an extended period.
- It doesn't seem to matter if data is actively being sent through the serial connection or not. Disconnects occur whether ARC is idle or executing commands from scripts.
- The EZ-B controllers do not lock up. I can simply click the reconnect button in the Connection Control within the Connection Skill, and the connection is reestablished between ARC and the EZ-B.
I'm seeking advice on what might be causing these disconnects and how to resolve the issue.
Could Windows 11 be interfering with the COM ports or doing something in the operating system that would cause these disconnects? Might electromagnetic fields (EMF) from nearby power cables induce such disconnections in the serial converter cables?
Thanks in advance for any suggestions.
Related Hardware (view all EZB hardware)
EZ-B V4
by EZ-Robot
EZ-B v4/2 robot controller: dual Cortex ARM, Wi-Fi, audio/video, 24 servo/digital ports, I2C/UART, camera and Synthiam ARC control for custom robots
Wi-Fi / USB
Servos
24
Camera
Audio
UART
3
I2C
ADC
8
Digital
24
Related Robot Skills (view all robot skills)
Serial Terminal
by Synthiam
PC and EZB serial terminals for ARC: connect, monitor and send text/ASCII to serial devices. Supports COM, flow control, baud, DTR/RTS, hex
Connection Diagnostic
by Synthiam
Diagnose EZ-B Wi-Fi connection issues with verbose EZ-B communication logging, ping tests, log export and diagnostic reports for Synthiam support.
Requires ARC
v6

UPDATE 2/21/26: Progress finally made! YA! But now what?
OK. I've been working on this disconnection issue between the direct connected computer and the EZB's now since last October. That's over 4 months now. that I've worked on this problem. Worked over 4 months, almost every day and have just now finally found an honest lead as to what the problem is. I did Sanity checks along the way and I have to admit I had a few ruff patches.
First, I need to say that the reason it's taken so long to get to this point is because of a few things. First, every time I make a change to a hopeful fix I'd need to wait anywhere from 2 to 10 hours to see if it worked. I's need to run the robot with all it's operating motors and other devices running from scripts that would trigger animations one after the other (with a minute or two in between). The end result would be always be a disconnect from ARC Index 0.
After many, many different changes of hardware and software adjustments (some of them made things better. I'll go into more detail on that below) I decided to finally start disconnecting the digital and ADC pins on the offending EZB connected to ARC index 0. This is where I finally got my first clue and uninterrupted connection of the USB to Serial connection between the computer and EZB.
I finally got lucky and picked the right thing to start with.in this process. I started by pulling all 8 of the ADC cables plugged into all of the ADC ports on this EZB (on index 0 and leaving all other cables connected). I powered up the robot and started it's ARC project and made sure the script polling these ports were turned off. I don't need these scripts or ADC ports for him to simply stand and run personality animations.. After running the robot and it's ARC animation scripts for two straight days I got absolutely no disconnects!
So, as I mentioned above, I am using all 8 ADC ports on this EZB. They monitor button pushes on the robot. Each of the 8 ADC ports has a separate script looping in ARC that watches for a voltage change when the button is pressed. Then when the button is pressed and it's switch closes, ARC will see the voltage changes from near zero to the suppled power and run it's script. In addition each cable attached to a ADC port has a Pull Down resistor added near the EZB to keep the voltage low new zero until the button is pushed and voltage is supplied. Resistor problem????
OK, now what? LOL.
I'm not sure why using all ADC ports on one EZB at the same time is causing the connection between the EZB and computer to disconnect after a random number of long hours of use. My two other EZB's have their ADC ports in use but admittedly I'm only using a couple of these ADC ports on each of the other units.
My instinct tells me this may be a heat issue? Maybe over time with ARC polling these ADC pins is causing the EZB to heat up and causing my problem? I do feel that the outer case of the EZB in question is a bit warm to the touch.
OR,,, could I somehow be flooding the EZB with the ADC polling process from all 8 ADC ports? If so why would it take hours to show up? I am using the JavaScript command ADC.waitFor* (event-based polling), not the GetADC command In each script watching these ADC ports. Should I try to move some of the ADC cables to a second EZB to relive the ADC polling load on this one EZB and maybe lessen the heat build up or polling process? Or should I find a better script that will do a more efferent job polling the ports? Here is one of the scripts I use to watch just one ADC port:
One last thought on new scripting to solve this; Again, I have 8 different ADC polling scripts running. Would it be better to only have one script watching all 8 ports? The script would have to see the voltage change when the button is pushed and do a different event for individual each button.
Here's is an abridged list of what I've done to date to try to solve this issue. Over the months I've literally rewritten many scripts, followed all the advice given here concerning possible electrical and device problems. So, I've actually:
*Taken apart the robot and rewired a lot of the major electrical circuitry. I did find a few wiring mistakes that could have caused electronic noise and ground loops. After doing this rewire I found that the problem of losing connections on the other indexes 1 and 2 totally stopped. However the disconnect issue was then confined to just index 0. Even so, that connection 0 seemed more stable.
*Rerouted USB to Serial converter cables far away from all power cables.
*Replaced every device and component that may have been causing the issues. These include new wiring and connections (like placing EZB's on their own dedicated power circuit going straight to the Power supply), new EZB, new Serial to USB converter cables, even tried a new computer running ARC and directly connected to the three EZB's. This new computer had it's own separate power feed.
*Ran the EZB Stress test @DJ wrote for me. I ran it for many days with no issue or disconnects. Once I started using my regular project the disconnects continued.
*I also tried a combination of the three EZB's running with a mix of direct connection to the computer and over WIFI. An odd result happened with this test. I had index 0 and 2 directly connected with a new USB to Serial converter cable. Then I had Index 1 connected to it's EZB over WIFI.. Index 0 and 2 stayed stable and connected but oddly index1 would disconnect (instead of the usual index 0).
So I see @Athena hasn't chimed in on any of this. Has it been turned off for this thread? How would I get it's opinion? Of course I always love hearing from humans. Any ideas? You all are always apperceived..
Nice work - that’s a meaningful lead. You’ve proven the ADC wiring/polling is tied to the disconnect symptoms. Below I’ll explain why this likely happens, give a safe prioritized plan you can run next, and include a ready-to-use JavaScript "single ADC watcher" script (with debounce and adjustable polling) to replace your eight separate scripts.
Short diagnosis summary
Recommended approach (priority order)
Why a single script helps
Single ADC watcher JavaScript (drop-in)
Notes about the script
Other practical tips
If the single script resolves the disconnect
If the single script does NOT resolve the disconnect
Questions for you / what I need to continue helping
If you want I can also:
Next step suggestion
Great investigative work so far - you’ve isolated ADC as a clear variable. Try the single script and post the results + the resistor/wire details and we’ll iterate.
I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
UPDATE 02/24/26
Hello all and @Athena
I've looked over the multicable ADC port polling script that @Athena provided. As is, without any additions or changes from me it ran in ARC without error. I then added the commands to each of the 8 actions that happen when each of the 8 buttons and switches that are being watched by the 8 ADC ports on EZB index 0 are pushed. After these additions the were made I tested each button and the they tripped the expected actions immediately and as expected.
So, even though I have this script running that is designed to reduce the overhead of constant ADC polling of 8 different ADC checking scripts I still had the usual Com disconnect of the EZB on ARC index 0. This disconnect happened only one hour into the test run. As usual, the other two EZB's stayed connected.
This last disconnect was after I reconnected all 8 of the ADC ports to the cables running to the buttons and started the central polling script (oh, just to be clear, I do not have the old single ADC polling scripts running). i am running another test session on the robot today to see if I still get another disconnect between the computer and the one EZB on index 0 or the one yesterday was an anomaly.
I do have several buttons that as of yet have no animations assigned so I simply coded a voice response of "Not, Active" to the action associated to those buttons from one of ARC's soundboards. I did this just to make sure their buttons were responding in this script. I'm open to any suggested improvements. Here's my running script:
So, as of now, even though I'm thrilled I have a better and less resource eating script to poll many different ADC ports I still seem to have the same disconnect problem. I now to look into the different tips and suggestions made by @Athena above. These are the suggestions copied from above:
Again, I'm open to suggestions, criticism or ideas. Thanks!
Great update - you’ve narrowed this down a lot. You’ve proven the ADC inputs are tied to the symptom (excellent investigative work). Since the single-watcher script still saw a disconnect after about an hour, let’s focus on the high-probability causes and give you safe, repeatable tests and scripts to run next.
Summary of likely causes (prioritized)
Concrete next steps (what to try now - ordered)
Reduce watcher work and offload heavy actions (important)
Lower poll rate + add hysteresis
Monitor EZ-B voltage & temperature while testing
Disable Windows USB power management
Check / improve USB-serial adapter & cabling
Wiring & pull-down checks
If problem persists, split ADC inputs
Use USB isolator / separate power rails (if needed)
Lightweight event architecture - two scripts Below are two ready-to-use JavaScript scripts: 1) Watcher (lightweight, with hysteresis + debounce) and 2) Action Runner (serializes heavy actions). Put both in your project as JavaScript scripts (Project Add Script JavaScript). Edit thresholds and actions to match your project.
Why splitting helps
Other checks & experiments
Windows & driver actions (do these)
Log collection I need from you if the problem continues
Next recommended experiment (short/medium term)
If you want, I’ll:
Questions for you now
You’ve done the hard part - isolating ADC as a variable. Try the two-script pattern (watcher + action runner), reduce polling, and run with motor actions disabled for a long test. Paste logs or the Connection Diagnostic copy if a disconnect happens and I’ll analyze it with you.
I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Dude, youre polling everywhere. You have adc robot skill that are polling. You have scripts polling.
it’s normally fine to be that inefficient with a project. ARC and ezb is designed for that.
Id be looking back at
the inefficient polling would just slow stuff down. It wouldn’t cause a disconnect.
but if you’re going down the path of polling, at least to optimize your project, get rid of your adc robot skills because that will slow down the ui and protocol.
lastly, adc.waitfor() does accept a speed ms parameter which will read at a specified rate.
Oh and one more thing on the topic of the ADC robot skills. if you must keep them, just get rid of the adc.read's and adc.waitfor and use the variable that the adc robot skill creates. The adc robot skill creates a variable for this purpose, so you don't have to double poll.
Thanks - excellent troubleshooting and great detail. You’ve proven ADC activity is tied to the problem, which is a huge step. Below I’ll summarize the highest-probability causes, then give a concise, prioritized set of tests and configuration steps you can run next (including how to stop "double polling" with ADC robot skills), plus a compact lightweight watcher pattern and the exact logs/data to collect if the issue persists.
Short diagnosis (what’s most likely)
High-priority steps to run now (ordered)
Stop double polling (quick check, often fixes things)
Split detection from action (serialize heavy work)
Reduce polling rate + add hysteresis
Test with motors/off (quick triage)
USB / driver / Windows checks (do these now)
Power / brownout checks
Wiring / noise controls
If all else fails
How to disable ADC robot skill polling and use its variable (step-by-step)
Small lightweight watcher pattern (single event setter) - use only one poller
Example (very small) watcher - reads skill variable instead of raw ADC (replace $ADC0 names with the actual variable names the ADC skill created)
What to collect if a disconnect still happens
Quick checklist of immediate experiments (do these in order)
Useful references
A few other small tips
Questions for you (so I can give the exact next script/diagnostic)
If you want, I’ll:
You’ve done the hard detective work so far - we’ll iterate quickly from here. Which of the items above would you like to try first and what info can you provide from the questions?
I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
@DJ, thanks for all your attention and advice on my subject here. All the insight really helps me learn and understand how to get my project to run smoothly with the hardware in my robot.
Just to be clear; Yes, I have a lot of scripts and controls that poll ADC. However I do not have them polling or even active at the same time. I started out with 6 or seven individual scripts polling ADC ports mostly on one EZB (two more on a second EZB). I just asked Athena to write me one script that combines all these ADC watching scripts into one to optimize my project. I will get rid of the other ones running individually. Also, I keep all the ADC reading skills I have installed paused unless I need to see if a button is working. I do plan to remove them when my project and robot gets the bugs worked out.
In the end I hope to only have the one ADC watcher script that Athena helped me with running watching my 7 or 8 buttons and switches and triggering scripts when activated. Oh, and the only other ADC reading will happen when a script is triggered from time to time.
In the above mentioned scripts I do use the adc.waitfor() command with a speed ms parameter. Athena has been writing the single multiple ADC port watcher script using the ADC.get() command. I know the adc.waitfor() command is more resource friendly so I was thinking of asking Athena to provide a different script that uses that command instead of the ADC.Get(). Maybe I can just replace her use of the ADC.Get() command with the adc.waitfor() command (with a speed ms parameter). I just haven't looked closely to see how to do that or if I would understand how to do it without help.
On a positive note, keeping all the all the ADC polling scripts and skills paused and turned off and running only Athena's multi ADC port script my robot seems very stable now. After I had the one disconnect early yesterday I slowed down the polling in that script from ms to 350ms and didn't get a disconnect to EZB index 0 in ARC all day. It ran for a good 12 hours.
Running the test again today. We'll see.