Hallo Leute,
Ich bin relativ neu im Umgang mit dem Arduino und C und habe folgendes Problem:
Ich habe eine einzelne RGB LED, wo ich mir die Farbe über einen dreh-Encoder einstelle, was auch schon so funktioniert.
Jetzt mein Problem:
Die FastLED library, welche ich benutze ist so einfach, dass man im Grunde nur das Beispiel "AnalogOutput" kopieren muss, die Variablen kurz umbenennt und schon funktioniert das ganze.
Allerdings möchte ich mit den am Ausgang ankommenden Werten (R,G & B (0-255)) weiterarbeiten, kann diese jedoch nicht auslesen, weil ich nicht weiß, wie diese Variable genau heißt.
also wenn ich den Befehl gebe "Serial.print ()", welche Variable muss ich auswählen, um zb die Variable von Rot zu bekommen?
Ganz unten im Code ist die Stelle zu finden, an der ich nicht weiterkomme.
PS:
Ich habe den Code zum besseren Verständnis kommentiert.
Danke schon mal für eure Hilfe
#include <HSBColor.h>
#include <FastLED.h>
#define REDPIN 9
#define GREENPIN 10
#define BLUEPIN 11
// Initialisierung benötigter Variablen
int Counter = 0;
boolean Richtung;
int Pin_clk_Letzter;
int Pin_clk_Aktuell;
// Definition der Eingangs-Pins
int pin_clk = 3;
int pin_dt = 4;
int button_pin = 5;
// Initialisierung für HSB RGB
int sattigung = 255;
int helligkeit = 255;
void setup()
{
//------------------------- DREH ENCODER-------------------------
// Eingangs-Pins werden initialisiert...
pinMode (pin_clk,INPUT);
pinMode (pin_dt,INPUT);
pinMode (button_pin,INPUT);
// ...und deren Pull-Up Widerstände aktiviert
digitalWrite(pin_clk, true);
digitalWrite(pin_dt, true);
digitalWrite(button_pin, true);
// Initiales Auslesen des Pin_CLK
Pin_clk_Letzter = digitalRead(pin_clk);
Serial.begin (250000);
//-------------------------RGB LED FastLED--------------
// RGB LED PINS
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
}
// Das Programm überprüft, falls eine Änderung der Pin-Zustände sich ereignet hat, welcher der beiden
// Pins sich zuerst geändert hatte, was auf die Drehrichtung schließen lässt.
// Diese Information erhält man, in dem man einen der beiden Pin-Werte aus einem vorherigen
// Durchlauf mit dem Wert des aktuellen Durchlaufs vergleicht.
// Nachdem die Richtung festgestellt wurde, werden die Schritte von der Startposition an gezählt und ausgegeben.
// Ein Drücken auf den Knopf des Drehgebers resettet die aktuelle Position.
//---------------RGB LED -- FastLED library-----------------
void showAnalogRGB( const CRGB& rgb)
{
analogWrite(REDPIN, rgb.r );
// hier hatte ich schon versucht die Variable rgb.r zu printen, das hat aber leider nicht geklappt, weil der compiler dann meckert, dass rgb.r nicht deklariert wurde (ich nehme an, dass die variable nur in der library erkannt wird, nicht im programm selber)
analogWrite(GREENPIN, rgb.g );
analogWrite(BLUEPIN, rgb.b );
}
void loop()
{
//--------------- drehencoder------------------
// Auslesen des aktuellen Statuses
Pin_clk_Aktuell = digitalRead(pin_clk);
if (Counter > 255)
{
Counter = 0;
}
if (Counter < 0)
{
Counter = 255;
}
// Überprüfung auf Änderung
if (Pin_clk_Aktuell != Pin_clk_Letzter)
{
if (digitalRead(pin_dt) != Pin_clk_Aktuell)
{
// Pin_CLK hat sich zuerst verändert
Counter ++;
Counter ++;
Counter ++;
Richtung = true;
}
else
{ // Andernfalls hat sich Pin_DT zuerst verändert
Richtung = false;
Counter--;
Counter--;
Counter --;
}
Serial.println ("Drehung erkannt: ");
Serial.print ("Drehrichtung: ");
if (Richtung)
{
Serial.println ("Im Uhrzeigersinn");
}
else
{
Serial.println("Gegen den Uhrzeigersinn");
}
Serial.print("Aktuelle Position: ");
Serial.println(Counter);
Serial.println("------------------------------");
}
// Vorbereitung für den nächsten Durchlauf:
// Der Wert des aktuellen Durchlaufs ist beim nächsten Druchlauf der vorherige Wert
Pin_clk_Letzter = Pin_clk_Aktuell;
// Reset-Funktion um aktuelle Position zu speichern
if (!digitalRead(button_pin) && Counter!=2)
{
Counter = 2;
Serial.println("Position resettet");
}
//-------------Fast LED-----------
// hier wird der HSV (HSB) Farbwert in einen RGB Farbwert umgewandelt und dann an die drei Ausgangspins weitergeleitet
// Use FastLED automatic HSV->RGB conversion
showAnalogRGB( CHSV( Counter, sattigung, helligkeit) );
//delay(20);
Serial.print (???) // hier weiß ich nicht, welche variable den wert für beispielsweise rot (0-255) hat
}