Hey everyone,
My friend and I are building an ROV. Our current setup is a computer sending data to the topside Fathom-S USB port, then the topside board sending that data down to the Fathom-S ROV board via ethernet cable, then the ROV board sending serial data to an Arduino MEGA as this diagram shows.
However, when we output serial data through the computer, the MEGA was not getting the signal. Are we right in assuming that’s how it should work? Should we use an UNO rather than a MEGA? Should we just forget it and strictly use the Fathom-S boards for our camera with just a USB extender cable to communicate between the MEGA and the computer?
I can take pictures of our setup if necessary.
Thanks,
Matt
Hi Matt,
This setup should work well. Please send some pictures of how things are wired up and we’ll figure it out.
-Rusty
Hi Rusty,
I did some more messing around and isolated the problem to a software issue rather than a wiring one. It seems that, while connected to the Fathom-S, the Mega can execute Serial.available() accurately. However, it does not seem to get an accurate result (or maybe no result at all) from Serial.read(). I will do some more testing.
Additionally, while hooked up to the Fathom boards, my Mega’s RX and TX lights aren’t working correctly, but I don’t have that problem when it is hooked up directly to a computer.
Thanks,
Matt
Matt,
Okay. That’s interesting. We’ve been able to use the Fathom-S boards with an Arduino through 1000m of tether at pretty high serial speeds. I’m not sure what might be happening here. I didn’t notice whether the RX/TX lights worked in our tests.
Let me know what you find in further testing.
-Rusty
Hi Rusty,
We figured it out! First of all, the problem with Serial.read() was my fault–I forgot about subtracting ‘0’ from bytes being sent via the Arduino console.
Our other problem was that our Arduino program was focusing on getting chunks of sixteen bytes, corresponding to the set of data our controller was sending it. Over the tether, we were sending hundreds of bytes a second, and one or two wouldn’t make it. That offset the pattern we were receiving, so, for example, the byte corresponding to the x-axis position of the left thumbstick would be confused for the one corresponding to its y-axis position, which would be confused for–you get the idea. I was able to write some Arduino to sort that out.
Thanks for all your help,
Matt