88 lines
2.5 KiB
C++
88 lines
2.5 KiB
C++
#include <Wire.h>
|
|
#include "DFRobot_HuskylensV2.h"
|
|
|
|
HuskylensV2 huskylens;
|
|
|
|
// Hinweis: Beim Arduino Uno sind die I2C-Pins fest verdrahtet (A4 = SDA, A5 = SCL).
|
|
// Sie können nicht per Software geändert werden, daher entfallen SDA_PIN / SCL_PIN.
|
|
|
|
// Pin-Definitionen
|
|
int rotPin = 2;
|
|
int blauPin = 5;
|
|
|
|
// Status: welche LED ist aktuell "aktiv"
|
|
enum LedStatus { KEINE, ROT, BLAU };
|
|
LedStatus aktuellerStatus = KEINE;
|
|
|
|
// Für nicht-blockierendes Blinken
|
|
unsigned long letzterWechsel = 0;
|
|
bool ledAn = false;
|
|
const unsigned long blinkIntervall = 500;
|
|
|
|
void setup() {
|
|
pinMode(rotPin, OUTPUT);
|
|
pinMode(blauPin, OUTPUT);
|
|
|
|
Serial.begin(115200);
|
|
Wire.begin(); // Arduino Uno: keine Pin-Parameter möglich/nötig (fix auf A4/A5)
|
|
|
|
Serial.println("Verbinde mit HuskyLens 2...");
|
|
while (!huskylens.begin(Wire)) {
|
|
Serial.println("HuskyLens 2 nicht gefunden! Verkabelung pruefen...");
|
|
delay(500);
|
|
}
|
|
|
|
// Farberkennung aktivieren
|
|
huskylens.switchAlgorithm(ALGORITHM_COLOR_RECOGNITION);
|
|
|
|
Serial.println("HuskyLens 2 verbunden! Bereit.");
|
|
}
|
|
|
|
void loop() {
|
|
// 1. Aktuelles Ergebnis der Farberkennung abholen
|
|
huskylens.getResult(ALGORITHM_COLOR_RECOGNITION);
|
|
|
|
LedStatus neuerStatus = KEINE;
|
|
|
|
if (huskylens.available(ALGORITHM_COLOR_RECOGNITION)) {
|
|
// Prüfen, ob ID2 (Rot) erkannt wurde
|
|
if (huskylens.getCachedResultByID(ALGORITHM_COLOR_RECOGNITION, 2) != NULL) {
|
|
neuerStatus = ROT;
|
|
}
|
|
// Prüfen, ob ID1 (Blau) erkannt wurde
|
|
else if (huskylens.getCachedResultByID(ALGORITHM_COLOR_RECOGNITION, 1) != NULL) {
|
|
neuerStatus = BLAU;
|
|
}
|
|
}
|
|
|
|
// 2. Status nur ändern, wenn sich was geändert hat
|
|
if (neuerStatus != aktuellerStatus) {
|
|
aktuellerStatus = neuerStatus;
|
|
|
|
if (aktuellerStatus == ROT) {
|
|
digitalWrite(blauPin, LOW);
|
|
Serial.println("-> Rote LED aktiv (ID2 erkannt)");
|
|
} else if (aktuellerStatus == BLAU) {
|
|
digitalWrite(rotPin, LOW);
|
|
Serial.println("-> Blaue LED aktiv (ID1 erkannt)");
|
|
} else {
|
|
digitalWrite(rotPin, LOW);
|
|
digitalWrite(blauPin, LOW);
|
|
Serial.println("-> Nichts erkannt, LEDs aus");
|
|
}
|
|
}
|
|
|
|
// 3. Blinken der aktiven LED (nicht blockierend)
|
|
if (aktuellerStatus != KEINE && millis() - letzterWechsel >= blinkIntervall) {
|
|
letzterWechsel = millis();
|
|
ledAn = !ledAn;
|
|
|
|
if (aktuellerStatus == ROT) {
|
|
digitalWrite(rotPin, ledAn ? HIGH : LOW);
|
|
} else if (aktuellerStatus == BLAU) {
|
|
digitalWrite(blauPin, ledAn ? HIGH : LOW);
|
|
}
|
|
}
|
|
|
|
delay(50); // kleine Pause, damit die HuskyLens nicht überflutet wird
|
|
}
|