Receiced serial data is wrong

Because you are 100% depending on timing, instead of delimiter symbols like comma or end-of-line, to separate the data fields. That forces the receiving code to guess where a message begins and ends. Serial data is asynchronous. Consider using separators and reading with readStringUntil().