Probleme mit SoftwareSerial Lib

Hallo zusammen

Ich arbeite zum ersten Mal mit der SoftwareSerial Library und habe einen für mich unerklärlichen Fehler.

Ziel meines kleinen Projektes ist es via Arduino Nano ein Bluetooth Module von Sparkfun anzusteuern und über dieses seriel empfangene Daten an ein zweites Bluetooth-Modul weiterzusenden. Da der "Nano" nur über eine serielle Schnittstelle Verfügt steuere ich das Modul über die SoftwareSerial Lib an.

Als Vorlage habe ich dieses Tutorial verwendet: http://www.instructables.com/id/BlueTooth-Link-with-auto-detect-connect/?ALLSTEPS

Soweit funktioniert beim ersten Laden auch alles. Wird mein Versuchsaufbau geresetet, funktioniert jedoch die Ansteuerung des Bluetooth-Moduls via Serial Lib nicht mehr. Auch ein erneutes Laden des Programms hilft nicht weiter. Abhilfe schaft erst das Laden eines anderen Programms und das erneute Laden der richtigen Software.

Kann mir jemand helfen, woran dies liegen könnte?

Danke und Grüsse haasdom1

Nehm direkt die
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Ich sehe aber ach keinen Sketch.

Vielen Dank für die schnelle Antwort.

Ich werde diese Lib gerne testen. Bin ich richtig in der Annahme, dass ich beim Nano die selbe Pinbelegung wie beim Uno verwenden kann?

Ja, Pinbelegung ist dahingehen identisch.

Leider hat sich mein Problem mit dem Ändern der Lib nicht geändert bzw. sogar verschlechtert. Das Modul kann via AltSoftSerial gar nicht angesteuert werden.

Zum Testen habe ich einen ganz einfachen Code benutzt. Mit der SoftSerial Lib funktioniert er, aber mit der AltSoftSerial Lib nicht.

Kann mir jemand weiterhelfen? Ich versehe den Fehler leider nicht.

#include <AltSoftSerial.h>

AltSoftSerial bluetooth;

void setup()
{
  Serial.begin(9600);  // Begin the serial monitor at 9600bps

  bluetooth.begin(115200);  // The Bluetooth Mate defaults to 115200bps
  bluetooth.print("$");  // Print three times individually
  bluetooth.print("$");
  bluetooth.print("$");  // Enter command mode
  delay(100);  // Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
  // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
  bluetooth.begin(9600);  // Start bluetooth serial at 9600
}

void loop()
{
  if(bluetooth.available())  // If the bluetooth sent any characters
  {
    // Send any characters the bluetooth prints to the serial monitor
    Serial.print((char)bluetooth.read());  
  }
  if(Serial.available())  // If stuff was typed in the serial monitor
  {
    // Send any characters the Serial monitor prints to the bluetooth
    bluetooth.print((char)Serial.read());
  }
  // and loop forever and ever!
}
#include <SoftwareSerial.h>  

int bluetoothTx = 9;  // TX-O pin of bluetooth mate, Arduino D3
int bluetoothRx = 8;  // RX-I pin of bluetooth mate, Arduino D2

SoftwareSerial bluetooth(bluetoothRx, bluetoothTx);

void setup()
{
  Serial.begin(9600);  // Begin the serial monitor at 9600bps

  bluetooth.begin(115200);  // The Bluetooth Mate defaults to 115200bps
  bluetooth.print("$");  // Print three times individually
  bluetooth.print("$");
  bluetooth.print("$");  // Enter command mode
  delay(100);  // Short delay, wait for the Mate to send back CMD
  bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
  // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
  bluetooth.begin(9600);  // Start bluetooth serial at 9600
}

void loop()
{
  if(bluetooth.available())  // If the bluetooth sent any characters
  {
    // Send any characters the bluetooth prints to the serial monitor
    Serial.print((char)bluetooth.read());  
  }
  if(Serial.available())  // If stuff was typed in the serial monitor
  {
    // Send any characters the Serial monitor prints to the bluetooth
    bluetooth.print((char)Serial.read());
  }
  // and loop forever and ever!
}

Software- emulierte serielle Schnittstellen funktionieren nicht so schnell.

In dem von Dir genannten Beispiel: http://www.instructables.com/files/orig/FKF/34OW/H461D8AU/FKF34OWH461D8AU.zip sind die BT Module an der Hardware Seriellen Schnittstelle angeschlossen.

Statt eines Arduino UNO kannst Du einen Arduino LEonardo oder Arduino MEGA 2560 nehmen. Die haben 2 bzw 4 seriele Hardware-Schnittstellen.

Grüße Uwe

Statt eines Arduino UNO kannst Du einen Arduino LEonardo oder Arduino MEGA 2560 nehmen. Die haben 2 bzw 4 seriele Hardware-Schnittstellen.

Der Leonardo hat auch nur eine serielle Hardware-Schnittstelle, aber die wird nicht wie beim UNO für die Kommunikation zum Host über USB gebraucht.

Bezüglich Geschwindigkeit der Software-Emulation gehe ich mit Uwe einig: alle über 9600 geht schlecht, höher als 38400 kannst Du gleich vergessen.

pylon: Der Leonardo hat auch nur eine serielle Hardware-Schnittstelle, aber die wird nicht wie beim UNO für die Kommunikation zum Host über USB gebraucht.

ok Du hast recht, aber, im Endeffekt hast Du beim Leonardo eine Verbindung über USB mit dem PC und eine freie serielle Schnittstelle an den pin 0 und 1 als 2 mögliche Verbindungen um Daten vom BT an den PC zu bringen.

Grüße Uwe