Furthermore it doesn't send the right morsekode:
instead of a ( ._) it sends b (- . . ) that can be corected by change this line
_i = ((byte) c) - 33;
to this:
_i = ((byte) c) - 34;
But then again it sends different morsecode for d and D ... and so on
Maybe the problems you see is a memory issue, I just tried it on a UNO it kept on running for atleast 10 minutes