Jaka jest różnica między wszystkimi bibliotekami szeregowymi oprogramowania? Który jest zgodny z Arduino Nano?

11

Jest tak wiele bibliotek szeregowych oprogramowania, jakie są między nimi różnice? I którego mogę używać z moim Arduino Nano? Do mojego Arduino Nano potrzebuję jednego sprzętowego portu szeregowego i jednego programowego portu szeregowego o szybkości transmisji 115200.

Na jakich pinach Arduino Nano mogę korzystać z biblioteki szeregów oprogramowania?

William Roy
źródło
Używam neoswserial z klawiaturą I2C, ale kiedy dodam key=getKey();mój GSM (używając pin 2 i 3 Arduino Uno) nie odbiera SMS-ów. Pomóż mi proszę.
Nguyễn Trường Hải

Odpowiedzi:

16

Ta odpowiedź zawiera 4 podstawowe opcje:

  • HardwareSerial, zawsze najlepsza. Wystarczy użyć wstępnie zdefiniowanej Serialzmiennej. Na niektórych Arduinos istnieją dodatkowe porty HardwareSerial, zwane Serial1, Serial2itp Nano ma tylko Serial.

  • AltSoftSerial, najlepsza z bibliotek szeregowych oprogramowania. Tylko jedna instancja jest dozwolona i musi być użyta na jednym ze styków przechwytywania danych wejściowych (styki 8 i 9 dla Nano).

  • Mój NeoSWSerialjest następny najlepszy. Działa na dowolnych dwóch pinach, ale tylko przy prędkościach transmisji 9600, 19200 i 38400.

  • SoftwareSerialjest najgorszym wyborem. Działa na dowolnych dwóch pinach, ale jest bardzo nieefektywny. Wyłącza przerwania na cały czas wysyłania znaku LUB odbierania i nie może wykonywać obu jednocześnie (w przeciwieństwie do wszystkich innych opcji szeregowych). Może to zakłócać inne części szkicu, komunikację z innymi urządzeniami lub biblioteki.

Jeśli możesz użyć wolniejszej prędkości transmisji, możesz pozostawić włączone wydruki debugowania Seriali używać urządzenia AltSoftSeriallub NeoSWSerialurządzenia.

Ale jeśli musisz użyć 115200, jedynym niezawodnym wyborem jest Serial. Chociaż AltSoftSeriali SoftwareSerialpozwalają na tę prędkość transmisji, mogą nie wysyłać / odbierać danych poprawnie.

W takim przypadku sugerowałbym użycie Serialurządzenia 115200. O ile nie korzystasz z usługodawcy internetowego, będziesz musiał odłączyć urządzenie, aby przesłać nowy szkic przez USB.

Następnie użyj AltSoftSeriallub NeoSWSerialdo swoich instrukcji debugowania. Będziesz potrzebował adaptera szeregowego na USB TTL (inaczej FTDI) na wybranych pinach, aby połączyć się z komputerem. Serial MonitorLub inny emulator terminala będzie czytać z tego portu USB COM.

slash-dev
źródło
Czy AltSoftSerial jest taki sam pod względem wydajności i właściwości, tylko że NeoICSerial dodaje funkcjonalność tego, co? Nie do końca zrozumiałem. github.com/SlashDevin/NeoICSerial
William Roy
2
@WilliamRoy, NeoICSerialpo prostu dodaje attachInterruptmetodę do AltSoftSerial. Prawdopodobnie nie musisz obsługiwać każdej postaci w przerwie. Wystarczy użyć AltSoftSeriali zadzwonić, available()a następnie, read()jeśli znak jest gotowy. Podobnie NeoHWSerialdodaje tę samą attachInterruptfunkcję do rdzenia HardwareSerial. Jednak NeoSWSerialjest to zupełnie inna klasa (posiada również attachInterruptfunkcję).
slash-dev
-2

Oprogramowanie szeregowe emuluje port szeregowy, inny niż port macierzysty, który ma rejestr, aby zapisać wszystkie bity w kolejności i ustawiają flagę, aby wywoływać główną pętlę, oprogramowanie szeregowe nie ma nic z tego. Oprogramowanie szeregowe musi odbierać wszystkie bity, jeden po drugim, więc musisz odczytać port cyfrowy, odczekać określony czas i ponownie odczytać pin cyfrowy. Musisz zrobić to 10 razy (1 bit początkowy, 8 bitów danych i 1 bit końcowy). Czas jest bardzo ważny. Aby korzystać z oprogramowania szeregowego, musisz martwić się o wydajność.

Do pinu RX można użyć cyfrowego pinu przerywającego, dzięki czemu zostaniesz „wywołany” w dolnej granicy (bit startowy) i otrzymasz 8 bitów.

rodrigo
źródło
1
To nawet nie próbuje odpowiedzieć na pierwotne pytanie.
Edgar Bonet
1
Tak, to nie próbuje odpowiedzieć na oryginalne pytanie, ponieważ społeczność Arduino nie wie, czy sam znasz kod peryferyjny.
rodrigo