Pages: [1]   Go Down
Author Topic: Processing Button/Key  (Read 1031 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
   if(keyPressed) {
    if (key == '!' || key == '1') {
    s=1;
    } else {
    s=0;
    }

  if(s==1) {
  sound();
  }
« Last Edit: March 29, 2011, 11:47:06 am by bendoben » Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

}
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ups, da habe ich einen Fehler gemacht, weil ich nicht genau gelesen habe. Das ist Processing. Da kann ich Dir nicht helfen.
Uwe
« Last Edit: March 29, 2011, 05:21:44 pm by uwefed » Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 9
Posts: 642
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Code:
    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();
    }
« Last Edit: March 29, 2011, 06:01:58 pm by bendoben » Logged


NRW
Offline Offline
Sr. Member
****
Karma: 1
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ohje so ein doofer Fehler.
Danke.
Logged


Pages: [1]   Go Up
Jump to: