|
||||
|
|
Bei einer Pinnensteuerung finden es viele Skipper als besonders angenehm, die Ruderlage stets
"Im Griff" zu haben, also ohne Hinzusehen stets perfekt über die Ruderlage informiert zu sein.
// Mit BLE Server
//Mit Farbe
// Mit Beruhigung der LED-Nummer per Array
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include "Adafruit_NeoPixel.h"
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
#define PIN 4 // den Stift für den Anschluss des Farbbands angeben
#define NUMPIXELS 96 // die Anzahl der LEDs auf dem Streifen angeben
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int r = 0; //Rotanteil, Wertebereich 0-255
int g = 0; //Grünanteil, Wertebereich 0-255
int b = 0; //Blauanteil, Wertebereich 0-255
int i=0; //Zählvariable
int position = 0; //Variable für Position des Lichtpunkts Wertebereich 0 - 99
int leuchtstaerke = 0; //Variable für Leuchtstärke Wertebereich 0 - 255
int rudergeber = 0; // Nummer des Ports (GPOI0), von dem der Ruderwinkel gelesen wird.
int LDR = 1; // Nummer des Ports (GPIO1), von dem die Helligkeit gelesen wird.
int ruderwinkel = 0; // Ruderwinkel, wie er vom Geber gelesen wird.
int helligkeit = 0; // Vom ADC gelesener Helligkeitswert
int lednummer = 0; // Nummer der aktuell leuchtenden LED. Wertebereich 0-49
int ledarray [10]; //Array zur Beruhigung von lednummer, 10 Elemente 0-9
int ilednummer = 0; // Zählvariable für das Array
void setup() {
strip.begin(); // Aktivieren von Neopixel
Serial.begin(115200);
Serial.println("Starting BLE work!");
BLEDevice::init("Ruderlagegeber mit Server"); // Das ist der Device-Name
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Zu übertragende Daten"); // zu übertragende Daten*******************************
pService->start();
// BLEAdvertising *pAdvertising = pServer->getAdvertising(); // this still is working for backward compatibility
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06); // functions that help with iPhone connections issue
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
Serial.println("Characteristic defined! Now you can read it in your phone!");
}
void loop() {
//Serial.print(" Leuchtstärke: "); //Testausgabe für Serial Monitor
//Serial.print(leuchtstaerke); // Testausgabe für Serial Monitor
ruderwinkel = analogRead(rudergeber); // Rudergeber lesen.
helligkeit = analogRead(LDR); // Helligkeit vom LDR gelesen
leuchtstaerke = helligkeit * -0.5 ; // Leuchtstärke der LED abhängig vom Umgebungslicht
//Serial.print(" Ruderwinkel: ");
//Serial.print(ruderwinkel); //gelesenen Ruderwinkel über Serial Monitor ausgeben
lednummer = ruderwinkel / 35 ; // LEDNummer aus Ruderwinkel berechnen
if (lednummer < 0) lednummer = 0; // negative LED-Nummern ausschließen
if (lednummer > 95) lednummer = 95; // LED-Nummern > 99 ausschließen
Serial.print(" LED-Nummer: ");
Serial.print(lednummer); // Akuelle LED-Nummer anzeigen.
Serial.println(" "); //Im Serial Monitor eine neue Zeile
strip.clear(); // alle LEDs ausschalten
beruhigeLEDnummer(); //LEDnummer beruhigen
bestimmeFarbe(); // Je nach LEDnummer Farbe einstellen
strip.setBrightness(leuchtstaerke); //Leuchtstärke einstellen
strip.setPixelColor(lednummer, strip.Color(r,g,b)); // LED vorbereiten
if (lednummer == 47) strip.setPixelColor(48, strip.Color(0,255,0)); //Bei 24 Nummer 25 (grün) zusätzlich wenn Mitte
if (lednummer == 48) strip.setPixelColor(47, strip.Color(255,0,0)); //Bei 25 Nummer 24 (rot) zusätzlich wenn Mitte
strip.show(); // LED einschalten
strip.clear(); // alle LEDs ausschalten, zum Neuanfang des Programms
delay (1000);
}
//********************Subroutineoutine zur Farbbestimmung********************************************
void bestimmeFarbe(){ if(lednummer<=47){ r = 255; g = 0; b = 0; }//LEDnummer 0-24 ROT
if(lednummer>=48){ r = 0; g = 255; b = 0; }//LEDnummer 25-49 GRÜN
}
//*******************************************************************************************
//******************** Subroutine zur Beruhigung von LEDnummer****************************
void beruhigeLEDnummer() { // Routine zur Beruhigung des Wertes für die LEDnummer
if (ilednummer <14) { // wenn das Array noch nicht voll beschrieben ist
ledarray[ilednummer]==lednummer; // Arrayzelle mit zuletzt gelesenen und berechneten LEDnummer beschreiben
lednummer = (ledarray[0]+ledarray[1]+ledarray[2]+ledarray[3]+ledarray[4]+ledarray[5]+
ledarray[6]+ledarray[7]+ledarray[8]+ledarray[9]+ledarray[10]+ledarray[11]+ledarray[12]+ledarray[13]+
ledarray[14]+ledarray[15]) / 16 ;
// Beruhigten Wert für lednummer berechnen.
ilednummer = ilednummer +1;// LEDnummer für den nächsten Durchlauf vorbereiten.
}
else if (ilednummer >15) { // Falls Zähler für LEDnummer schon zu hoch, auf 0 zurücksetzen.
ilednummer =0;
}
}
//******************************************************************************************
|
|||
© |