We wanted to build something technically cool, but with no practical purpose.
What it does
It turns the camera's "torch mode" on and off up to five times a second. A companion app on another phone records this flashing and converts it back to a bitstream. A homebrewed mesh network, sending pictures of delicious foods (like mashed potatoes) without requiring WiFi. Meshed Potatoes.
How We built it
We created an Android app that takes an image on your phone and turns it into a sequence of toggled camera flashes. We created an iOS app that can film these camera flashes, convert it back into an image, and then display the image. Technically, this is cross-platform.
Challenges We ran into
Data has a tendency to get misaligned when you're communicating thousands of bytes through a camera, so we had to implement automatic error correction for when clock cycles get slightly out of synchronization.
Accomplishments that We're proud of
We did several tests with 8x8 images (384 bits without overhead, approx. 400 with) and found zero errors across four tests of different 8x8 icons. We're proud that this error rate is so low, considering that millisecond timing errors can accumulate over hundreds of bit communications between two mobile devices.
What We learned
Java is easier than Swift. Sending is easier than receiving. Control+Y in Android Studio, instead of un-undoing, deletes the line. This caused a surprising amount of errors and lost time, because we didn't notice it was happening.
What's next for Meshed Potatoes
The next step is to add CloudSight, a computer vision library that will allow us to prevent users from sending pictures of things that aren't mashed potatoes.