Was ist der Unterschied zwischen allen seriellen Softwarebibliotheken? Welches ist Arduino Nano kompatibel?

11

Es gibt so viele serielle Software-Bibliotheken. Was sind die Unterschiede zwischen ihnen? Und welches kann ich mit meinem Arduino Nano verwenden? Für meinen Arduino Nano benötige ich einen seriellen Hardware-Port und einen seriellen Software-Port mit einer Baudrate von 115200.

An welchen Pins des Arduino Nano kann ich die serielle Softwarebibliothek verwenden?

William Roy
quelle
Ich verwende neosetoothial mit einer I2C-Tastatur, aber wenn ich key=getKey();mein GSM hinzufüge (mit Pin 2 & 3, empfängt Arduino Uno) keine SMS. Hilf mir bitte.
Nguyễn Trường Hải

Antworten:

14

Diese Antwort listet die 4 grundlegenden Optionen auf:

  • HardwareSerial, immer das Beste. Verwenden Sie einfach die vordefinierte SerialVariable. Auf einigen Arduinos gibt es zusätzliche HardwareSerial Ports genannt Serial1, Serial2usw. Der Nano hat nur Serial.

  • AltSoftSerial, die besten seriellen Softwarebibliotheken. Es ist nur eine Instanz zulässig, die an einem der Input Capture-Pins (Pins 8 und 9 für einen Nano) verwendet werden muss.

  • Mein NeoSWSerialist das nächstbeste. Es funktioniert mit zwei beliebigen Pins, jedoch nur mit den Baudraten 9600, 19200 und 38400.

  • SoftwareSerialist die schlechteste Wahl. Es funktioniert mit zwei beliebigen Pins, ist aber sehr ineffizient. Es deaktiviert Interrupts für die gesamte Zeit, in der ein Zeichen gesendet wird oder empfangen werden , und es kann nicht beides gleichzeitig tun ( im Gegensatz zu allen anderen seriellen Entscheidungen). Dies kann andere Teile Ihrer Skizze, andere Gerätekommunikation oder Bibliotheken beeinträchtigen.

Wenn Sie eine langsamere Baudrate verwenden könnten, könnten Sie Ihre Debug-Ausdrucke beibehalten Serialund entweder AltSoftSerialoder NeoSWSerialfür Ihr Gerät verwenden.

Wenn Sie jedoch 115200 verwenden müssen, ist die einzig zuverlässige Wahl Serial . Obwohl AltSoftSerialund SoftwareSerialerlauben diese Baudrate, können sie Daten nicht korrekt senden / empfangen.

In diesem Fall würde ich die Verwendung Serialfür das 115200-Gerät vorschlagen. Sofern Sie keinen ISP verwenden, müssen Sie das Gerät trennen, um eine neue Skizze über USB hochzuladen.

Verwenden Sie dann AltSoftSerialoder NeoSWSerialfür Ihre Debug-Anweisungen. Sie benötigen einen TTL Serial-zu-USB-Adapter (auch bekannt als FTDI) an den ausgewählten Pins, um eine Verbindung zum PC herzustellen. Das Serial Monitoroder ein anderes Terminalemulatorprogramm liest von diesem USB-COM-Anschluss.

Slash-Dev
quelle
Ist AltSoftSerial in Leistung und Eigenschaften gleich, nur dass NeoICSerial die Funktionalität von was hinzufügt? Ich habe es nicht ganz verstanden. github.com/SlashDevin/NeoICSerial
William Roy
2
@WilliamRoy, NeoICSerialfügt nur die attachInterruptMethode hinzu AltSoftSerial. Sie müssen wahrscheinlich nicht jedes Zeichen in einem Interrupt behandeln. Verwenden Sie einfach AltSoftSerialund rufen Sie die available()und dann, read()wenn ein Zeichen bereit ist. In ähnlicher Weise wird dem Kern NeoHWSerialdieselbe attachInterruptFunktion hinzugefügt HardwareSerial. Ist NeoSWSerialjedoch eine völlig andere Klasse (es hat auch die attachInterruptFunktion).
Slash-Dev
-1

Serielle Software emuliert eine serielle Schnittstelle, die sich von einer nativen Schnittstelle unterscheidet, die ein Register hat, um alle Bits in der richtigen Reihenfolge zu speichern, und ein Flag zum Aufrufen der Hauptschleife setzt. Eine serielle Software hat nichts davon. Die serielle Software muss alle Bits einzeln empfangen. Sie müssen also einen digitalen Port lesen, eine bestimmte Zeit warten und den digitalen Pin erneut lesen. Sie müssen es 10 Mal machen (1 Startbit, 8 Datenbits und 1 Endbit). Die Zeit ist sehr wichtig. Um eine Software-Serie zu verwenden, müssen Sie sich mehr Gedanken über die Leistung machen.

Sie können einen digitalen Interrupt-Pin für den RX-Pin verwenden, sodass Sie am unteren Rand (Startbit) "angerufen" werden und die 8 Bits empfangen.

Rodrigo
quelle
Dies gilt nicht einmal versuchen , die ursprüngliche Frage zu beantworten.
Edgar Bonet
1
Ja, dies versucht nicht, die ursprüngliche Frage zu beantworten, da die Arduino-Community nicht weiß, wie Sie sich selbst Peripherie-Code machen.
Rodrigo