Go Down

Topic: Processing Button/Key (Read 1 time) previous topic - next topic

bendoben

Mar 29, 2011, 06:41 pm Last Edit: Mar 29, 2011, 06:47 pm by bendoben Reason: 1
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.

Code: [Select]
   if(keyPressed) {
    if (key == '!' || key == '1') {
    s=1;
    } else {
    s=0;
    }

  if(s==1) {
  sound();
  }
http://benduino.blogspot.com/

uwefed

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:
Quote
if(key==1)sound();


Grüße Uwe

bendoben

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.
Code: [Select]

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);
  }

}
http://benduino.blogspot.com/

uwefed

#3
Mar 30, 2011, 12:19 am Last Edit: Mar 30, 2011, 12:21 am by uwefed Reason: 1
ups, da habe ich einen Fehler gemacht, weil ich nicht genau gelesen habe. Das ist Processing. Da kann ich Dir nicht helfen.
Uwe

MaFu

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.
_______
Manfred

bendoben

#5
Mar 30, 2011, 12:56 am Last Edit: Mar 30, 2011, 01:01 am by bendoben Reason: 1
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.

Code: [Select]

    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();
    }
http://benduino.blogspot.com/

MueThoS

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.

bendoben

ohje so ein doofer Fehler.
Danke.
http://benduino.blogspot.com/

Go Up