Mit dem Ziel, dass die Biene Farben (minimal 2) erkennen kann - sind die beiden oberen Beiträge entstanden. Daneben war ich mehrmals im #roboternetz.de IRC-Chat, in dem ich auf Schumi gestoßen, der mich eine große Hilfe war. Einen besonderen Dank an ihn - an die anderen, die mir geholfen haben, aber auch! =D>

Das Resultat ist nun folgendes (leider in schlechter Qualität):
http://www.youtube.com/watch?v=Y2hlnTpRI9s

Der Aufbau ist folgender:
Code:
LED1: [AVR]--[R]--[+LED-]--[VCC]
LED2: [AVR]--[R]--[+LED-]--[VCC]
LED3: [AVR]--[R]--[+LED-]--[VCC]
Sensor: [+5V]--[LDR]--+--[R]--[VCC]
      [AVR]-----------|
Ein grüner Gegenstand wird z.T. falsch erkannt, allerdings verwende ich auch grüne Legosteine - die sind etwas dunkel.

Ein Link zum Aufbau: http://img718.imageshack.us/img718/5...0108193606.jpg

Edit: ein Grund für die oben genannten Ungenauigkeiten sind, dass z.T. Licht direkt von der LED auf den Fotowiderstand fällt - deswegen auch die Papiere, allerdings sind diese nicht wirklich gut. Ich muss morgen mal meinen Schrumpfschlauch suchen, aber den muss ich irgendwie verlegt haben (gestern hab ich ihn nicht gefunden).

Edit2: Anbei noch mein Code (ich bin für Verbesserungen offen - ob der "Dummyreadout" so notwendig ist, sei an dieser Stelle dahingestellt):
Code:
#define StatusLEDs_on PORTB |= (1 << PB1) | (1 << PB2);
#define StatusLEDs_off PORTB &= ~((1 << PB1) | (1 << PB2));

#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/delay.h>
#include <nibobee/analog.h>
#include <nibobee/sens.h>
#include <avr/io.h>

// Aufbau:
// Farbe1: [PA0]--[R]--[+LED-]--[GND]
// Farbe2: [PA1]--[R]--[+LED-]--[GND]
// Farbe3: [PA2]--[R]--[+LED-]--[GND]
// Sensor: [+5V]--[LDR]--+--[R]--[GND]
// Sensor: [PA3]---------|

uint16_t getLightValue() {
	int Value = 0;
	int8_t i;

	// Auslesen
	for (i = 0; i < 11; i++) {
		Value = Value + analog_getValue(ANALOG_EXT3);
		delay(50);
	} // for

	return(Value / i);

} // getValue()

int main()
{
	uint16_t grValue, blValue, reValue;
	int8_t i; 
	led_init(); // LED initialisieren
	analog_init(); // Analoge Eingaenge initialisieren
	sens_init(); // Fuehler initialisieren
	enable_interrupts(); // Interrupts aktivieren
	DDRA |= 0b00000111; // PINs als Ausgaenge schalten
	DDRB |= 0b00000110; // PINs als Ausgaenge schalten

	// Dummyreadout
	for (i = 0; i < 11; i++) { 
		grValue = analog_getValue(ANALOG_EXT3);
		delay(50); 
	}

	while (1 == 1) {
		StatusLEDs_on;
		while ((sens_getLeft() != 0) | (sens_getRight() != 0)) {
			StatusLEDs_off;

			// Farbmessungen
			// 1. gruen
			PORTA = 0b00000001; // LED anschalten
			delay(500); // 0,5 Sek. warten
			grValue = getLightValue(); // Wert des Sensors abfragen

			// 2. rot
			PORTA = 0b00000010; // LED anschalten
			delay(500); // 0,5 Sek. warten
			reValue = getLightValue() - 25; // Wert des Sensors abfragen

			// 3. blau
			PORTA = 0b00000100; // LED anschalten
			delay(500); // 0,5 Sek. warten
			blValue = getLightValue() - 75; // Wert des Sensors abfragen
	
			// Auswertung
			if ((grValue > reValue) & (grValue > blValue)) {
				// gruener Gegenstand
				PORTA = 0b00000001;	// gruene LED an
			} else if ((reValue > grValue) & (reValue > blValue)) {
				// roter Gegenstand
				PORTA = 0b00000010;	// rote LED an
			} else if ((blValue > grValue) & (blValue > reValue)) {
				// blauer Gegenstand
				PORTA = 0b00000100;	// blaue LED an
			} else {
				// keine Erkennung
				PORTA = 0b00000111;	// alle LEDs an
			} // if
		} // while - Fuehler
	} // while - Endlosschleife
	return 0;
}
Die 0,5 Sek Wartezeit sind wahrs. viel zu hoch dimensioniert, allerdings stört mich die Wartezeit momentan nicht, weshalb ich bisher keinen Grund sehe, diese zu reduzieren.