The problem would be if this communication interrupts the Arduino when it’s in the middle of writing to the NeoPixel strips. Every time it completes a cycle of taking a sample and performing its DSP magic, it could transmit this data to the Arduino. One thing I could do is to make the other device the master. Both of these activities can be implemented asynchronously to each other. On the one hand, we have the Arduino working on its cunning display effects and driving the NeoPixel strips on the other hand, we have the other device sampling the audio stream and extracting the spectrum data. Things are a little different in the case of my BADASS display, in which both of the devices are intelligent. Having said this, all of my usage thus far has involved an intelligent master (my Arduino) communicating with relatively dumb slaves. I use it to communicate among my Arduino and my RTC (real time clock), two motor controller shields, and my RGB LCD shield, all of which came from those little scamps at. I’ve been using I2C quite a lot recently in my Inamorata Prognostication Engine project. The underlying mechanism is quite “interesting,” but - as users - we don’t have to worry about it, because everything is handled in hardware and/or software. Following an acknowledgement from the slave, the master starts to transmit or receive data. The master signals that a communication is about to begin, then it transmits the address of the slave with which it wishes to communicate. Whichever device initiates a data transfer on the bus is considered to be the master at that time, while all of the others become slaves. In this case, each device connected to the I2C bus has its own unique address.
I2C, which was developed in 1982, is a multi-master protocol that requires only two signal lines - SCL (serial clock) and SDA (serial data) - both of which are bidirectional. A clock signal called SCLK is sent from the master to all of the slaves a common data signal called MOSI (master-out, slave-in) is used to communicate data from the master to all of the slaves a second common data signal called MISO (master-in, slave-out) is used to communicate data from all of the slaves to the master and then there are separate SS (slave-select) signals for each of the slaves, thereby allowing the master to specify with which slave it wishes to communicate. SPI, which dates as far back as 1979, is a single-master protocol, which means that one central (master) device is in charge of initiating all communication with one or more slaves.