아두이노 tofloat 잘못된 값

within의 이미지

void loop()
{ 
  char read_data[100];
  int Length =0;
 
  Length = mySerial.readBytes(read_data,9);
 
  if (Length > 0) {
    String s_data;
 
    for (int i=0; i<Length; i++) {
    s_data += read_data[i];
  }
   float f_data = s_data.toFloat();
   Serial.println(f_data);
  }
}

저울과 시리얼 통신을 하여 값을 받아오는 코드입니다.
s_data(string형식)로 print를 하면 값을 제대로 받아오는데 f_data(float형식)으로 받아오면 0.38이라고 정상적인 값이 뜨다가 중간중간 38.00이라고 계속 뜨네여....
원인이랑 해결방법을 알수있을까여??

라스코니의 이미지

Length 값이 어떻게 되는데 같이 찍어보세요.

Anti-Lock의 이미지

s_data 값을 같이 찍어보세요.
mySerial.readBytes 호출 후, read_data 에 예상치 못한 값이 들어있을 수 있습니다.

타임아웃 값이 적절한지 확인도 해보시구요.
https://www.arduino.cc/reference/ko/language/functions/communication/serial/settimeout/

또는, 루프가 늦어서.. 저울에서 보내는 데이터가 다 처리되지 못하고 쌓여서 문제가 될수도 있습니다.

사족으로...
저는 C 사용자라.. strtof를 사용하지 싶습니다.

size_t Length = mySerial.readBytes(read_data, 9);
if (Length > 0) {
    read_data[Length] = '\0';
    float f_data = strtof(read_data, NULL);
}

그런데.. Serial.parseFloat 함수도 있군요
https://www.arduino.cc/reference/en/language/functions/communication/serial/parsefloat/