답변:
이 답변 에는 4 가지 기본 선택 사항이 있습니다.
HardwareSerial
항상 최고입니다. 미리 정의 된 Serial
변수를 사용하십시오 . 일부 아두 이노에서라는 추가 HardwareSerial 포트,있다 Serial1
, Serial2
등 나노에만있다 Serial
.
AltSoftSerial
, 최고의 소프트웨어 시리얼 라이브러리. 하나의 인스턴스 만 허용되며 입력 캡처 핀 중 하나 (나노의 경우 핀 8 및 9)에 사용해야합니다.
내 NeoSWSerial
다음은 최고입니다. 두 핀에서 작동하지만 전송 속도 9600, 19200 및 38400에서만 작동합니다.
SoftwareSerial
최악의 선택입니다. 두 개의 핀에서 작동하지만 매우 비효율적입니다. 문자를 보내 거나 받는 전체 시간 동안 인터럽트를 비활성화 하고 다른 모든 직렬 선택과 달리 동시에 두 가지를 모두 수행 할 수는 없습니다. 이것은 스케치의 다른 부분, 다른 장치 통신 또는 라이브러리를 방해 할 수 있습니다.
보다 느린 전송 속도를 사용할 수있는 경우 디버그 인쇄를 켠 상태로 유지 하거나 장치에 Serial
사용할 수 있습니다.AltSoftSerial
NeoSWSerial
그러나 115200을 사용해야하는 경우 신뢰할 수있는 유일한 방법은 Serial
입니다. 비록 AltSoftSerial
및 SoftwareSerial
그 전송 속도를 허용, 그들은 보낼 수 없습니다 / 제대로 데이터를받을 수 있습니다.
이 경우 Serial
115200 장치를 사용 하는 것이 좋습니다 . ISP를 사용하지 않는 한 USB를 통해 새 스케치를 업로드하려면 장치 연결을 끊어야합니다.
그런 다음 AltSoftSerial
또는 NeoSWSerial
디버그 문에 사용 하십시오. PC에 연결하려면 선택한 핀에 TTL 직렬 -USB 어댑터 (일명 FTDI)가 필요합니다. Serial Monitor
또는 다른 터미널 에뮬레이터 프로그램 이 USB의 COM 포트에서 읽습니다.
NeoICSerial
에 attachInterrupt
메소드를 추가합니다 AltSoftSerial
. 인터럽트에서 각 문자를 처리 할 필요는 없습니다. 문자 를 사용할 수 있으면를 사용 AltSoftSerial
하여 호출하면 됩니다. 마찬가지로 코어에 동일한 기능을 추가합니다 . 그러나 완전히 다른 클래스입니다 ( 기능 도 있습니다). available()
read()
NeoHWSerial
attachInterrupt
HardwareSerial
NeoSWSerial
attachInterrupt
직렬 소프트웨어는 모든 비트를 순서대로 저장하기 위해 등록 된 기본 포트와 다른 직렬 포트를 에뮬레이션하고 메인 루프를 호출하는 플래그를 설정합니다. 소프트웨어 직렬은 모든 비트를 하나씩 수신해야하므로 디지털 포트를 읽고 특정 시간 동안 기다렸다가 디지털 핀을 다시 읽어야합니다. 10 번 (1 시작 비트, 8 데이터 비트 및 1 종료 비트)으로 만들어야합니다. 시간이 매우 중요합니다. 소프트웨어 시리얼을 사용하려면 성능에 대해 더 걱정해야합니다.
RX 핀에 디지털 인터럽트 핀을 사용할 수 있으므로 아래쪽 경계 (시작 비트)에서 "호출"되고 수신 된 8 비트입니다.
key=getKey();
GSM (핀 2 & 3 Arduino Uno 사용)을 추가하면 SMS가 수신되지 않습니다. 도와주세요, 제발.