Ampel Ardui­no WiFi mit Blue­tooth schalten

#include "ArduinoBLE.h"

/* 
  eindeutige  UUID bestimmen: 
  https://www.guidgenerator.com/online-guid-generator.aspx
  https://www.uuidgenerator.net/
  BLERead | BLEWrite | BLENotify
  -> schreiben, lesen, Info
*/
// Name BLE-Service
BLEService LEDSchalten("19b10000-e8f2-537e-4f6c-d104768a1214");

BLEUnsignedCharCharacteristic Auswahl("19b10000-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite | BLENotify);

enum Ampel
{
  ROT = 5,
  GELB,
  GRUEN
};

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

  // pinMode festlegen
  for (int i = ROT; i <= GRUEN; i++)
  {
    pinMode(i, OUTPUT);
  }

  // BLE starten
  if (!BLE.begin()) Serial.println("Bluetooth-Modul konnte nicht gestartet werden!");
  else Serial.println("Bluetooth-Modul erfolgreich gestartet!");

  // Name festlegen (wird in der App angezeigt) und den Service (LEDSchalten) zuweisen
  BLE.setLocalName("LEDs schalten");
  BLE.setAdvertisedService(LEDSchalten);

  // Auswahl als Platzhalter für den in der App gewählten Wert
  LEDSchalten.addCharacteristic(Auswahl);

  // Service LEDSchalten hinzufügen
  BLE.addService(LEDSchalten);

  // Startwert für die Kommunikation schreiben
  Auswahl.writeValue(0);

  // Zuweisung starten
  BLE.advertise();
}

void loop()
{
  // auf die Verbindung zu Geräten warten
  BLEDevice Verbindung = BLE.central();

  // wenn der Arduino mit einem Gerät verbunden ist ...
  if (Verbindung)
  {
    Serial.println("Verbunden ... ");

    // solange der Arduino mit einem Gerät verbunden ist ...
    while (Verbindung.connected())
    {
      /*
        Dezimal -> Hex-Umrechnung
        10 -> A
        11 -> B
        12 -> C
        20 -> 14
        21 -> 15
        22 -> 16
        30 -> 1E
      */
      if (Auswahl.written())
      {
        if (Auswahl.value() == 10)
        {
          Serial.print(Auswahl.value());
          Serial.println(" -> rot ein");
          digitalWrite(ROT, HIGH);
        }

        if (Auswahl.value() == 11)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> gelb ein"));
          digitalWrite(GELB, HIGH);
        }

        if (Auswahl.value() == 12)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> gr\u00fcn ein"));
          digitalWrite(GRUEN, HIGH);
        }

        if (Auswahl.value() == 20)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> rot aus"));
          digitalWrite(ROT, LOW);
        }

        if (Auswahl.value() == 21)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> gelb aus"));
          digitalWrite(GELB, LOW);
        }

        if (Auswahl.value() == 22)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> gr\u00fcn aus"));
          digitalWrite(GRUEN, LOW);
        }

        // Ampel schalten
        if (Auswahl.value() == 30)
        {
          Serial.print(Auswahl.value());
          Serial.println(F(" -> Ampel schalten"));
          digitalWrite(ROT, HIGH);
          delay(5000);
          digitalWrite(GELB, HIGH);
          delay(1000);
          digitalWrite(ROT, LOW);
          digitalWrite(GELB, LOW);
          digitalWrite(GRUEN, HIGH);
          delay(3000);
          digitalWrite(GRUEN, LOW);
          digitalWrite(GELB, HIGH);
          delay(1000);
          digitalWrite(GELB, LOW);
          digitalWrite(ROT, HIGH);
        }
      }
    }
  }
}

Letzte Aktualisierung: 24. Jul 2023 @ 7:51