WireAvailable is not working (I2C)

 while(Wire.available() == 0);    // slave may send less than requested

Certainly sounds like the slave is sending 0 bytes, and you are in an infinite loop waiting for more.

Some real details on what is connected to what, with URLs for those things, would certainly be in order.