Processing Button/Key

Hallo,
Ich habe ein leichtes Problem, und zwar soll, wenn die Key == 1 gedrückt ist ein Programm namens Sound ausgeführt werden.
Leider gelingt mir dies nicht, denn das Programm läuft nur sofern ich die Taste drücke, wobei es andauern laufen soll.

   if(keyPressed) {
    if (key == '!' || key == '1') {
    s=1;
    } else {
    s=0;
    }

  if(s==1) {
  sound();
  }

Bitte den gesamten Code. Das was Du uns gezeigt hast, kann richtig oder falsch sein, je nachdem was sonst noch programmiert ist. Ansonsten Antworte ich Dir aus den Infos die Du mir gegeben hast:

if(key==1)sound();

Grüße Uwe

Leider Funktioniert dein Code nicht.
Anbei der gesamte Code.
Nochmal das Problem:
Sofern 1 einmal kurz getippt/gedrückt soll das Programm ablaufen bis man später mal die 2 drückt für das zweite Programm.

import ddf.minim.analysis.*;
import ddf.minim.*;

Minim minim;
AudioInput jingle;
FFT fft;
boolean button = false;

int s;


void setup()
{
  size(400, 400, P3D);
  minim = new Minim(this);
  jingle = minim.getLineIn(Minim.STEREO, 2048);
  fft = new FFT(jingle.bufferSize(), jingle.sampleRate()); 
  fft.linAverages(256);
  rectMode(CORNERS);
}

void draw()
{
  background(0);
    
    if(keyPressed) {
    if (key == '!' || key == '1') {
    s=1;
    } else {
    s=0;
    }

      if(s==1) {
      sound();
      }
    }

}
void stop()
{
 
  jingle.close();
  minim.stop();
  
  super.stop();
}


void sound(){
  
  fill(0,255,0);//füllt mit verschiedenen Farben
  fft.forward(jingle.mix);
  int w = int(fft.specSize()/20);
  for(int i = 0; i < fft.avgSize(); i++)
  {
    rect(i*w, height, i*w + w, height - fft.getAvg(i)*10);
  }

}

ups, da habe ich einen Fehler gemacht, weil ich nicht genau gelesen habe. Das ist Processing. Da kann ich Dir nicht helfen. Uwe

Die draw() Funktion in Processing entspricht loop() beim Arduino. Sie wird also endlos immer wieder aufgerufen. Und genau da liegt das Problem. In dem Moment, wo Du die Taste "1" nicht mehr drückst, wird s sofort auf 0 gesetzt. Und somit die Funktion sound() auch nicht mehr aufgerufen.

Ändere Dein Programm folgendermaßen.

s gleich beim deklarieren belegen: int s = 0;

Bei gedrückter Taste "1" s auf 1 setzen, das ist ok. Lass aber den else--Teil mit s=0 weg. Stattdessen prüfst Du, ob key "2" entspricht, und DA setzt Du s auf 0.

Sobald Du nun "1" drückst, wird sound() aufgerufen. Und das dauerhaft, da sich jetzt auch nach dem Loslassen s nicht mehr ändert. Erst wenn Du "2" drückst wird s wieder 0.

Alles klar. Danke MaFu Es konnte auch nicht klappen denn die Abfrage s==1 war ja im if teil für taste gedrückt :D

Edit: Es klappt jedoch sofern 2 gedrückt stoppt 1 nicht.

    if(keyPressed) {
    if (key == '!' || key == '1') {
    s=1;
    m=0;
    } 
    if (key == '"' || key == '2') {
    m=1;
    s=0;} 
    }
    
    
    if(s==1) {
      sound();
    } 
    if(m==1) {
      sound();
    }

Wenn ich das richtig sehe rufst du Sound() bei s=1 und bei m=1 auf.

Wenn du Taste 1 drückst startet sound() weil s = 1 ist Wenn du Taste 2 drückst startet auch sound() weil jetzt m = 1 ist.

Ich würde also sagen das der sound() gestoppt und sofort wieder über m gestartet wird.

ohje so ein doofer Fehler. Danke.