AnemometerString[index] = '\0';
if ( InputChar == '\n')
AnemometerString[index] = '\0';
And, if it isn't? What is in AnemoterString[index] then?
if (index == 27)
{
strcpy(AnemometerString2, AnemometerString);
Suppose a byte got lost/corrupted? Expecting a specific number of values is not a good idea.
WindAngle = atof(StringPart2);
WindSpeed = atof(StringPart4);
It would be a good idea to make sure that StringPart2 and StringPart4 were valid pointers, first. Ditto for all the other pointers that you assume are valid.