바코드 스캐너에서 Arduino의 직렬 데이터를 얻는 방법은 무엇입니까?

RS232를 사용하여 바코드 스캐너를 Arduino와 인터페이스하고 싶습니다. RS232의 2 (RX), 3 (TX) 및 5 (GND)를 MAX232의 해당 핀에 연결했습니다. Arduino 핀 6 및 7에서 TTL 출력을 사용하고 있습니다.

이것은 Arduino 프로그램의 코드입니다.

#include <SoftwareSerial.h> SoftwareSerial mySerial(6, 7); // RX, TX void setup() { Serial.begin(9600); } void loop() { // run over and over if (mySerial.available()) { byte x = mySerial.read(); Serial.println(x); } } 

아니요 제품을 스캔 할 때 직렬 모니터에 출력이 표시됩니다.

댓글

  • 질문을 수정하고 회로도를 포함하세요.
  • 모두 답을 찾았습니까?
  • @Ahnet : 예 그 당시 의견에 언급 된대로 다른 문제도 있었으므로 ' 그럼 수표를 넣으십시오. 상기시켜 주셔서 감사합니다.

답변

Arduino에 하드웨어 직렬 연결이 하나만 있다고 가정합니다 (예 : 메가가 아닌 우노) “소프트웨어 직렬을 사용하는 것이 옳습니다. 아두 이노는 이미 핀 2와 3을 사용하여 USB를 통해 직렬 모니터와 통신하므로 스캐너와 통신하는 데 사용할 수 없습니다.

하지만 코드의 첫 번째 줄을주의 깊게 살펴보면 “소프트웨어 직렬에 핀 6 & 7을 사용하도록 요청했지만 바코드 스캐너를 핀 2에 연결했습니다. & 3. 해당 핀을 지정한 핀으로 이동합니다.

두 번째로 설정 기능에서 소프트웨어 직렬이 아닌 하드웨어 직렬과 통신을 시작했습니다. “mySerial.begin (XXX)과 같은 것을 추가해야합니다. 여기서 XXX는 스캐너의 전송 속도입니다.

마지막으로 Arduino에 6과 7에 사용할 pinMode를 알려주지 않았습니다. 거기에 pinMode (6, INPUT) 및 pinMode (7, OUTPUT)도 필요합니다.

C omments

  • mySerial.begin (XXXX)을 추가 한 후 코드가 제대로 작동했습니다. RS232 핀을 약간 움직일 때마다 화면에 숫자가 인쇄됩니다. 하지만 제가 스캔 할 때는 아닙니다.
  • ' 올바른 방법을 찾았다 고 확신하십니까?

Answer

RS 232는 Arduino와 다른 전압 레벨에서 작동합니다. 스캐너 출력이 TTL 인 경우 화면에 표시되는 값은 아무런 의미가 없다고 생각합니다. 그래도 작동하지만 내 경험상 논리가 반전되어 소프트웨어 직렬에 1을 추가해야합니다.

SoftwareSerial mySerial (6, 7, 1); // RX, TX

첫 번째 단계는 스캐너 출력이 제공하는 전압 레벨을 확인하는 것입니다.

답변

나는 이것도 시도했는데, 어떤 이유로 핀 6과 7에서 작동하지 않지만 대신 핀 10과 11을 사용하여 완벽하게 작동합니다. 물론 mySerial.begin()를 추가해야합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다