Arduino Auto mit Bluetooth steuern?

2 Antworten

SoftwareSerial BT(10, 11); // RX, TX

Beim Mega sind das, aber nicht die RX und TX Pins. Diese sind:
RX0: 0, TX0: 1
RX1: 19 , TX1: 18
RX2: 17, TX2: 16
RX3: 15 , TX3: 14

Woher ich das weiß:eigene Erfahrung

BuschLOL 
Beitragsersteller
 01.07.2025, 18:17

Habe ich gerade geändert es funktioniert aber immer noch nicht

Suiram1  01.07.2025, 18:20
@BuschLOL

Hast du das Bluetooth Modul auch an die Richtigen RX und TX Pins angeschlossen? Wird irgendwas ausgegeben? Kommen die Bluetooth befehle überhautp an?

Hier fehlen eindeutig einige Infos.

Suiram1  01.07.2025, 18:26
@BuschLOL

Wie nichts? Selbst nichts per BT empfangen wird muss zumindest die entfernung per Schallsensor ausgegeben werden.

Erkläre mal möglichst genau wie du grade das Arduino bedienst? Ist es an einen PC angeschlossen (wo du in der Seriellenkonsole geschaut hast)?

BuschLOL 
Beitragsersteller
 01.07.2025, 18:30
@Suiram1

Es ist an mein PC angeschlossen und das einzige das ich im Serial Motor bekomme ist die Entfernung von mein Ultraschallsensor von Bluetooth bekomme ich nicht. Ich mache das Auto als ein Schulprojekt und mein Lehrer konnte mir auch nicht weiterhelfen er wusste auch nicht an was es liegen kann. Ich habe auch oftmals den Bluetooth Controller gewechselt und es kam immer der gleiche Fehler.

Suiram1  01.07.2025, 18:52
@BuschLOL

Ist es sicher gestellt, dass die BT signare auch wirklich gesendet werden? Also bist die verbunden und welche App nutzt du?

BuschLOL 
Beitragsersteller
 01.07.2025, 18:58
@Suiram1

Ich weiß nicht wie ich überprüfen kann ob signale gesendet werden aber in Serial Monitor kommt nichts. Ich benutze Arduino Bluetooth Controller und BT Car Controller-Arduino/ESP

Suiram1  01.07.2025, 19:27
@BuschLOL

Ok, kann das leider nicht selber versuchen, weil ich ein HC-08 habe (einige unterschiede dazwischen), hast du es hinbekommen dich mit dem Modul zu verbinden?

Suiram1  01.07.2025, 19:28
@BuschLOL

Im bezug auf die andere Antwort wäre es noch gut zu wissen ob zufälliger Weise jedesmal wenn du was drückst ein "Command:" in dem Monitor hast

BuschLOL 
Beitragsersteller
 01.07.2025, 19:30
@Suiram1

ja habe ich es hat mal auch kurz funktioniert aber dann haben wir noch paar Sachen zum Code hinzugefügt und dann hat es nicht mehr geklappt aber wo es funktioniert hat hatte es auch einen delay also man musste so zwischen 5 und 7 Sekunden warten bis das Auto gefahren ist

BuschLOL 
Beitragsersteller
 01.07.2025, 19:30
@Suiram1

Jetzt bekomme ich keine Commands

Suiram1  01.07.2025, 19:31
@BuschLOL

Wenn du welche bekommen hast, dann heißt das schonmal, dass das Bluetooth funktioniert und es am Code liegt, nächmlich an dem was @KaePie aufgefallen ist.

BuschLOL 
Beitragsersteller
 01.07.2025, 19:34
@Suiram1

das was ihn aufgefallen ist habe ich nicht ganz verstanden kannst du es mir nochmal erklären

Suiram1  01.07.2025, 19:38
@BuschLOL

In dem Code überprüfst du nur ob Bluetooth Daten angekommen sind, liest diese, aber nie.

Du musst im If, welches nach eingehenden BT Daten schaut am Anfang

command = BT.read();

schreiben.

BuschLOL 
Beitragsersteller
 01.07.2025, 19:49
@BuschLOL

Es funktioniert immer noch nicht
so sieht der aktuelle code aus

#include <SoftwareSerial.h>
#include <Servo.h>

SoftwareSerial BT(19, 18); // RX, TX
Servo myservo;
char command = 0;

const int motorPin1 = 2;
const int motorPin2 = 3;

int trigger = 5;
int echo = 6;
int buzzer = 7;
long dauer = 0;
long entfernung = 0;

void setup() {
  Serial.begin(9600);       // Für den seriellen Monitor
  Serial1.begin(9600);      // Für Bluetooth über Serial1 (Pin 18 = TX1, 19 = RX1)

  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);

  myservo.attach(4);     
  myservo.write(90);     

  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzzer, OUTPUT);

  pinMode(8, OUTPUT); 
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial1.available()) {
    command = BT.read();
    command = Serial1.read();
    Serial.print("Command: ");
    Serial.println(command);

    switch (command) {
      case 'F': 
        digitalWrite(motorPin1, HIGH);
        digitalWrite(motorPin2, LOW);
        break;

      case 'B': 
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, HIGH);
        digitalWrite(12, HIGH);
        digitalWrite(13, HIGH);
        break;

      case 'S': 
        digitalWrite(motorPin1, LOW);
        digitalWrite(motorPin2, LOW);
        myservo.write(90); 
        break;

      case 'L': 
        myservo.write(45);
        break;

      case 'R': 
        myservo.write(135);
        break;

      case 'Y':
        tone(buzzer, 250);
        delay(2000);
        break;

      case 'U':
        digitalWrite(8, HIGH);
        digitalWrite(9, HIGH);
        break;

      case 'u':
        digitalWrite(8, LOW);
        digitalWrite(9, LOW);
        break;
    }
  }

  // Ultraschallmessung und Abstandssensor
  digitalWrite(trigger, LOW);
  delay(5);
  digitalWrite(trigger, HIGH);
  delay(10);
  digitalWrite(trigger, LOW);

  dauer = pulseIn(echo, HIGH);
  entfernung = (dauer / 2) * 0.03432;
  Serial.print(entfernung);
  Serial.println(" cm");

  if (entfernung <= 3) { 
    tone(buzzer, 1000, 100);
    delay(100);
  }
  else if (entfernung <= 6) { 
    tone(buzzer, 1000, 100);
    delay(250);
  }
  else if (entfernung <= 10) { 
    tone(buzzer, 1000, 100);
    delay(500);
  }
  else { 
    noTone(buzzer);
    delay(500);
  }
}
 
Suiram1  01.07.2025, 19:58
@BuschLOL

Die Letzten Ideen die ich noch hätte sind:

  1. Vllt. gibt es Komplikationen zwischen SoftwareSerial und Serial1. Nutze nur eins von beidem da beide denselben RX und TX port nutzen.
  2. Überprüfe um RX am Arduino an TX beim BT Modul und umgekehrert angeschlossen ist
  3. Versuche mal diesen Simplen Sketch. Der leitet alle Daten vom BT modul zu Serial weiter und mal schauen ob es geht:
void setup()
{
  Serial.begin(9600);
  while (!Serial);
  Serial1.begin(9600);
  while (!Serial1);

  Serial.println("HC-05 relay gestartet...");
}

void loop()
{
  if (Serial1.available())
  {
    char data = Serial1.read();
    Serial.write(data);
  }
}

Wirklich viel mehr kann man dir via Chat nicht helfen, da Ferndebugging immer so ne Sache ist.

BuschLOL 
Beitragsersteller
 01.07.2025, 20:05
@Suiram1

Ich bekomme nur so leere Kasten und danach kommt HC-05 relay gestartet...
kann ich irgendwie Bilder Kommentieren dann kann ich es dir zeigen.

Suiram1  01.07.2025, 20:06
@BuschLOL
  1. Hast du den Rest überprüft (besonders 2.)
  2. Was passiert sobalt du in der App auf etwas drückst.
BuschLOL 
Beitragsersteller
 01.07.2025, 20:08
@Suiram1

Das 2 habe ich auch probiert und wenn ich in der App auf etwas drücke passiert nichts

Suiram1  01.07.2025, 20:10
@BuschLOL

Wenn du in der App was drückst, nichts passiert und ansonsten alles Funktioniert liegt es entweder am Board oder am Modul.
Ansonsten wüsste ich jetzt nicht weiter ohne es vor mir zu haben...

BuschLOL 
Beitragsersteller
 01.07.2025, 20:12
@Suiram1

Das Board haben wir ein paar mal gewechselt und das Modul auch aber ich denke die Module mit denen ich arbeite sind auch ziemlich alt also sind vielleicht alle kaputt

Woher bekommt die Variable command einen Wert? Ich bin gerade nicht am PC, kann also selber compilieren, aber spontan sehe ich nichts, wo command einen Wert zugewiesen bekommt, außer bei der Deklarierung.

switch (command)
Woher ich das weiß:eigene Erfahrung

steinisbro  01.07.2025, 19:39

Hey, falls ich richtig verstanden habe, was du meinst bekommt command doch hier den Wert von dem was der Bluetooth empfänger bekommt:
command = Serial.read();

BuschLOL 
Beitragsersteller
 01.07.2025, 19:08

meinst du char command = 0; das ist drine

KaePie  01.07.2025, 19:09
@BuschLOL

Und wann bekommt command andere Werte, die switch() auswerten kann?

KaePie  01.07.2025, 19:12
@BuschLOL

Spontan würde ich sagen, dass der Compiler deinen ganzen switch() wegoptimiert.

Wieviel C++ oder C Erfahrung hast du?

BuschLOL 
Beitragsersteller
 01.07.2025, 19:14
@KaePie

Ich hab da nicht so viel Erfahrung. Der Command bekommt andere werte von der Handy App.

KaePie  01.07.2025, 19:18
@BuschLOL

Mag sein, dass in der APP was passiert, aber das kommt beim Arduino nie an. Kein Teil deines Programmes nimmt einen Wert entgegen.

KaePie  01.07.2025, 19:46
@BuschLOL

C++ verstehen und dann rausbekommen, wie die APP sendet und du das im Sketch auswertest.