Nano und HM10 keine AT-Befehle

Hallo,

ich versuche micht gerade einen Arduino Nano (clone) mit einem HM-10 Modul zu verbinden und die AT-Befehle im Programm zu verwenden.

Ich habe ein HM-10 modul mit pegelwandler von DSD Tech, diese ist am Nano an D8 und D9 angeschlossen.
Auf den ersten Blick klappte alles. ich konnte über ein Terminal-programm AT-Befehle versenden und das BT-Modul hat Sie angenommen und mit einer OK Rückmeldung reagiert.

Nunwolte ich den Namen des Moduls ändern. Anstatt den Befehl auszuführen, sendet er den Befehl über BT raus.
Meine Programierung:

#include <SoftwareSerial.h> // Serielle Software-Schnittstelle einbinden


SoftwareSerial BT (8,9); // Name der BT-Schnitstelle "BT" mit RDX = Pin 8 (D8) und TDX = Pin 9 (D9)

// Versonierung
const char VER = "0.1";// BT-Modul HM10 Anbindung

int Service = 13;//Servicepin ist 13(D13)
int Zeichen; // Variable für ein gelesenes Zeichen
int gelesen ; // gelesenes ZEichen
String Zeichenkette;
String schreiben ;// geschriebene Zeichenkette



void setup() {
 // put your setup code here, to run once:
 pinMode(Service,INPUT); // Service Pin als Eingang festlegen
 Serial.begin(9600); //USB-Schnitstelle mit 9600 Baud starten
 BT.begin(9600); //BT-Schnittstelle mit 9600 Baud starten
 if ( digitalRead(Service)) // wenn Servicemode
 {
   Serial.println ("BT-Schnitstelle gestartet");// dann gebe über USB aus
 }
 /// BT neuen Namen geben
 schreiben = "AT";
 BT.println(schreiben);
 delay(1); //Warte 1s
 gelesen ="";
 
 Zeichenkette ="";
 if (BT.available()>0)
 {
   Zeichenkette=  Zeichenkette + char(BT.read());
 }
 if ( digitalRead(Service)) // wenn Servicemode
 {
   Serial.println (gelesen);// dann gebe über USB aus
 }
 schreiben = "AT+NAMEBT_V0.1";
 BT.println(schreiben);
 delay(1000); //Warte 1s
 gelesen ="";
 
 Zeichenkette ="";
 if (BT.available()>0)
 {
   Zeichenkette=  Zeichenkette + BT.read();
 }
 if ( digitalRead(Service)) // wenn Servicemode
 {
   Serial.println (gelesen);// dann gebe über USB aus
 }
 schreiben = "AT+RESET";
 BT.println(schreiben);// BT reseten
 gelesen ="";
 Zeichenkette ="";
 if (BT.available()>0)
 {
   Zeichenkette=  Zeichenkette + BT.read();
 }
   if ( digitalRead(Service)) // wenn Servicemode
 {
   Serial.println (gelesen);// dann gebe über USB aus
 }
 delay (1000);// warte 1s
 

}

void loop() {
 // put your main code here, to run repeatedly:

}

Was mache ich falsch?
Danke
Fraibeuter

Freibeuter:
Was mache ich falsch?

Du musst deinen Sketch in Code-Tags posten, damit wir den alle richtig lesen können.
Dazu Schaltfläche </> im Editorfenster verwenden.

Dann solltest du die Funktionen in die Loop schreiben, nicht im Setup.
So wird deine Funktion ja nur einmal ausgeführt.

// Versonierung
const char VER = "0.1";// BT-Modul HM10 Anbindung

int Service = 13;//Servicepin ist 13(D13)
int Zeichen; // Variable für ein gelesenes Zeichen
int gelesen ; // gelesenes ZEichen
String Zeichenkette;
String schreiben ;// geschriebene Zeichenkette



void setup() {
  // put your setup code here, to run once:
  pinMode(Service,INPUT); // Service Pin als Eingang festlegen
  Serial.begin(9600); //USB-Schnitstelle mit 9600 Baud starten
  BT.begin(9600); //BT-Schnittstelle mit 9600 Baud starten
  if ( digitalRead(Service)) // wenn Servicemode
  {
    Serial.println ("BT-Schnitstelle gestartet");// dann gebe über USB aus
  }
  /// BT neuen Namen geben
  schreiben = "AT";
  BT.println(schreiben);
  delay(1); //Warte 1s
  gelesen ="";
  
  Zeichenkette ="";
  if (BT.available()>0)
  {
    Zeichenkette=  Zeichenkette + char(BT.read());
  }
  if ( digitalRead(Service)) // wenn Servicemode
  {
    Serial.println (gelesen);// dann gebe über USB aus
  }
  schreiben = "AT+NAMEBT_V0.1";
  BT.println(schreiben);
  delay(1000); //Warte 1s
  gelesen ="";
  
  Zeichenkette ="";
  if (BT.available()>0)
  {
    Zeichenkette=  Zeichenkette + BT.read();
  }
  if ( digitalRead(Service)) // wenn Servicemode
  {
    Serial.println (gelesen);// dann gebe über USB aus
  }
  schreiben = "AT+RESET";
  BT.println(schreiben);// BT reseten
  gelesen ="";
  Zeichenkette ="";
  if (BT.available()>0)
  {
    Zeichenkette=  Zeichenkette + BT.read();
  }
    if ( digitalRead(Service)) // wenn Servicemode
  {
    Serial.println (gelesen);// dann gebe über USB aus
  }
  delay (1000);// warte 1s
  

}

void loop() {
  // put your main code here, to run repeatedly:

}

Aber warum im Loop?

Die Befehle sollen nur einmal, beim starten des Sketch, ausgeführt werden.

Gruss
Freibeuter

Ok, da du bisher dein BT-Modul nur namentlich erwähnt hast, solltest du dazu einen Hyperlink posten.
Dann besteht die Möglichkeit nachzusehen, welche Befehle an das Modul gesendet werden müssen, damit dieses seinen Namen ändert.

Das deine Anweisungen nur einmal ausgeführt werden müssen, war mir zuvor nicht bekannt.

Hi

Was mir gerade auffiel: delay(1) ergibt keine Pause von einer Sekunde - die Zahl ist die Pausenzeit in Millisekunden.
Für eine Sekunde muß Da eine 1000 rein.

MfG

Hallo

Ja ein Tipfehler,

Das Problem was ich habe ist folgendes:

wenn ich die Daten über den Seriellenmonitor eingebe, auf den Arduino über die Serielle Schnittstelle einlese und über die Softwareschnittstelle am das HM-10 Modul ausgebe nimt das Modul die Befehle an.
Sende ich jedoch den AT-Befehl direkt an das HM-10 Modul, sendet er es über bluetooth an mein Handy.

Was mache ich falsch?

Gruß
Freibeuter

Und warum beantwortest du nicht unsere Fragen ?

Ich habe folgendes BT-Modul:

Gruß

Freibeuter

Hast du dich auch an die Beschreibung zum BT-Modul gehalten ?

So wie ich es verstehe (Doku kurz überflogen), akzeptiert das Modul nur Steuerbefehle, wenn es nicht mit einem Remote-System verbunden ist.

Hallo,

das Modul war nicht mit einem anderen System gekoppelt.

Gruß
Freibeuter

A

Freibeuter:
Hallo,

das Modul war nicht mit einem anderen System gekoppelt.

Gruß
Freibeuter

Und wie stellst du fest, dass deine Anweisung gesendet wurde ?

Weil ich beides ausprobiert habe und das Modul mir anzeigt wenn es verbunden ist.

Gruß

Freibeuter