Probleme mit Arduino und Processing

Hallo, ich habe ein Problem
Meine Freundin hat ein Programm in Processing geschrieben über das man Sounds und Videos steuern kann (abspielen, übereinanderlegen usw)

Das ganze soll über ein arduinoBoard gesteuert werden. Ist aber auch über die normale Tastatur steuerbar.

Wenn man das Processing abspielt passiert folgendes (beim Keyboard):
Drücke ich A, startet VideoA und SoundA und läuft weiter. Drücke ich H startet VideoH und SoundH und läuft weiter.
Drücke ich jedoch B so startet das VideoB und SoundB, sobald ich loslasse hört es auf. (Das selbe für C D E F G)
DAS IST WUNDERBAR, SO SOLLS SEIN.

Steuer ich das ganze jetzt aber über das Arduino passiert folgendes:
ich Drücke A, VideoA und SoundA wird abgespielt und läuft weiter (Perfekt), bei H funktioniert es auch. Drücke ich aber B C D E F G am Arduino, läuft das VideoX und SoundX an, hört aber nicht auf abgespielt zu werden.

Als erstes hatte ich das Problem, das die Videos immer wieder neu gestartet wurden, wenn man die Taste gedrückt hielt, das habe ich nun per ButtonSync behoben. nur kann ich die Videos halt nun nicht mehr stoppen, kann mir jemand helfen? Ich vermute das ich was im Processing umschreiben muss, habe da aber keine Ahnung!

Kann Jemand helfen?

Code Arduino

int ledPin = 13;
int btnA = 12;
int btnB = 2;
int btnC = 3;
int btnD = 4;
int btnE = 5;
int btnF = 6;
int btnG = 7;
int btnH = 8;
int valA;
int valB;
int valC;
int valD;
int valE;
int valF;
int valG;
int valH;
int lastA;
int lastB;
int lastC;
int lastD;
int lastE;
int lastF;
int lastG;
int lastH;

void setup()
{
  Serial.begin(9600);
  pinMode (ledPin, OUTPUT);
  pinMode (btnA, INPUT);
  pinMode (btnB, INPUT);
  pinMode (btnC, INPUT);
  pinMode (btnD, INPUT);
  pinMode (btnE, INPUT);
  pinMode (btnF, INPUT);
  pinMode (btnG, INPUT);
  pinMode (btnH, INPUT);
  digitalWrite (ledPin, LOW);
}

void loop()
{
valA = digitalRead(btnA);
valB = digitalRead(btnB);
valC = digitalRead(btnC);
valD = digitalRead(btnD);
valE = digitalRead(btnE);
valF = digitalRead(btnF);
valG = digitalRead(btnG);
valH = digitalRead(btnH);

  if (valA == HIGH && lastA == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("a");
  }
  if (valB == HIGH && lastB == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("b");
  }
  if (valC == HIGH && lastC == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("c");
  }
  if (valD == HIGH && lastD == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("d");
  }
  if (valE == HIGH && lastE == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("e");
  }
  if (valF == HIGH && lastF == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("f");
  }
  if (valG == HIGH && lastG == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("g");
  }
  if (valH == HIGH && lastH == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("h");
  }
  else {
    digitalWrite (ledPin, LOW);
  }
  
  lastA = valA;
  lastB = valB;
  lastC = valC;
  lastD = valD;
  lastE = valE;
  lastF = valF;
  lastG = valG;
  lastH = valH;
  delay(100);
}

Und hier der Code fürs Processing (hat nicht mehr in den anderen Beitrag gepasst). Danke schon einmal

Code Processing

import ddf.minim.*;
import processing.serial.*;
import processing.video.*;

float chrono; 
float a;
float b;
float c;
float d;
float e;
float f;
float g;
float h;
float av;
float bv;
float cv;
float dv;
float ev;
float fv;
float gv;
float hv;

Minim minim;
AudioPlayer ason;
AudioPlayer hson;
AudioPlayer bson;
AudioPlayer cson;
AudioPlayer dson;
AudioPlayer eson;
AudioPlayer fson;
AudioPlayer gson;


Movie amov;
Movie hmov;
Movie bmov;
Movie cmov;
Movie dmov;
Movie emov;
Movie fmov;
Movie gmov;

char lastChar; 

Serial myPort;

void setup() {
  size (576, 360);
  amov = new Movie(this, "amov.mov");
  chrono=0;

  hmov = new Movie(this, "hmov.mov");
  chrono=0;
  bmov = new Movie(this, "bmov.mov");

  cmov = new Movie(this, "cmov.mov");
  dmov = new Movie(this, "dmov.mov");
  emov = new Movie(this, "emov.mov");
  fmov = new Movie(this, "fmov.mov");
  gmov = new Movie(this, "gmov.mov");


  size(576,360);
  background(#000000);
  a=0;
  h=0;
  b=0;
  c=0;
  d=0;
  e=0;
  f=0;
  g=0;
  av=0;
  bv=0;
  cv=0;
  dv=0;
  ev=0;
  fv=0;
  gv=0;
  hv=0;

  //println(Serial.list());
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void draw()

{ 
  if ( myPort.available() > 0) { 
    char val = myPort.readChar();      
    println(val);
    if (val=='a') { 
      if (a==2) { 
        ason.close();
        a=4;
      }
      if (a<3) {
        a=1;
      }
      if (av<3) {
        av=1;
      }
      if (av==3) {
        av=4;
        amov.stop();
      }
    }
    if (val=='h') { 
      if (h==2) { 
        hson.close();
        h=4;
      }
      if (h<3) {
        h=1;
      }
      if (hv<3) {
        hv=1;
      }
      if (hv==3) {
        hv=4;
        hmov.stop();
      }
    }
    if (val=='b') { 
      if (b<3) {
        b=1;
      }
      if (bv<3) {
        bv=1;
      }
    }
    if (val=='c') { 
      if (c<3) {
        c=1;
      }
      if (cv<3) {
        cv=1;
      }
    }
    if (val=='d') { 
      if (d<3) {
        d=1;
      }
      if (dv<3) {
        dv=1;
      }
    }
    if (val=='e') { 
      if (e<3) {
        e=1;
      }
      if (ev<3) {
        ev=1;
      }
    }
    if (val=='f') { 
      if (f<3) {
        f=1;
      }
      if (fv<3) {
        fv=1;
      }
    }
    if (val=='g') { 
      if (g<3) {
        g=1;
      }
      if (gv<3) {
        gv=1;
      }
    }

    lastChar = val;
  } 
  else {
    if(lastChar != ' ') {
      if (lastChar=='a') {
        if (a==4) {
          a=0;
        }
        if (a==3) {
          a=2;
        }
        if (av==1) {
          av=3;
        }
        if(av==4) {
          av=0;
        }
      }
      if (lastChar=='h') {
        if (h==4) {
          h=0;
        }
        if (h==3) {
          h=2;
        }
        if (hv==1) {
          hv=3;
        }
        if(hv==4) {
          hv=0;
        }
      }
      if (lastChar=='b') {
        bson.close();
        b=0;
        bv=0;
        bmov.stop();
      }
      if (lastChar=='c') {
        cson.close();
        c=0;
        cv=0;
        cmov.stop();
      }
      if (lastChar=='d') {
        dson.close();
        d=0;
        dv=0;
        dmov.stop();
      }
      if (lastChar=='e') {
        eson.close();
        e=0;
        ev=0;
        emov.stop();
      }
      if (lastChar=='f') {
        fson.close();
        f=0;
        fv=0;
        fmov.stop();
      }
      if (lastChar=='g') {
        gson.close();
        g=0;
        gv=0;
        gmov.stop();
      }
      lastChar = ' ';
    }
  }



  println (chrono); 
  if (a==1) {
    minim = new Minim(this);
    ason = minim.loadFile("ason.mp3", 512);
    ason.loop();
    a=3;
    background(0);
  } 
  if (av==1) {
    tint(130, 130);
    amov.read();  
    image(amov, 0, 0);
  } 
  if (av==3) {
    chrono=chrono+1;
    tint(120, 120);
    amov.read();
    if (chrono>1024) {
      amov.stop();
      amov.read();
      chrono=0;
    }   
    image(amov, 0, 0);
  }
  if (h==1) {
    minim = new Minim(this);
    hson = minim.loadFile("hson.mp3", 512);
    hson.loop();
    h=3;
    background(0);
  }
  println (chrono); 
  if (hv==1) {
    tint(130, 130);
    hmov.read();  
    image(hmov, 0, 0);
  } 
  if (hv==3) {
    chrono=chrono+1;
    tint(200, 200);
    hmov.read();
    if (chrono>380) {
      hmov.stop();
      hmov.read();
      chrono=0;
    }  
    image(hmov, 0, 0);
  }
  if (b==1) {
    minim = new Minim(this);
    bson = minim.loadFile("bson.mp3", 512);
    bson.loop();
    b=3;
  } 
  if(bv==1) {
    tint(120, 120);
    bmov.read();  
    image(bmov, 0, 0);
  }
  if (c==1) {
    minim = new Minim(this);
    cson = minim.loadFile("cson.mp3", 512);
    cson.loop();
    c=3;
    background(0);
  }
  if(cv==1) {
    tint(120, 120);
    cmov.read();  
    image(cmov, 0, 0);
  }
  if (d==1) {
    minim = new Minim(this);
    dson = minim.loadFile("dson.mp3", 512);
    dson.loop();
    d=3;
    background(0);
  }
  if(dv==1) {
    tint(120, 120);
    dmov.read();  
    image(dmov, 0, 0);
  }
  if (e==1) {
    minim = new Minim(this);
    eson = minim.loadFile("eson.mp3", 512);
    eson.loop();
    e=3;
    background(0);
  }
  if(ev==1) {
    tint(120, 120);
    emov.read();  
    image(emov, 0, 0);
  }
  if (f==1) {
    minim = new Minim(this);
    fson = minim.loadFile("fson.mp3", 800);
    fson.loop();
    f=3;
    background(0);
  }
  if(fv==1) {
    tint(120, 120);
    fmov.read();  
    image(fmov, 0, 0);
  }
  if (g==1) {
    minim = new Minim(this);
    gson = minim.loadFile("gson.mp3", 512);
    gson.loop();
    g=3;
    background(0);
  }
  if(gv==1) {
    tint(120, 120);
    gmov.read();  
    image(gmov, 0, 0);
  }
}


void keyPressed() {
  if (key=='a') { 
    if (a==2) { 
      ason.close();
      a=4;
    }
    if (a<3) {
      a=1;
    }
    if (av<3) {
      av=1;
    }
    if (av==3) {
      av=4;
      amov.stop();
    }
  }
  if (key=='h') { 
    if (h==2) { 
      hson.close();
      h=4;
    }
    if (h<3) {
      h=1;
    }
    if (hv<3) {
      hv=1;
    }
    if (hv==3) {
      hv=4;
      hmov.stop();
    }
  }
  if (key=='b') { 
    if (b<3) {
      b=1;
    }
    if (bv<3) {
      bv=1;
    }
  }
  if (key=='c') { 
    if (c<3) {
      c=1;
    }
    if (cv<3) {
      cv=1;
    }
  }
  if (key=='d') { 
    if (d<3) {
      d=1;
    }
    if (dv<3) {
      dv=1;
    }
  }
  if (key=='e') { 
    if (e<3) {
      e=1;
    }
    if (ev<3) {
      ev=1;
    }
  }
  if (key=='f') { 
    if (f<3) {
      f=1;
    }
    if (fv<3) {
      fv=1;
    }
  }
  if (key=='g') { 
    if (g<3) {
      g=1;
    }
    if (gv<3) {
      gv=1;
    }
  }
}

void keyReleased() {
  if (key=='a') {
    if (a==4) {
      a=0;
    }
    if (a==3) {
      a=2;
    }
    if (av==1) {
      av=3;
    }
    if(av==4) {
      av=0;
    }
  }
  if (key=='h') {
    if (h==4) {
      h=0;
    }
    if (h==3) {
      h=2;
    }
    if (hv==1) {
      hv=3;
    }
    if(hv==4) {
      hv=0;
    }
  }
  if (key=='b') {
    bson.close();
    b=0;
    bv=0;
    bmov.stop();
  }
  if (key=='c') {
    cson.close();
    c=0;
    cv=0;
    cmov.stop();
  }
  if (key=='d') {
    dson.close();
    d=0;
    dv=0;
    dmov.stop();
  }
  if (key=='e') {
    eson.close();
    e=0;
    ev=0;
    emov.stop();
  }
  if (key=='f') {
    fson.close();
    f=0;
    fv=0;
    fmov.stop();
  }
  if (key=='g') {
    gson.close();
    g=0;
    gv=0;
    gmov.stop();
  }
}

Hallo Prinz_fabian
Erklärst Du mir bitte wie der Arduino die Information versendet, daß ein Taster losgelassen wird?
Mit
if (valA == HIGH && lastA == LOW) {
digitalWrite (ledPin, HIGH);
Serial.println("a");
}
sendest Du ja nur einen Buchstaben, wenn eine Taste den Zustand von nicht gedrückt auf gedrückt wechselt.

Grüße Uwe

Scheinbar überhaupt nicht.

kannst du mir erklären wie das geht?

dies hier dann noch zusätzlich?

if (valA == HIGH && lastA == HIGH) {
   digitalWrite (ledPin, HIGH);
   Serial.println("a"); //und was muss hier hinein?)
 }

[edit]nein ich glaube das ist blödsinn, was ich hier geschrieben habe
[/edit]
[edit]und was soll ich denn senden, wenn der taster nicht mehr gedrückt wird?einen anderen buchstaben, der im processing das laufende video stoppt?[/edit]

Wie erklären wie das geht?
Zusätzlich zu dem Code den Du geschrieben hast, kontrollierst Du einfach auch den Übergang HIGH zu LOW und sendest ein anderes Zeichen zb "B" für Taste b nicht mehr gedrückt. Im processing mußt Du dann, wenn ein B kommt Musik b und Video b unterbrechen. Mit Processing habe ich mich noch nie befasst, darum kann ich dir dort nicht viel sagen.
Grüße Uwe

also ich könnt zum beispiel machen:

if (valB == HIGH && lastB == LOW) {
   digitalWrite (ledPin, HIGH);
   Serial.println("b");
 } 
if (valB == LOW && lastB == HIGH) {
   digitalWrite (ledPin, HIGH);
   Serial.println("x");
 }

und bei x stoppe ich das video per processing?

ja zum Beispiel; ich weiß aber nicht, ob es nicht sinnvoll ist, daß Du weißt, welche Taste losgelassen wurde.
Grüße Uwe

int ledPin = 13;
int btnA = 12;
int btnB = 2;
int btnC = 3;
int btnD = 4;
int btnE = 5;
int btnF = 6;
int btnG = 7;
int btnH = 8;
int valA;
int valB;
int valC;
int valD;
int valE;
int valF;
int valG;
int valH;
int lastA;
int lastB;
int lastC;
int lastD;
int lastE;
int lastF;
int lastG;
int lastH;

void setup()
{
  Serial.begin(9600);
  pinMode (ledPin, OUTPUT);
  pinMode (btnA, INPUT);
  pinMode (btnB, INPUT);
  pinMode (btnC, INPUT);
  pinMode (btnD, INPUT);
  pinMode (btnE, INPUT);
  pinMode (btnF, INPUT);
  pinMode (btnG, INPUT);
  pinMode (btnH, INPUT);
  digitalWrite (ledPin, LOW);
}

void loop()
{
valA = digitalRead(btnA);
valB = digitalRead(btnB);
valC = digitalRead(btnC);
valD = digitalRead(btnD);
valE = digitalRead(btnE);
valF = digitalRead(btnF);
valG = digitalRead(btnG);
valH = digitalRead(btnH);

  if (valA == HIGH && lastA == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("a");
  }
  if (valB == HIGH && lastB == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("b");
  }
  if (valB == LOW && lastB == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("u");
  }
  if (valC == HIGH && lastC == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("c");
  }
  if (valC == LOW && lastC == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("v");
  }
  if (valD == HIGH && lastD == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("d");
  }
  if (valD == LOW && lastD == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("w");
  }
  if (valE == HIGH && lastE == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("e");
  }
  if (valE == LOW && lastE == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("x");
  }
  if (valF == HIGH && lastF == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("f");
  }
  if (valF == LOW && lastF == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("y");
  }
  if (valG == HIGH && lastG == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("g");
  }
  if (valG == LOW && lastG == HIGH) {
    digitalWrite (ledPin, HIGH);
    Serial.println("z");
  }
  if (valH == HIGH && lastH == LOW) {
    digitalWrite (ledPin, HIGH);
    Serial.println("h");
  }
  else {
    digitalWrite (ledPin, LOW);
  }
  
  lastA = valA;
  lastB = valB;
  lastC = valC;
  lastD = valD;
  lastE = valE;
  lastF = valF;
  lastG = valG;
  lastH = valH;
  delay(10);
}

wenn ich von B bis G einfach u v w x y z zuweise, weiß ich ja welcher gedrückt wurde, der entsprechende eben.

irgendwelche denkfehler?
ich muss jetzt nur noch dem processing sagen:
wenn
u stop bmov + bson
v stop cmov + cson
w stop dmov + dson
x stop emov + eson
y stop fmov + fson
z stop gmov + gson

(stark vereinfacht hier natürlich)

Kein Denkfehler den ich finde;
Ja, müßte richtig sein.
Ich würde dann das Led pin 13 ausschaltern, aber das ist nur ein Schönheitsfehler.
Zur Klarheit würde ich nicht u,v.. nehmen sondern B,C,... nehmen dann ist es klarer das "b" Musik b einschaltet und "B" Musik b ausschaltet.
Uwe

es funktioniert mit der animation, zumindest die ersten die ich jetzt getestet habe.

mit klein und großschreibung funktioniert bei arduino und processing?
dann mach ich das so. :slight_smile:
danke für deine hilfe. manchmal braucht man einfach diesen denkanstoß :slight_smile:

liebe grüße
fabian

also,
es funktioniert jetzt, das die videos gestoppt werden, wenn ich den knopf loslasse. jetzt ist nur noch das problem, das ich video A und video H nicht stoppen kann, wenn ich button a / h erneut drücke,
jemand ne idee??

anbei der aktuelle processingcode:

import ddf.minim.*;
import processing.serial.*;
import processing.video.*;

float chrono; 
float a;
float b;
float c;
float d;
float e;
float f;
float g;
float h;
float av;
float bv;
float cv;
float dv;
float ev;
float fv;
float gv;
float hv;

Minim minim;
AudioPlayer ason;
AudioPlayer hson;
AudioPlayer bson;
AudioPlayer cson;
AudioPlayer dson;
AudioPlayer eson;
AudioPlayer fson;
AudioPlayer gson;


Movie amov;
Movie hmov;
Movie bmov;
Movie cmov;
Movie dmov;
Movie emov;
Movie fmov;
Movie gmov;

char lastChar; 

Serial myPort;

void setup() {
  size (576, 360);
  amov = new Movie(this, "amov.mov");
  chrono=0;

  hmov = new Movie(this, "hmov.mov");
  chrono=0;
  bmov = new Movie(this, "bmov.mov");

  cmov = new Movie(this, "cmov.mov");
  dmov = new Movie(this, "dmov.mov");
  emov = new Movie(this, "emov.mov");
  fmov = new Movie(this, "fmov.mov");
  gmov = new Movie(this, "gmov.mov");


  size(576,360);
  background(#000000);
  a=0;
  h=0;
  b=0;
  c=0;
  d=0;
  e=0;
  f=0;
  g=0;
  av=0;
  bv=0;
  cv=0;
  dv=0;
  ev=0;
  fv=0;
  gv=0;
  hv=0;

  //println(Serial.list());
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void draw()

{ 
  if ( myPort.available() > 0) { 
    char val = myPort.readChar();      
    println(val);
    if (val=='a') { 
      if (a==2) { 
        ason.close();
        a=4;
      }
      if (a<3) {
        a=1;
      }
      if (av<3) {
        av=1;
      }
      if (av==3) {
        av=4;
        amov.stop();
      }
    }
    
    if (val=='h') { 
      if (h==2) { 
        hson.close();
        h=4;
      }
      if (h<3) {
        h=1;
      }
      if (hv<3) {
        hv=1;
      }
      if (hv==3) {
        hv=4;
        hmov.stop();
      }
    }
    if (val=='b') { 
      if (b<3) {
        b=1;
      }
      if (bv<3) {
        bv=1;
      }
    }
    if (lastChar=='B') {
        bson.close();
        b=0;
        bv=0;
        bmov.stop();
      }
    if (val=='c') { 
      if (c<3) {
        c=1;
      }
      if (cv<3) {
        cv=1;
      }
    }
    if (lastChar=='C') {
        cson.close();
        c=0;
        cv=0;
        cmov.stop();
    }
    if (val=='d') { 
      if (d<3) {
        d=1;
      }
      if (dv<3) {
        dv=1;
      }
    }
    if (lastChar=='D') {
        dson.close();
        d=0;
        dv=0;
        dmov.stop();
    }
    if (val=='e') { 
      if (e<3) {
        e=1;
      }
      if (ev<3) {
        ev=1;
      }
    }
    if (lastChar=='E') {
        eson.close();
        e=0;
        ev=0;
        emov.stop();
    }
    if (val=='f') { 
      if (f<3) {
        f=1;
      }
      if (fv<3) {
        fv=1;
      }
    }
    if (lastChar=='F') {
        fson.close();
        f=0;
        fv=0;
        fmov.stop();
    }
    if (val=='g') { 
      if (g<3) {
        g=1;
      }
      if (gv<3) {
        gv=1;
      }
    }
    if (lastChar=='G') {
        gson.close();
        g=0;
        gv=0;
        gmov.stop();
    }

    lastChar = val;
  } 
  else {
    if(lastChar != ' ') {
      if (lastChar=='a') {
        if (a==4) {
          a=0;
        }
        if (a==3) {
          a=2;
        }
        if (av==1) {
          av=3;
        }
        if(av==4) {
          av=0;
        }
      }
      if (lastChar=='h') {
        if (h==4) {
          h=0;
        }
        if (h==3) {
          h=2;
        }
        if (hv==1) {
          hv=3;
        }
        if(hv==4) {
          hv=0;
        }
      }
      lastChar = ' ';
    }
  }



  println (chrono); 
  if (a==1) {
    minim = new Minim(this);
    ason = minim.loadFile("ason.mp3", 512);
    ason.loop();
    a=3;
    background(0);
  } 
  if (av==1) {
    tint(130, 130);
    amov.read();  
    image(amov, 0, 0);
  } 
  if (av==3) {
    chrono=chrono+1;
    tint(120, 120);
    amov.read();
    if (chrono>1024) {
      amov.stop();
      amov.read();
      chrono=0;
    }   
    image(amov, 0, 0);
  }
  if (h==1) {
    minim = new Minim(this);
    hson = minim.loadFile("hson.mp3", 512);
    hson.loop();
    h=3;
    background(0);
  }
  println (chrono); 
  if (hv==1) {
    tint(130, 130);
    hmov.read();  
    image(hmov, 0, 0);
  } 
  if (hv==3) {
    chrono=chrono+1;
    tint(200, 200);
    hmov.read();
    if (chrono>380) {
      hmov.stop();
      hmov.read();
      chrono=0;
    }  
    image(hmov, 0, 0);
  }
  if (b==1) {
    minim = new Minim(this);
    bson = minim.loadFile("bson.mp3", 512);
    bson.loop();
    b=3;
  } 
  if(bv==1) {
    tint(120, 120);
    bmov.read();  
    image(bmov, 0, 0);
  }
  if (c==1) {
    minim = new Minim(this);
    cson = minim.loadFile("cson.mp3", 512);
    cson.loop();
    c=3;
    background(0);
  }
  if(cv==1) {
    tint(120, 120);
    cmov.read();  
    image(cmov, 0, 0);
  }
  if (d==1) {
    minim = new Minim(this);
    dson = minim.loadFile("dson.mp3", 512);
    dson.loop();
    d=3;
    background(0);
  }
  if(dv==1) {
    tint(120, 120);
    dmov.read();  
    image(dmov, 0, 0);
  }
  if (e==1) {
    minim = new Minim(this);
    eson = minim.loadFile("eson.mp3", 512);
    eson.loop();
    e=3;
    background(0);
  }
  if(ev==1) {
    tint(120, 120);
    emov.read();  
    image(emov, 0, 0);
  }
  if (f==1) {
    minim = new Minim(this);
    fson = minim.loadFile("fson.mp3", 800);
    fson.loop();
    f=3;
    background(0);
  }
  if(fv==1) {
    tint(120, 120);
    fmov.read();  
    image(fmov, 0, 0);
  }
  if (g==1) {
    minim = new Minim(this);
    gson = minim.loadFile("gson.mp3", 512);
    gson.loop();
    g=3;
    background(0);
  }
  if(gv==1) {
    tint(120, 120);
    gmov.read();  
    image(gmov, 0, 0);
  }
}


void keyPressed() {
  if (key=='a') { 
    if (a==2) { 
      ason.close();
      a=4;
    }
    if (a<3) {
      a=1;
    }
    if (av<3) {
      av=1;
    }
    if (av==3) {
      av=4;
      amov.stop();
    }
  }
  if (key=='h') { 
    if (h==2) { 
      hson.close();
      h=4;
    }
    if (h<3) {
      h=1;
    }
    if (hv<3) {
      hv=1;
    }
    if (hv==3) {
      hv=4;
      hmov.stop();
    }
  }
  if (key=='b') { 
    if (b<3) {
      b=1;
    }
    if (bv<3) {
      bv=1;
    }
  }
  if (key=='c') { 
    if (c<3) {
      c=1;
    }
    if (cv<3) {
      cv=1;
    }
  }
  if (key=='d') { 
    if (d<3) {
      d=1;
    }
    if (dv<3) {
      dv=1;
    }
  }
  if (key=='e') { 
    if (e<3) {
      e=1;
    }
    if (ev<3) {
      ev=1;
    }
  }
  if (key=='f') { 
    if (f<3) {
      f=1;
    }
    if (fv<3) {
      fv=1;
    }
  }
  if (key=='g') { 
    if (g<3) {
      g=1;
    }
    if (gv<3) {
      gv=1;
    }
  }
}

void keyReleased() {
  if (key=='a') {
    if (a==4) {
      a=0;
    }
    if (a==3) {
      a=2;
    }
    if (av==1) {
      av=3;
    }
    if(av==4) {
      av=0;
    }
  }
  if (key=='h') {
    if (h==4) {
      h=0;
    }
    if (h==3) {
      h=2;
    }
    if (hv==1) {
      hv=3;
    }
    if(hv==4) {
      hv=0;
    }
  }
  if (key=='b') {
    bson.close();
    b=0;
    bv=0;
    bmov.stop();
  }
  if (key=='c') {
    cson.close();
    c=0;
    cv=0;
    cmov.stop();
  }
  if (key=='d') {
    dson.close();
    d=0;
    dv=0;
    dmov.stop();
  }
  if (key=='e') {
    eson.close();
    e=0;
    ev=0;
    emov.stop();
  }
  if (key=='f') {
    fson.close();
    f=0;
    fv=0;
    fmov.stop();
  }
  if (key=='g') {
    gson.close();
    g=0;
    gv=0;
    gmov.stop();
  }
}

und a und h werden auch nicht mehr geloopt, was bei der tastatur jedoch funktioniert

Definiere eine Variable zb Aon

Wenn der Taster A gedrückt wird kontrollierst Du auch den Zustand der Variable Aon und schickst dementsprechend den Wert "a" für Start oder "A" für Stop Musik A und gleichzeitig modifizierst Du den Zustand der Vaiablen Aon.

Grüße Uwe

aber wie definiere ich denn "a erneut gedrückt"

if (valA == HIGH && lasta == LOW && Aon == LOW) {
Aon = HIGH;
Serial.println("a"); //einschalten
...
}

if (valA == HIGH && lastA == LOW) {
// tue nichts.
}

if (valA == HIGH && lastA == LOW && Aon == HIGH {
Aon == LOW;
Serial.println("A"); //ausschalten
...
}

Grüße Uwe

ich habe jetzt selbst das gemacht:

...
int btnPushCounterA = 0;
...
void loop()
{
valA = digitalRead(btnA);
...
  if (valA == HIGH && lastA == LOW) {
    digitalWrite (ledPin, HIGH);
    btnPushCounterA++;
    Serial.println("a");
  }
  if (btnPushCounterA == 2) {
    btnPushCounterA = 0;
    Serial.println("A");
  }

deins sieht mir aber schöner aus...
sauberer auf jeden fall.
meins funktionierte auch, werde jetzt aber mal deins probieren
muss ich Aon noch definieren?

[edit]
Leider funktioniert dein Code so nicht Uwe,
wenn ich den button drücke schreibt er sofort hH und würde somit die animation sofort wieder stoppen.
muss wohl doch bei meinem bleiben, oder hast du eine lösung?
[/edit]

Entschuldige; ich hab den Code nicht ausprobiert, da ich hier keinen Arduino habe.
Später mehr.
Grüße Uwe

naja, wie gesagt, meiner funktioniert ja erstmal

Hallo prinz_fabian
Hab meinen Vorschlag überarbeitet: mit delays für Entprellen des Tasters.

if (valA == HIGH && lastA == LOW && Aon == LOW) { // Taste drücken Musik spielt nicht
Serial.println("a"); //einschalten
lastA = HIGH; // aktuellen Wert speichern
delay (50);
...
}

if (valA == LOW && lastA == HIGH && Aon == LOW) { Taste Loslassen Musik spielt
Aon = HIGH; // Wert für Musik ein zwischenspeichern tue nichts.
delay (50);
}

if (valA == HIGH && lastA == LOW && Aon == HIGH { Taste drücken Musik spielt
Serial.println("A"); //ausschalten
lastA == HIGH; // aktuellen Wert speichern
delay (50);
}

if (valA == LOW && lastA == HIGH && Aon == HIGH) { Taste Loslassen Musik spielt nicht
Aon = LOW; // Wert für Musik aus zwischenspeichern.
delay (50);
}

Nicht praktisch ausprobiert, aber müßte funktionieren.

Kann aber noch sehr vereinfacht werden:
if (valA == LOW && lastA == HIGH && Aon == HIGH) { entspricht
if (!valA && lastA && Aon) {

Grüße Uwe

okay, danke!
und was hällst du denn generell von meinem?