We managed to develop a functioning communication system between the Arduinos both in hardware and in software, ensuring the viability of projects based on visible light communication to realize smart tags.
We found ourselves struggling mostly with the hardware side of the project, since Arduino requires a very stable digital signal as a input to properly decode the edges. In particular it was difficult to shape the signal in a square wave because the operational amplifiers used where not rail-to-rail, meaning the output couldn't reach the amplitude of the voltage source. The rail-to-rail version available in our laboratory didn't have enough bandwith to guarantee the proper gain at the frequency we needed. We also had to "clean" the signal from the noise so we employed capacitors on the outputs of both the OpAmps and the Hex Inverter as we expeimentally found the noise was mainly high frequency and relatively big capacitors act as good enough low pass filters. Software side we didn't have many issues, but one thing that required a bit of work was the proper count of the edges at the input using the interrupts. Arduino acted very unreliably with how it handles the count of interrupts and the software operations it needs to perform between each edge so we had to take that into account and program a series of fail-safes to ensure the proper progress of the receiving firmware.
This was merely a prototype, a possible future development could be the scaling of both the receiving and transmitting circuit so they can be integrated into a custom chip with the Arduino CPU in order to closely resemble a smart tag. Another advised upgrade is the use of operational amplifiers better suited for this purpose ie. higher GBW and rail-to-rail. The whole system can be implemented in a network infrastructure so the transmitter could be controlled via a web server accessible with a PC or a smartphone.