#include #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 }