I2C locking with any mor than 3 bytes sent

I have attempted significant delays (3ms) after the Wire.read()s thinking slower might be better.

Adding delays will make things much, much worse. Using delay() inside an ISR is not recommended, and is quite likely to hang the code as it waits for the time to elapse, which it won't notice because the timer is not checked inside an ISR.

Once you are in the receiveEvent all the data is available. You don't need to do Wire.available, you don't need to delay. It's all there waiting in the Wire buffer.

However as I said above you can't do serial prints ... well you can, if you don't mind the program hanging. :wink: