SoftwareSerial

I'm glad it's now working, but just one point that might come back to bite you.
Is this really what you intended here:-

if (!bno.begin())
    delay(1000);
bno.setExtCrystalUse(true);

If 'bno.begin()' fails, wait one second, then continue as if it had succeeded?