Arduino empfängt Bluetooth Daten nur wenn mit USB Kabel an PC angeschlossen ist

Hallo,

ich habe eine App für Windows Phone programmiert mit der ich Daten an einen Arduino Uno senden möchte. Dazu verwende ich das HC-05 Modul.
Wenn der Arduino nun mit dem USB Kabel an den PC angeschlossen ist, werden die Daten richtig empfangen.
Das Problem ist, wenn ich eine andere Stromquelle nutze, werden plötzlich keine Daten mehr empfangen.
Das verbinden mit dem Modul selbst funktioniert jedoch immer.
Zum testen habe ich folgendes einfaches Programm geschrieben:

int data;

void setup()
{
Serial.begin(9600);
Serial.println("setup works");
}

void loop()
{
if (Serial.available())
{
data = Serial.read();
Serial.write(data);
Serial.println("works");
}
}

An einem anderen PC, an dem keine Arduino Software installiert ist, tritt das selbe Problem auf. Auf meinem PC muss ich trotzdem in keinen Benutzer einloggen, damit ich Daten empfangen kann.

Könnt ihr mir helfen?
mfg Christian

christian9718:
An einem anderen PC, an dem keine Arduino Software installiert ist, tritt das selbe Problem auf. Auf meinem PC muss ich trotzdem in keinen Benutzer einloggen, damit ich Daten empfangen kann.

Was?

Wie hast du das BT Modul verdrahtet mit dem Arduino? Du kannst nicht USB und das BT zeitgleich nutzen an einem Serial Port.

Emuliere dir eine weitere serielle Schnittstelle per AltSoftSerial:
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Auf dem UNO ist da TX = 9 und RX = 8

Mit der kannst du dann BT machen und gleichzeitig per Serial Daten an den PC schicken

Du kannst keine 2 Geräte (BT-Modul und UAB-serialadapter an der seriellen Schnittstelle anschließen.

In Deinem Fall wirken die Schutzwiderstände des USB-Adapters wie ein Pullup oder Pulldown-Widerstand und ermöglicht so das Funktionieren des BT - Moduls. Was sagt die Beschreibung des HC-05 Moduls? Braucht es Widerstände?

Grüße Uwe

Das Modul habe ich an Port 0 und 1 am Arduino angeschlossen, während ich den Arduino per USB mit Spannung versorge.

Das mit den Widerständen hab ich noch nicht bedacht

Port 0 und 1 ist falsch wie oben bereits geschrieben. Darüber kommuniziert der Atmega32u4 mit dem Atmega328 bei aktiver USB Verbindung.

Muss ich Port 8 und 9 dann im Programm irgendwie definieren?

Nein. Das ist festgelegt, da die Lib mit einem Timer arbeitet und der festgelegte Pins verwendet

Du inkludierst die Library:

#include <AltSoftSerial.h>

Du erstellst ein AltSoftSerial Objekt:

AltSoftSerial altSerial;

Und dann kannst du wie bei Serial auch die normalen Methoden verwenden:

altSerial.begin(9000);
...
altSerial.available();
....
altSerial.read();

sschultewolter:
Port 0 und 1 ist falsch wie oben bereits geschrieben. Darüber kommuniziert der Atmega32u4 mit dem Atmega328 bei aktiver USB Verbindung.

Hast Du eine neue Version des UNO? auf meinen sitzt ein ATmega16U2 als USB Adapter.
Grüße Uwe

So, jetzt funktioniert es mithilfe von AltSoftSerial, vielen Dank! :slight_smile:

@uwefed: hab meinen vor ein bis zwei Monaten gekauft, woher weiß ich welche Version ich habe?

uwefed:
Hast Du eine neue Version des UNO? auf meinen sitzt ein ATmega16U2 als USB Adapter.
Grüße Uwe

  1. Auf meinem auch. Hatte mich da vertan. Habe nur noch die SMD Variante vom Uno R3.

@Christian, was heut dein Arduino gekostet? > 20€, dann sollte es ein Orignaler R3 sein. Entweder mit Genuino oder Arduino Aufdruck spielt hier keine Rolle. Wenn das Teil jedoch nur wenige Euros gekostet hat, kommt es vermutlich aus der Bucht (ebay) und ist kein Orginaler Arduino sondern meist lediglich eine Fälschung (PCB Layout). Aber auch gibt es hier andere Forks/Nachbauten, die keinen Atmega16U2 sondern zB einen FTDI für die Serielle Schnittstelle nutzen.

christian9718:
@uwefed: hab meinen vor ein bis zwei Monaten gekauft, woher weiß ich welche Version ich habe?

Das war ironisch zu sschultewolter gemeint.
Grüße Uwe

@sschultewolter: meiner ist ein original arduino, hab extra darauf geachtet :wink:

@uwe: aso, ups^^