Serial.write와 Serial.print의 차이점은 무엇입니까? 그리고 그들은 언제 사용됩니까?


26

Serial.write와 Serial.print의 차이점은 무엇입니까? 그리고 그들은 언제 사용됩니까?
둘 다 직렬 모니터에 인쇄하는 데 사용되었습니다. 실제 차이점은 무엇입니까?


bpinhosilva의 훌륭한 설명! 당신은 내가 지금 매우 어려움을 겪고 있었던 것을 이해하도록 도와주었습니다.
로리

답변:


19

의 아두 이노 사이트에서 Serial.writeSerial.print :

Serial.write ()

이진 데이터를 직렬 포트에 씁니다. 이 데이터는 바이트 또는 일련의 바이트로 전송됩니다. 숫자의 숫자를 나타내는 문자를 보내려면 print () 함수를 대신 사용하십시오.

Serial.print ()

사람이 읽을 수있는 ASCII 텍스트로 직렬 포트에 데이터를 인쇄합니다.


17

Serial.write는 지구에 가깝고 간단하고 빠르며 한 번에 1 바이트 씩 이진으로 대화합니다. 예:

Serial.write(0x45);   // will write 0100 0101 to the cable

반면에 Serial.print는 더 다재다능합니다 .ASCII에서 바이너리로 변환하고 BIN / HEX / OCT / DEC로 변환 할 수도 있지만 두 번째 인수를 지정해야합니다.

Serial.print(76, BIN) gives "0100 1100"
Serial.print(76, OCT) gives "114"
Serial.print("L", DEC) gives "76"
Serial.print(76, HEX) gives "4C" 

시각적 인 직렬 출력으로 더 많은 예제 :

암호:

  Serial.write(0x48);   // H
  Serial.write(0x45);   // E
  Serial.write(0x4C);   // L
  Serial.write(0x4C);   // L
  Serial.write(0x4F);   // O

시리얼 출력 : 여기에 이미지 설명을 입력하십시오

암호:

  Serial.print("HELLO");

시리얼 출력 : 여기에 이미지 설명을 입력하십시오

반면에 Serial.println ()은 프레임에서 볼 수 있듯이 줄 끝 2 바이트 0x0D 및 0x0A를 추가합니다

암호:

  Serial.println("HELLO");

시리얼 출력 :

여기에 이미지 설명을 입력하십시오


7

Serial.writeSerial.print사람들이 쉽게 읽을 수 있도록 ASCII 문자 를 보내는 동안 바이트를 직렬 포트로 보냅니다.

일부 장치는 바이트를 사용하여 구성을 설정하고 일반적으로 데이터 패킷을 사용하므로 통신 기능을 사용하려면 쓰기 기능을 사용해야합니다. 결국 그들은 직렬 인터페이스를 통해 바이트를 보내고 각 바이트로 이동하여 해석 할 수 있습니다.


5

위의 모든 예는 정확하지만 더 명확 할 수 있습니다 .... 직렬 포트를 통해 전송 된 모든 데이터는 1과 0으로 전송됩니다. (명백하다 .... 나는 희망한다) ... 두 명령의 차이점은 전송되는 모든 것이 실제로 1과 0 사이에서 어떻게 번역 / 해석되는지에있다. 가장 명확한 예는 숫자 전송과 관련이 있습니다.

숫자 217을 보내야한다고 가정 해 봅시다.이 숫자의 이진수 (1과 0) 표현은 11011001입니다.이 명령 Serial.write(217)을 사용 하면 문자 그대로 11011001을 한 줄로 보냅니다. 같은 숫자의 16 진수 표현은 0xD9이며 명령 Serial.write(0xD9)은 같은 것을 보냅니다 ... 11011001.

여기에 흥미로운 부분이 있습니다 ... 당신이 명령을 사용 Serial.write("217")한다면 대신에 이것을 얻을 것입니다 : 00110010 00110001 00110111 ... WHAT?!?!?
문자열이 인수로 전달되면 개별 문자로 세분되어 ASCII로 변환 된 다음 각 문자에 대한 바이트로 전송됩니다. 다음을 사용하면 정확히 동일한 결과를 얻을 수 있습니다.

Serial.write(50);
Serial.write(51);
Serial.write(55);

(00110010 00110001 00110111)

이제를 보자 Serial.print(). 명령은 Serial.print(217)Serial.print("217")모두 같은 일을 인쇄합니다 : 00110010 00110001 00110111. 인쇄 명령이 첫번째 문자열 표현으로 숫자를 변환 한 다음 명령을 사용하기 때문이다 Serial.write()각각의 ASCII 비트 각 문자를 보낼 수 있습니다.

이것은 완전한 설명이 아니지만 올바른 방향으로 생각하는 데 도움이되기를 바랍니다.


3

이에 대한 또 다른 방법은 Serial.write가 Serial.print가 문자열을 허용하는 단일 문자를 허용한다는 것입니다. 약간의 차이가있을 수 있지만 이것이 주요한 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.