The datasheet clearly says that the CO2 level is 2000x(th-2ms)/(th+tl+4ms), so I think here it should say 2000 too. At least that resulted in way better results for me.
Prevent "...Status maybe not OK.." from always being printed when debug is on.
Changed the is !isReady check to isPreHeating when getting the latest temperature. The isReady check prevents the function from returing the pre stored temperature within MHZxxx_RESPONSE_TIME after the UART data has been requested. This is an unnecessary restriction.
Instead of just creating an issue that the library uses a lot of memory, I wanted to save you some work instead.
I have not tested this code, but i have double checked it.