Hallo,
ich versuche gerade einen LED RGB Stripe anzusteuern und zwar auf folgende Weise.
Ich habe knapp 1m RGB 12 V LED stripe, dieser bekommt über ein 12v Netzteil eine Stromversorgung bei 12+ und über 3 TIP 120 NPN Transistor steuer ich die einzelnen Farbkanäle an.
Das funktioniert soweit super.
Weiterhin ist ein Taster verbaut, ein Relais und ein Drehregler. Das Relais ist erst einmal uninteressant, dieses steuert anschließend den Strom für 2 Ultraschallvernebler.
Folgendes soll passieren:
- Taster wird betätigt und die Werte R und G gehen jeweils auf 132 das funktioniert mit einem delay wird dann das Relais angesteuert. Das funktioniert soweit.
- der Drehregler soll den Wert R und G erhöhen mit rechts dreh und mit links dreh verkleinern.
- bei lösen des Tasters, soll der R und G Wert langsam von dem aktuellen Wert sinken. Momentan startet dieser bei 255 und senkt sich dann auf 0
Der Drehregler wird bereits erkannt und ich kann eine Wertveränderung vornehmen, allerdings springt dieser immer gleich auf 0 also startet von vorne und steigt nicht stufenweise wie im loga[i] vorgesehen beim senken der Werte das gleiche Spiel. Das Stufenweise steigen klappt beim Start mit dem Taster problemlos.
Wie schaffe ich es, dass der Anfangswert Loga[i] der zum Anfang auf 132 steigt "gespeichert" und nicht durch den Bereich void update bei einer drehung auf 0 gesetzt wird? Denn wenn ich dort einen Wert habe, könnte ich diesen beim Lösen des Tasters einsetzen und von diesem wert runter dimmen.
hier einmal dazu der Code:
#define red 9
#define blue 10
#define green 11
void update();
int start = 1;
int rela = 1;
int Taster = 6;
int relais = 7;
int pinA = 4;
int pinB = 3;
int pinAstateCurrent = LOW;
int pinAStateLast = pinAstateCurrent;
int i;
int loga[64] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
16, 18, 20, 22, 25, 28, 30, 33, 36, 39, 42, 46, 49,
53, 56, 60, 64, 68, 72, 77, 81, 86, 90, 95, 100, 105,
110, 116, 121, 127, 132, 138, 144, 150, 156, 163,
169, 176, 182, 189, 196, 203, 210, 218, 225, 233, 240, 248, 255
};
int akt_wert = loga[i];
void setup() {
Serial.begin (9600); // Initialise the serial monitor
pinMode (pinA, INPUT); // Set PinA as input
pinMode (pinB, INPUT); // Set PinB as input
attachInterrupt(digitalPinToInterrupt(pinB), update, CHANGE);
analogWrite(red, i);
analogWrite(green, i);
analogWrite(blue, 0);
}
void loop() {
if (digitalRead(6) == HIGH && start == 1) {
for (int i = 0; i <= 45; i++)
{
analogWrite(red, loga[i]);
analogWrite(green, loga[i]);
Serial.println(loga[i]);
rela = 2;
delay(100);
}
if (akt_wert == 132 );
start = 2;
}
if (digitalRead(6) == LOW && start == 2) {
for (int i = 63; i >= 0; i--)
{
analogWrite(red, loga[i]);
analogWrite(green, loga[i]);
Serial.println(loga[i]);
rela = 1;
delay(100);
}
if (akt_wert == 0 );
start = 1;
}
if (rela == 2) {
digitalWrite(7, HIGH);
}
if (digitalRead(7) == HIGH && rela == 1) {
digitalWrite(7, LOW);
}
}
void update() {
pinAstateCurrent = digitalRead(pinA);
if ((pinAStateLast == LOW) && (pinAstateCurrent == HIGH)) {
if (digitalRead(pinB) == HIGH) {
if (i < 60) {
i++;
}
Serial.println("Right");
Serial.println(loga[i]);
} else {
if (i > 0) {
i--;
}
Serial.println("Left");
Serial.println(loga[i]);
}
analogWrite(red, loga[i]);
analogWrite(green, loga[i]);
}
Ich bin dankbar für jeden Hinweis, denn ich habe so langsam keine Ahnung mehr was hier tue oder eine Idee für eine Lösung.