Arduino - SoftwareSerial - BluetoothModul

Hallo Leute,

ich arbeite schon etwas länger mit Arduino. Allerdings bisher immer nur sehr einfache und kleine Sachen oder Tutorials ausprobieren. Jetzt wollte ich etwas neues ausprobieren und komme einfach nicht weiter. Über Hilfe würde ich mich sehr freuen. Habe auch schon fleißig im Netz gesucht, leider komme ich aber auf keine Lösung.

Ich habe ein HC-06 Modul (Bluetooth) an einen Arduino angeschlossen. TXBluetooth auf 2(RX), RXBluetooth auf 3(TX) mit SoftwareSerial. Bluetooth Modul ist bereits Konfiguriert.

Wenn ich nun den SerialMonitor und z.B. das Terminal auf meinem Telefon öffne, dann kommen die Variablen die im Setup beschrieben sind. Allerdings wenn ich nun über mein Telefon Variablen senden möchte, kommt nichts an. So wie der Code unten steht, kann ich Variablen über den normalen Serial an den UNO schicken und er speichert sie, leider sendet er sie nicht mehr zurück an das Terminal auf dem Telefon, zumindest sehe ich sie nicht.
Habe leider kein Oszi im Besitz, allerdings habe ich zum nachvollziehen das ganze an den richtigen HardwareSerial Pins (0;1) angesteckt und dann probiert. Hier klappt das Senden und Empfangen am Bluetooth Modul, Variablen werden gespeichert, alles i.O.
Sobald ich die SoftwareSerial Bibliothek nutzen möchte gibt es Probleme.

Habe bereits gelesen das es damit zusammenhängen kann, das bei Attinys ein Problem der interne Oszi ist. Dieser soll so ungenau sein das höhere Baudraten nicht genutzt werden können. Allerdings ist das erst später angesetzt und hat mit dem Arduino UNO den ich nutze ja nichts zu tun.
Auch habe ich versucht verschiedene Versionen von Arduino IDE zum kompilieren zu nutzen in der Annahme das ich irgendwas in der Programmstruktur kaputt gemacht habe, allerdings ist das Ergebnis bei allen gleich. :frowning:
Ich würde mich freuen wenn mir jemand helfen könnte oder mich auf das richtige stupsen könnte. Das soll ein Weihnachtsgeschenk werden und ich wäre froh wenn ich das gebastelte noch fertig bekomme :slight_smile:

Gruß und als nächstes kommt der Code.

#include <SoftwareSerial.h>

char arrayi[]= {0,0,0,0,0,0};
char sdata;
char serialdata;
uint8_t i = 0;
uint8_t But2v;

SoftwareSerial Bluetooth(2,3);

void translatefvariable(){
  But2v = arrayi[2];
      }

void setup() {
Serial.begin(9600);
Serial.println("10");
pinMode(2, INPUT);
pinMode(4, OUTPUT);
Bluetooth.begin(57600);
Bluetooth.println("80");
pinMode(8,OUTPUT);
  digitalWrite(8,HIGH);
  delay(1000);
    digitalWrite(8, LOW);
}

void loop(){
  
getSerial();
translatefvariable();
printSerial();
if(But2v == 11){
  digitalWrite(8,HIGH);
  delay(300);
  digitalWrite(8,LOW);
  arrayi[2] = 0;
  }
serialdata=0;
    i++;
    if (i>5){
      i=0;
      }  
  }
  
 void getSerial(){
  // if(Serial.available()){
    sdata = 0;
  while (serialdata!= '/'){
  serialdata = Bluetooth.read();
  if (serialdata> 0 && serialdata != '/'){
    sdata = sdata * 10 + serialdata - '0';
   }
  }
   arrayi[i] = sdata;
 //}
   }
   
 void printSerial(){
    Bluetooth.print( i);
   Serial.print( i);
    Bluetooth.print(sdata);
    Bluetooth.print(arrayi[i]);
  Serial.println(arrayi[i]);
 }

pikkker:
.. Allerdings wenn ich nun über mein Telefon Variablen senden möchte, kommt nichts an. ...

Ich bin nicht sicher, ob ich Deine Beschreibung richtig interpretiere. Den Sketch habe ich kurz überflogen. Woher stammen

getSerial();
translatefvariable();
printSerial();

?

Wie stellst Du fest, dass am „anderen Ende“ nichts ankommt bzw. wie stellst Du fest, dass wirklich (nichts) gesendet wurde?

Gruß

Gregor

SoftwareSerial mit 57600 Baud kannst du vergessen. Gehe auf mit der Baudrate runter

@gregorss

Woher stammen ...

Dann schau genauer hin. Die Funktion sind doch definiert

Serenifly:
@gregorssDann schau genauer hin. Die Funktion sind doch definiert

Uh. Ja ...

Montags bis Freitags ist das Neuron zwischen meinen Ohren ab und zu indisponiert :slight_smile:

Gruß

Gregor

gregorss:
Uh. Ja ...

Montags bis Freitags ist das Neuron zwischen meinen Ohren ab und zu indisponiert :slight_smile:

Gruß

Gregor

Sollte sich das jetzt wiederholen?? :wink: :wink:

Danke euch für die schnellen Antworten.
Mittlerweile funktioniert es. Musste in der Tat die Baud-Rate runter drehen (9600). Jetzt kommt das an was gesendet wird.

Ich sehe was gesendet wird im Terminal des jeweiligen Endgerätes und was Empfangen wurde ebenso auf der jeweiligen Endstelle.

Ich hatte durch die große Informationsflut im Internet gehofft das es mit 57600baud geht, allerdings entspricht dies scheinbar nicht der Realität, wenn man keine passenden Tacktgeber hat.

Danke nochmal für die Antworten!

Gruß pikkker

Auch mit einem Quarz gehen da keine 57000 Baud. Einfach weil kein Timer verwendet wird und das wirklich komplett in Software gemacht wird.

Es gibt AltSoftSerial, welches einen Hardware Timer verwendet. Das geht in gewissen Grenzen auch mit höheren Baudraten. Aber nicht auf einem ATtiny

9600 ist bei Software Serial schon recht hoch. Besser direkt bei 1200 o.ä. laufen lassen. Besser ist es aber, direkt einen geeigneten Controller mit 2 HW-Uarts zu nehmen oder halt AltSoftSerial.

HotSystems:
Sollte sich das jetzt wiederholen?? :wink: :wink:

Mindestens zweimal!! :slight_smile: :slight_smile:

Gruß!!

GregorGregor