Dann kannst du mit den Tastern B, C, D eine Zustandsvariable setzen, mit der du dann unterschiedliche Aktionen auslöst.
Und, wie schon Uwe geschrieben hat, beim drücken von A eine Zustandsvariable toggeln
(if (Taste A pressed) PWMSet = !PWMSet) und den Speicherplatz zu selektieren.
Hallo,
also ich habe mich wirklich redlich bemüht, eure Vorschläge umzusetzen, habe einiges auf den Arduino Seiten gelernt, aber ich hänge jetzt fest. Zwar kann ich Taster abfragen und irgend etwas einschalten, aber es gelingt mir einfach nicht, das z.B. mit switch/case, if... etc. sinnvoll zu verbinden.
Könnt ihr bitte noch einmal einen Blick auf meinen Code werfen und mich beraten?
Ich habe an der Stelle, wo es nicht weitergeht, nochmal notiert, was da passieren soll. Steht zwar auch oben, aber ist hier für euch vielleicht hilfreich.
#include <avr/pgmspace.h>
const int potiMin = 0; // Poti Minimum
const int potiMax = 1023; // Poti Maximum
uint8_t ledPin1 = 9; // LED 1 an digital pin 9
uint8_t ledPin2 = 10; // LED 2 an digital pin 10
int tasterRec = 2; // merkt sich auf Tastendruck die aktuellen PWM Werte
int tasterWrite1 = 4; // gibt die ersten "gemerkten" Werte an ledPin1 und ledPin2 aus
int tasterWrite2 = 7; // gibt die als zweites "gemerkten" Werte an den ledPin1 und ledPin2 aus
int tasterPoti = 8; // führt zurück zum Potimodus, PWM Werte entsprechen Potistellung
int tasterStatusRec; // Variable zur Aufname des Status TasterRec
int tasterStatusWrite1; // Variable zur Aufname des Status TasterWrite1
int tasterStatusWrite2; // Variable zur Aufname des Status TasterWrite2
int tasterStatusPoti; // Variable zur Aufname des Status TasterPoti
PROGMEM uint8_t outvalue1[] =
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, // Liste der möglichen Werte für LED1
// hier stehen z.Zt. hauptsächlich nur Platzhalter
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63} ;
PROGMEM uint8_t outvalue2[] =
{
25,24,53,52,51,25,24,8,2,24,25,4,3,2,241,39, // Liste der möglichen Werte für LED2
// hier stehen z.Zt. ebenfalls nur Platzhalter
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
2,1,0,9,8,21,6,25,4,3,212,211,210,209,208,207,
20,20,20,26,2,2,21,199,198,197,16,15,94,93,12,10,};
void setup()
{
Serial.begin(9600); // serielle Schnittstelle initialisieren
pinMode(tasterRec,INPUT); // Pin 2 ist Input
pinMode(tasterWrite1,INPUT); // Pin 4 ist Input
pinMode(tasterWrite2,INPUT); // Pin 7 ist Input
pinMode(tasterPoti,INPUT); // Pin 8 ist Input
}
void loop()
{
int poti = analogRead(A0); // Poti auslesen
int range = map(poti, 0, 1023, 0, 63); // Poti Gesamtbereich in 64 Bereiche unterteilen
Serial.print("B "); // "B x", zeigt aktuellen Potibereich an
analogWrite(ledPin1, pgm_read_byte(outvalue1+range)); // PWM Wert aus Flash an LED 1
analogWrite(ledPin2, pgm_read_byte(outvalue2+range)); // PWM Wert aus Flash an LED 2
/* Und hier fangen die Probleme an!
Mit dem tasterRec sollen die PWM Werte, die gerade durch die aktuelle Potistellung an den Leds anliegen, im Speicher irgendwie
"markiert" werden, damit ich sie später mit tasterWrite1 - unabhängig von der Potistellung - wieder an den ledPins ausgeben kann.
Das gleiche möchte ich einer zweiten Potistellung und den den dazu gehörenden PWM Werten mit tasterRec und TasterWrite2 erreichen.
tasterPoti muss mich zurück in den Potimodus bringen, damit wieder die der momentanen Potistellung entsprechenden PWM Werte
an den ledPins ankommen
*/
tasterStatusRec = digitalRead(tasterRec);
if(tasterStatusRec == HIGH)
...? // Ich kann doch die PWM Werte hier nicht nochmal speichern, sie sind doch schon im Flash...?
tasterStatusWrite1 = digitalRead(tasterWrite1);
if(tasterStatus == HIGH)
tasterStatusWrite2 = digitalRead(tasterWrite2);
if(tasterStatus == HIGH)
tasterStatusPoti = digitalRead(tasterPoti);
if(tasterStatus == HIGH)
delay(10);
}
Danke für eure Hilfe und Grüße von
stringwalker