Arduino sending data with checksum CRC16

Below, you mix Serial.print() and Serial.write(). Stop doing that.

  for (byte i = 0; i < characters; i++)
  {
    Serial.write(buffer[i]);
    Serial.print("gesendet: ");
    Serial.println(buffer[i]);
  }

The squares on the monitor result from the unprintable characters you send to it using Serial.write(), as shown below:

  Serial.write('\0');
  Serial.write(buffer[crcIndex]);
  //Serial.print("gesendet CRC: ");
  //Serial.println(buffer[crcIndex],HEX);
  Serial.write(buffer[crcIndex2]);
  //Serial.print("gesendet CRC: ");
  //Serial.println(buffer[crcIndex2],HEX);