LEDs mit Blue­tooth schalten

Lese­zeit: 6 Minu­ten

Lösung
Seite als PDF

Mit einer Smart­phone-App sol­len über das Blue­tooth-Modul HM-10 LEDs geschal­tet werden.

Die direk­te Ein­ga­be einer Zahl oder die Bild­schirm­tas­ta­tur der jewei­li­gen App steu­ert die Aktio­nen der LEDs. Vor dem Start einer neu­en Akti­on müs­sen zuerst alle LEDs mit der Tas­te 8 aus­ge­schal­tet werden.

Blue­tooth LEDs schalten

BLE Ter­mi­nalBLE­Se­ri­al tiny

Steue­rung der LEDs über Bluetooth

Akti­onTas­te
Lauf­licht rechts1
Lauf­licht links2
alle LEDs einschalten3
blin­ken­de LEDs4
alle LEDs ausschalten8

Bei­spie­le für Blue­tooth-Modu­le HM-10

Das Blue­tooth-Modul HM-10 arbei­tet mit BLE (Blue­tooth Low Ener­gy) und kann mit Android-Betriebs­sys­te­men und iOS umgehen.

Benö­tig­te Bauteile:

  • 5 LEDs
  • 3 Wider­stän­de 220 Ω (gel­be, rote und grü­ne LED)
  • 2 Wider­stän­de 100 Ω (blaue und wei­ße LED)
  • Blue­tooth-Modul HM-10
  • Lei­tungs­dräh­te

Beach­te die ➨Vor­wi­der­stän­de ver­schie­de­ner LEDs

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­ge der Bau­tei­le zu sehen)

Die eigent­lich vor­ge­se­he­nen Pins RX (0) und TX (1) wer­den beim Hoch­la­den ver­wen­det. Des­halb müss­te das Blue­tooth-Modul vor dem Hoch­la­den her­aus­ge­zo­gen und anschlie­ßend wie­der ein­ge­steckt wer­den.
Über die Biblio­thek Soft­wa­re­Se­ri­al kön­nen die Pins RX und TX ande­ren digi­ta­len Pins zuge­ord­net wer­den. Das Her­aus­zie­hen und Wie­der­ein­ste­cken ent­fällt dann.

Im Kopf des Pro­gramms wer­den die Varia­blen defi­niert. Die ein­ge­bun­de­ne Biblio­thek Soft­wa­re­Se­ri­al ist eine Stan­dard­bi­blio­thek, sie muss nicht instal­liert werden.

# include "SoftwareSerial.h"

// TX -> 2, RX -> 3
SoftwareSerial BTSerial(2, 3);

// Array für die Pins der LEDs
int LED[5] = {4, 5, 6, 7, 8};

// über Bluetooth vom Smartphone gesendeter Wert
char btDaten;

Der set­up-Teil defi­niert ledig­lich die pin­Mo­des für die LEDs und star­tet den über Soft­wa­re­Se­ri­al zuge­wie­se­nen Seri­el­len Moni­tor BTSerial:

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

  // auf serielle Verbindung warten
  while (!Serial) {;}

  // pinMode LEDs
  for (int i = 0; i <= 4; i ++)
  {
    pinMode(LED[i], OUTPUT);
  }

  // Menü im Seriellen Monitor
  Serial.println("Men\u00fc:");
  Serial.println("1 -> Lauflicht vor");
  Serial.println("2 -> Lauflicht zur\u00fcck");
  Serial.println("3 -> alle an");
  Serial.println("4 -> blinkende LEDs");
  Serial.println("5 -> alle aus");
}

Im loop-Teil liest BTSe​ri​al​.read() den ein­ge­ge­be­nen Wert und ord­net ihm die ent­spre­chen­de Akti­on zu.

void loop()
{
  // vom Smartphone gesendeten Wert lesen
  btDaten = BTSerial.read();

  switch (btDaten)
  {
    case '1':
    {
      BTSerial.print("Lauflicht vor");

      // Status true übergeben
      LauflichtVor(true);
      break;
    }
    
    case '2':
    {
      BTSerial.print("Lauflicht zur\u00fcck");

      // Status true übergeben
      LauflichtZurueck(true);
      break;
    }
    
    case '3':
    {
      BTSerial.print("alle an");
      AlleLEDAus();
      AlleLEDAn();
      break;
    }
    case '4':
    {
      BTSerial.print("alle blinken");

      // Status true übergeben
      LEDBlinken(true);
      break;
    }

    case '5':
    {
      BTSerial.print("alle aus");
      AlleLEDAus();
      break;
    }
  }
}

Die ver­schie­de­nen Aktio­nen wer­den jeweils in einer Funk­ti­on aus­ge­la­gert. Beach­te die Kommentare.

void loop()
{
  // vom Smartphone gesendeten Wert lesen
  btDaten = BTSerial.read();

  switch (btDaten)
  {
    case '1':
    {
      BTSerial.println("Lauflicht rechts");
      BTSerial.println("Neue Aktion: 8 -> alle aus");

      // Status true übergeben
      LauflichtRechts(true);
      break;
    }
    
    case '2':
    {
      BTSerial.println("Lauflicht links");
      BTSerial.println("Neue Aktion: 8 -> alle aus");

      // Status true übergeben
      LauflichtLinks(true);
      break;
    }
    
    case '3':
    {
      BTSerial.println("alle an");
      BTSerial.println("Neue Aktion: 8 -> alle aus");

      AlleLEDAus();
      AlleLEDAn();
      break;
    }
    case '4':
    {
      BTSerial.println("alle blinken");
      BTSerial.println("Neue Aktion: 8 -> alle aus");
      
      // Status true übergeben
      LEDBlinken(true);
      break;
    }

    case '8':
    {
      BTSerial.println("alle aus");
      AlleLEDAus();
      break;
    }
  }
}

void LauflichtRechts(bool Status)
{
  // Status ist true
  while (Status)
  {
    for (int i = 0; i <= 4; i ++)
    {
      /*
        Eingabe Smartphone abfragen
        wenn Wert 8 (ausschalten):
        -> for-Schleife unterbrechen
        -> Status auf false setzen,
        -> while wird unterbrochen
      */
      btDaten = BTSerial.read();

      if (btDaten == '8')
      {
        Status = !Status;
        BTSerial.println("alle aus");
        AlleLEDAus();
        break;
      }

      // aktuelle LED i einschalten
      digitalWrite(LED[i], HIGH);
      delay(100);
      
      // aktuelle LED i ausschalten
      digitalWrite(LED[i], LOW);
    }
  }
}

void LauflichtLinks(bool Status)
{
  // Status ist true
  while (Status)
  {
    for (int i = 4; i >= 0; i --)
    {
      btDaten = BTSerial.read();
      if (btDaten == '8')
      {
        Status = !Status;
        BTSerial.println("alle aus");
        AlleLEDAus();
        break;
      }

      // aktuelle LED i einschalten
      digitalWrite(LED[i], HIGH);
      delay(100);

      // aktuelle LED i ausschalten
      digitalWrite(LED[i], LOW);
    }
  }
}

void AlleLEDAn()
{
  for (int i = 0; i <= 4; i ++)
  {
    // aktuelle LED i einschalten
    digitalWrite(LED[i], HIGH);
  }
}

void LEDBlinken(bool Status)
{
  // Status ist true
  while (Status)
  {
    for (int i = 0; i <= 4; i ++)
    {
      btDaten = BTSerial.read();
      if (btDaten == '8')
      {
        Status = !Status;
        BTSerial.println("alle aus");
        AlleLEDAus();
        break;
      }

      // aktuelle LED i einschalten
      digitalWrite(LED[i], HIGH);
    }
    delay(100);

    for (int i = 0; i <= 4; i ++)
    {
      btDaten = BTSerial.read();
      if (btDaten == '8')
      {
        Status = !Status;
        BTSerial.println("alle aus");
        AlleLEDAus();
        break;
      }

      // aktuelle LED i ausschalten
      digitalWrite(LED[i], LOW);
    }
    delay(100);
  }
}

void AlleLEDAus()
{
  for (int i = 0; i <= 4; i ++)
  {
    // aktuelle LED i ausschalten
    digitalWrite(LED[i], LOW);
  }
}

Blue­tooth mit der App ArduinoBlue


Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 10. Apr 2024 @ 13:05