Anfängerfrage, Daten vom Arduino per Bluetooth auf Smartphone senden

Hallo,

Bin relativ neu in dem Fachbereich. Hätte da mal eine Frage.

ich möchte gern folgendes machen: ich habe einen Sensor, der die Umgebungstemperatur misst. Die Daten werden vom Arduino ausgelesen und mithilfe von 2 LEDs wird mir das Ergebnis angezeigt. Eine blaue LED leuchtet auf wenn die Temp. kleiner 15 ° ist, eine rote wenn die Temp. größter 15° ist.
Das klappt soweit. Nun würde ich gerne das Ergebnis meiner Messung auf meinem Smartphone ablesen können. Also per Bluetooth bspw. eine Nachricht ans Handy senden wie "Temp >15" o.ä.

Hätte evtl. jemand ein paar Tipps wie ich das am Besten einrichte?
Als Bluetooth Modul hatte ich an den HC-05 gedacht. Eignet der sich?

Vielen Dank bereits im voraus. :slight_smile:

Android-Smartphone? Da könnte ich Dir die App Virtuino empfehlen :wink:

DerLehmi:
Android-Smartphone? Da könnte ich Dir die App Virtuino empfehlen :wink:

Ah genau ja, Android. Hatte ich vergessen zu erwähnen.

Btw, benutze übrigens ein Arduino Micro.

Hallo,

du musst das HC05 entsprechend konfigurieren oder mit der Standardeinstellung klar kommen.
Das HC05 ist Master oder Slave fähig. Das HC06 nur Slave, was kein Nachteil sein muss.
Wenn dir bewusst wird das die Kommunikation auch nur seriell abläuft auf seitens des Arduinos, kannste loslegen.
Das BT Modul an eine freie serielle anklemmen und los gehts.
Auf dem Smartphone erstmal eine BT Terminal App installieren damit du beim entwickeln und debuggen etwas siehst.
Wenn das HC als Slave fungiert, mit dem Smartphone das BT Modul suchen und verbinden.
Dann Anfrage an Arduino senden und Antwort abwarten. Wenn das alles klappt kannste irgendeine App nehmen.

grundlegendes: Bluetooth-Kochbuch für den Arduino | Arduino-Hannover
Ob dein Modul 5V verträgt oder nicht musst du selbst wissen. Es gibt verschiedene Ausführungen.

Hallo,

also habe das mit dem Bluetooth soweit hinbekommen, allerdings momentan noch ein anderes Problem. Zunächst war es so, dass wenn die Temp. >15 ° war, die rote LED angefangen hat zu blinken, allerdings immer im Wechsel mit der blauen. Somit wurd mir auf meinem Smartphone abwechselnd angezeigt "Temp>15" und "Temp<15". Das soll ja so nicht sein. Habe mein Programmcode nun etwas verändert, nun ist es allerdings so, dass die rote LED angeht, sobald die Temp. > 15° ist, aber dann die ganze Zeit an bleibt, selbst wenn die Temp. wieder unter 15° sinkt. Ich hau mal mein Ausschnitt vom Programmcode rein, vielleicht findet ja jemand den Fehler:

if (temp >= 15.0)  
{
 while(temp >= 15.0)
 {
 digitalWrite(blue, LOW);
 digitalWrite(red, HIGH);
 BT.println("Temp>15");


 }
}
else (temp < 15.0)
{

 digitalWrite(blue, HIGH);
 digitalWrite(red, LOW);
 BT.println("Temp<15");
 
}

Setze Deinen Sketch bitte in Codetags(oben links </>). Das kannst Du auch nachträglich noch tun.
Wofür soll das while gut sein?

Gruß Tommy

Hallo,

dein beschriebener Effekt liegt an deiner while Bedingung. while ist hier sowieso unpassend.

Die Ausdrücke der while Schleife werden solange ausgeführt solange die while Bedingung wahr ist.
Wird bei dir temp irgendwann einmal > 15, dann wird die while Bedingung wahr und du hast eine Endlosschleife.
Warum Endlosschleife? Weil du innerhalb der while nicht mehr temp aktualisierst. Selbst wenn du das jetzt korrigierst, haste eine Endlosschleife und Dauerblockade solange temp > 15. Deswegen nimm besser nur einmal if / else und es wird funktionieren.

okay danke für die schnelle antwort.
while hab ich rausgemacht. nun is es aber komischerweise so, dass die blaue LED dauerhaft leuchtet, und die rote LED schnell blinkt bei temp>15. Hat jemand ne Idee woran das liegen könnte? :sweat_smile:

Grüße

Wie sollen wir wissen, wie Dein Sketch nach der Änderung aussieht? Wir sind keine Hellseher.

Gruß Tommy

sorry, vergessen einzufügen

if (temp >= 15.0)  
{

digitalWrite(blue, LOW);
digitalWrite(red, HIGH);
BT.println("Temp>15");


}
else (temp < 15.0)
{

digitalWrite(blue, HIGH);
digitalWrite(red, LOW);
BT.println("Temp<15");

}

hoffe die Codetags sind richtig :smiley:

Hallo,

ist das drücken des Buttons wirklich so schwer?

zum Code, wenn dann so

if (temp >= 15.0) 
{
  digitalWrite(blue, LOW);
  digitalWrite(red, HIGH);
  BT.println("Temp>15");
}
else 
{
  digitalWrite(blue, HIGH);
  digitalWrite(red, LOW);
  BT.println("Temp<15");
}

Vielen Dank.
Habe die Codetags jetzt auch eingefügt.

Eine Frage hätte ich noch: Gibt es auch eine Möglichkeit die Bluetooth-Benachrichtigung auf bspw. jede Minute festzusetzen, ohne dass die LEDs verzögert reagieren? Weil wenn ich nun z.B. 'delay(60000)' [für jede Minute] einsetze, reagieren die LEDs ja auch immer mit einer Minute Verzögerung.

Viele Grüße

Du hast das Problem richtig erkannt.
Dann musst Du auf delay() verzichten und mit millis() arbeiten.

Schau Dir dazu BlinkWithoutDelay und die Nachtwächtererklärung an.

Gruß Tommy