Finaler Code für die I2C-Kommunikation zwischen Arduino und Husky Lens 2.

Finaler Code für die I2C-Kommunikation zwischen Arduino und Husky Lens 2.
This commit is contained in:
glmacedo 2026-07-19 10:31:51 +02:00
parent 112e9b39b9
commit b0ce169210

View file

@ -0,0 +1,88 @@
#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
}