Daten vom HC-06 einlesen

Guten Tag,

ich versuche Werte von einer Android-App am Arduino via Bloetooth mit dem HC-06 einzulesen. Dabei habe ich noch einige Probleme, ich hoffe, dass mir jemand helfen kann.

Was wird verwendet?

  • Arduino Uno
  • Bluetoothmodul HC-06
  • Android App “Android Bluetooth Controller”

Wie ist alles angeschlossen?

  • Arduino Pin 10=> HC-06 Pin TX
  • Arduino Pin 11 => HC-06 Pin RX
  • Arduino 3,3V => HC-06 VCC
  • Arduino GND => HC-06 Pin GND

Sketch:

#include <SoftwareSerial.h>

SoftwareSerial BT(10, 11);
char a;

void setup()
{

  BT.begin(9600);
  Serial.begin(9600);

}

void loop()
{

  if (BT.available()) 
    {
    a = (BT.read());         
    Serial.print(a);
    Serial.println("");
   }

}

Fehlerbeschreibung:
Wenn ich das Bluetoothmodul mit dem Smartphone verbinde und die App starte, dann funktioniert schon mal ganz viel: Wenn ich z.B. einen Schalter innerhalb der App auf dem Smarthone drücke, erscheint im seriellen Monitor die entsprechende Meldung.
Bei Tastern und Schaltern funktioniert alles so, wie ich es erwaret habe.
Wenn ich einen Schiebeschalter (Slider) auswähle und die entsprechenden Werte (0 bis 255) im seriellen Monitor anschaue, dann werden die nicht als Zahl dargestellt sondern in drei Ziffern und auf drei Zeilen verteilt.

So siehts in der App aus:

s. Bild 1 - es wird ein Slider mit einem Wert, z.B. 119 angezeigt.

So siehts im seriellen Monitor aus:

s. Bild 2 - es erscheint die Zahl 119 aber in folgendem Format:
1
1
9

Meine Frage:
Was muss geändert werden, damit ich den “ganzen Wert” (z.B. 119) erhalte? Ich will dann diesen Wert an einen PWM-Ausgang weiterleiten und z.B. die Geschwindigkeit bei einem Motor zu ändern.

Vielen Dank für eure Antworten. Bitte beachtet, dass ich ein Laie (naja, interessierter Bastler) bin, was das Programmieren betrifft.

C.Abt

Forum 2.JPG

Schließe das Senden auf dem Handy mit einem CR oder LF ab.

Dann geht das:

const int SERIAL_BUFFER_SIZE = 8;
char serialBuffer[SERIAL_BUFFER_SIZE];

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (readSerial(Serial) == true)
  {
    int value = atoi(serialBuffer);
    Serial.println(value);
  }
}

bool readSerial(Stream& stream)
{
  static byte index;

  while (stream.available())
  {
    char c = stream.read();

    if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
    {
      serialBuffer[index++] = c;
    }
    else if ((c == '\n' || c == '\r') && index > 0)
    {
      serialBuffer[index] = '\0';
      index = 0;
      return true;
    }
  }
  return false;
}

Liest erst mal alles bis zum Endzeichen in einen C String ein. Dieser wird dann in einen Integer konvertiert.

SoftwareSerial geht genauso wenn du einfach das SoftwareSerial Objekt (BT) an readSerial() übergibst