Hey,
ich hätte da mal ein Problem.
Habe einen Sketch geschrieben über welchen ich mit einem Button eine Sequenz aufnehmen kann und diese dann wieder abspielen und einer Led dementsprechend leuchtet.
Das funktioniert auch alles so wie ich es möchte.
recbutton gedrückt halten
über button1 die Sequenz einspielen
recbutton loslassen
playbutton drücken
Sequenz wird abgespielt
Jetzt zu meinem Problem ich würde gerne die menge der Buttons in Leds verdoppeln. Bedeutet ich habe zwei Button von denen jeweils eine der Leds gesteuert wird.
Somit hätte ich folgende Zustände:
1 off 2 off
1 on 2 on
1 on 2 off
1 off 2 on
mein bisheriger Code
const int recbutton = 2;
const int playbutton = 3;
const int recled = 6;
const int playled = 7;
const int relayled1 = 8;
const int relayled2 = 9;
const int button1 = 4;
const int button2 = 5;
int trigger1 = 0;
int trigger2 = 0;
int rec = 0;
int play = 0;
long startTime; // millis-Wert beim ersten Drücken der Taste
long duration; // Variable für die Dauer
long zeit1[200]; //arry zum speichern des timings butto 1 und 2 off
int i1 = 0; //zeit zwischenablage
long zeit2[200]; //arry zum speichern des timings
int i2 = 0; //zeit zwischenablage
long zeit3[200]; //arry zum speichern des timings
int i3 = 0; //zeit zwischenablage
long zeit4[200]; //arry zum speichern des timings
int i4 = 0; //zeit zwischenablage
long value1[200]; //arry zum speichern button 1 und 2 on or off
int a1 = 0; //on or off zwischenablage
long value2[200]; //arry zum speichern on or off
int a2 = 0; //on or off zwischenablage
long value3[200]; //arry zum speichern on or off
int a3 = 0; //on or off zwischenablage
long value4[200]; //arry zum speichern on or off
int a4 = 0; //on or off zwischenablage
int x = 0; //pos in den Arrays
int y; //Anzahl der aufgenommenen Einträge
void setup() {
Serial.begin(9600);
pinMode(recbutton, INPUT);
pinMode(playbutton, INPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(recled, OUTPUT);
pinMode(playled, OUTPUT);
pinMode(relayled1, OUTPUT);
pinMode(relayled2, OUTPUT);
}
void loop()
{
if(digitalRead(recbutton) == HIGH)
{
Recording();
}
if (digitalRead(playbutton) == HIGH)
{
Playback();
}
}
void Recording(){
while(digitalRead(recbutton) == HIGH)
{
digitalWrite(recled, HIGH);
if(digitalRead(button1) == LOW) // Sobald die Taste gedrückt wurde
{
startTime = millis();
digitalWrite(relayled1, LOW);
digitalWrite(relayled2, LOW);
while(digitalRead(button1) == LOW) ; // Warten, solange die Taste gedrückt wird
long duration = millis() - startTime;
zeit1[x] = duration;
value1[x] = 0;
Serial.print("button 1 off ");
Serial.print(x);
Serial.print(" ");
Serial.println(zeit1[x]);
x++; //rückt eine Stelle weiter in Array zeit
}
else
{
digitalWrite(relayled1, HIGH);
startTime = millis();
while(digitalRead(button1) == HIGH) ; // Warten, solange die Taste gedrückt wird
long duration = millis() - startTime;
zeit1[x] = duration;
value1[x] = 1;
Serial.print("button 1 on ");
Serial.print(x);
Serial.print(" ");
Serial.println(zeit1[x]);
x++; //rückt eine Stelle weiter in Array zeit
}
}
digitalWrite(recled,LOW);
}
void Playback(){
y = x; //speichert anzahl der aufgenommenen Einträge(x) in y
x = 0; //liest an position 0 in Arrays
Serial.println("play");
digitalWrite(playled, HIGH);
digitalWrite(playbutton, HIGH);
while(x < y)
{
i1 = zeit1[x]; //legt aktuelle Zeit in i
a1 = value1[x]; //legt in a ob button an oder aus war
if(a1 == 0)
{
digitalWrite(relayled1, LOW); //on
i1 = zeit1[x];
delay(i1);
x++;
}
else
{
digitalWrite(relayled1, HIGH); //off
i1 = zeit1[x];
delay(i1);
x++;
}
}
digitalWrite(playbutton, LOW);
digitalWrite(playled, LOW);
digitalWrite(relayled1, LOW);
Serial.println("stop");
}
Ich bekomme es nicht hin zwei Button gleichzeitig abzufragen und dabei die Zeit zu messen wie lange sie gedrückt sind.
Hoffe mir kann hier jemand helfen