Hallo,
vor einiger Zeit hatte ich (Anfänger) euch um Hilfe gebeten bei einem Projekt, bei dem zwei LEDs von einem Poti geregelt werden und Potistellungen abgespeichert werden sollen. Inzwischen funktioniert alles tasächlich einwandfrei, aber mein Code ist völlig aufgeblasen durch zu viele ifs u.ä. und
belegt unmäßig viel Speicher.
Jetzt habe ich ein bisschen dazu gelernt und will den Code neu schreiben auf Basis einer Idee von pylon. Es gibt dabei allerdings ein Problem, an dem ich festhänge. Vielleicht könnt ihr helfen.
Der Code hier ist abgespeckt (normalerweise sind die arrays größer, es sollen mehr Werte gespeichert werden, Anzeige etc.), aber der Kern steht da.
Also:
Die PWM Werte von LED 1 und 2 werden nach Tabelle von einem Poti geregelt, das funktioniert gut. Mit Taster 1 soll dann eine Potistellung im Flash gespeichert werden. Ich habe mal "range" eingetragen (s. Codezeile), der Wert wird auch gespeichert, aber wenn ich diese Stellung incl. LED Werten mit Taster 2 reproduzieren will, machen die LEDs irgendwas, nur nicht das, was sie sollen.
Es fehlt also eine richtige Verbindung zwischen gespeicherte Potistellung und LED Werten.
Habt ihr vielleicht eine Idee dazu?
#include <avr/pgmspace.h>
const int potiMin = 0; // Poti Min
const int potiMax = 1023; // Poti Max
uint8_t led_1 = 9; // LED 1 (rot)
uint8_t led_2 = 10; // LED 2 (grün)
uint8_t led_3 = 12; // LED 3 (gelb)
uint8_t taster_1 = 4; // Taster 1 // Taster und Schalter
uint8_t taster_2 = 2; // Taster 2 // sind elektr. entprellt
uint8_t taster_3 = 7; // Taster 3 (Schalter)
int val_1 = 0; // Status Taster 1
int val_2 = 0; // Status Taster 2
int val_3 = 0; // Status Taster 3
PROGMEM uint8_t pwm_1[] = { 0, 255, 100,50,}; // zum Testen hier
// jeweils nur
PROGMEM uint8_t pwm_2[] = {10, 0, 200, 20,}; // vier PWM Werte
void setup()
{
Serial.begin(9600);
pinMode(taster_1, INPUT);
pinMode(taster_2, INPUT);
pinMode(taster_3, INPUT); // ist Schalter
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
}
void loop()
{
while (digitalRead(taster_3)== 1 ) // Schalter an
{
val_3 = digitalRead(taster_3); // Status Taster 3
if (val_3 == 1)
{
digitalWrite(led_3, HIGH); // gelbe LED an
}
else
{
digitalWrite(led_3, LOW); //gelbe LED aus
}
int poti = analogRead(A0); // Poti auslesen
int range = map(poti, 0, 1023, 0, 4); // Zum Testen nur 4 Bereiche
analogWrite(led_1, pgm_read_byte(pwm_1+range)); // PWM Wert aus Flash an LED 1
analogWrite(led_2, pgm_read_byte(pwm_2+range)); // PWM Wert aus Flash an LED 2
val_1 = digitalRead(taster_1);
if (val_1 == 1) /////////////////////////////////////////
{ // HIER IST DAS ERSTE PROBLEM:
PROGMEM int range; // range speichert zwar die Potistellung, die Verbindung zu den LED Werten
// besteht dadurch aber noch nicht! (s.u.)
}
delay (10);
}
while (digitalRead(taster_3)== 0 ) // Schalter aus
{
val_3 = digitalRead(taster_3); // Status Taster 3
if (val_3 == 1)
{
digitalWrite(led_3, HIGH); // gelbe LED an
}
else
{
digitalWrite(led_3, LOW); //gelbe LED aus
}
int poti = analogRead(A0); // Poti auslesen
int range = map(poti, 0, 1023, 0, 4); // Zum Testen auch nur 4 Bereiche
val_2 = digitalRead(taster_2);
if (val_2 == 1)
{
analogWrite(led_1, pgm_read_byte(pwm_1+range)); // Hier sollte dann die mit Taster 1
analogWrite(led_2, pgm_read_byte(pwm_2+range)); // gespeicherte Potistellung zusammen
// mit den entsprechenden PWM Werten ausgegeben
// werden. Funktioniert aber nicht.
}
delay(10);
}
}
Vielen Dank im Voraus!
stringwalker