Pages: [1]   Go Down
Author Topic: Problème de connexion entre Arduino et Processing  (Read 1704 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, je suis newbie en Arduino et Processing
et cette année pour un projet de diplôme j'ai décidé de me lancer vers l'inconnue.

J'ai réalisé un système d'interaction avec des diodes laser, Processing et Arduino.
Lorsqu'un laser est activé, un son + une vidéo sont générés.
 Jusque là tout va bien.
Je programme donc avec Processing ( utilisation fraîche de cette année aussi) tout fonctionne parfaitement quand j'utilise à la place d'Arduino, mon clavier, mais lorsque je relie l'Arduino à mon ordinateur... rien ne va plus, il m'affiche ce qui suit.

Exception in thread "Animation Thread" java.lang.NullPointerException
      at LASERHARPE2_pde.keyReleased(LASERHARPE2_pde.java:155)
      at processing.core.PApplet.handleKeyEvent(PApplet.java:1756)
      at processing.core.PApplet.dequeueKeyEvents(PApplet.java:1735)
      at processing.core.PApplet.handleDraw(PApplet.java:1437)
      at processing.core.PApplet.run(PApplet.java:1327)
      at java.lang.Thread.run(Thread.java:613)

je ne suis pas encore capable de déchiffrer ce genre de code, donc je ne sais pas ce qu'il en ressort.

J'ai huit lasers, chaque laser a un nom : laser a, b, c, d, e ,f ,g ,h.
et sur Processing chaque laser à une fonction.

Voici mon code :


/**
  * This sketch demonstrates how to use the <code>addListener</code> method of a <code>Recordable</code> class.
  * The class used here is <code>AudioPlayer</code>, but you can also add listeners to <code>AudioInput</code>,
  * <code>AudioOutput</code>, and <code>AudioSample</code> objects. The class defined in waveform.pde implements
  * the <code>AudioListener</code> interface and can therefore be added as a listener to <code>groove</code>.
  */
float chrono;
float a;
float b;
float c;
float d;
float e;
float f;
float g;
float h;
import ddf.minim.*;
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;

import processing.video.*;
Movie amov;
Movie hmov;
Movie bmov;
Movie cmov;
Movie dmov;
Movie emov;
Movie fmov;
Movie gmov;
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;}

void draw()

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


J'aimerais savoir si l'erreur vient de mon code
ou peut être de l'Arduino ( ce que je ne pense pas )


Merci. smiley
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3626
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
tout fonctionne parfaitement quand j'utilise à la place d'Arduino, mon clavier, mais lorsque je relie l'Arduino à mon ordinateur... rien ne va plus
Ils sont reliés comment?
Si ton arduino est connecté en USB, il n'est pas vu comme un clavier par le PC mais comme une interface série.
Logged

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

Oui par USB c'est ça.
Logged

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

quand je veux écrire en fichier texte : a b c d e f g h. avec les laser cela fonctionne, mais c'est pas sous processing.
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3626
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si j'ai bien compris c'est l'arduino qui doit envoyer les informations à Processing.
Il faut donc que tu remplaces tes fonctions keyPressed et keyReleased par des fonctions qui vont attendre un caractère venant par la liaison série (virtuelle) constituée par ton arduino.
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec cette fonction à rajouter en bas du programme ;

Code:
void serialEvent(Serial p) {
  inString = p.readString();
  myPort.clear();
}
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

Ok,
j'ai mis le code à la fin du programme
et quand j'active Run il est écrit dans la fenêtre d'erreur : Cannot find a class or type named "Serial"

Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je n'avais pas fais attention à ça, tu n'as pas de liaison avec Arduino depuis processing dans ton code, il te manque quelques choses comme ça :

http://processing.org/learning/libraries/simpleread.html


Poste également le code que tu as sur ton arduino.
« Last Edit: June 15, 2010, 11:59:57 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

J'ai oublié de préciser que dans le montage de l'arduino
l'usb ne se connecte pas directement à l'arduino mais à part
ca ressemble à ca => http://www.practicalarduino.com/projects/virtual-usb-keyboard

c'était pour que l'ordinateur accepter plus facilement les port usb normal.
Logged

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

voici le code de mon arduino



#include "UsbKeyboard.h"

int ledPin = 13;
int trigger = 200;

void setup()
{
  pinMode (ledPin, OUTPUT);
  digitalWrite (ledPin, LOW);
  
  TIMSK0&=!(1<<TOIE0);
  cli();
 
  usbDeviceDisconnect();
  delayMs(250);
  usbDeviceConnect();

  sei();    

}

void loop()
{

  UsbKeyboard.update();
  
  if (analogRead(0) < trigger) {

    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_A);
  }

  if (analogRead(1) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_B);
  }
  
  if (analogRead(2) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_C);
  }
  
  if (analogRead(3) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_D);
  }
  
  if (analogRead(4) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_E);
  }
  
  if (analogRead(5) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_F);
  }
  
  if (analogRead(6) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_G);
  }
 
  if (analogRead(7) < trigger) {
    digitalWrite (ledPin, HIGH);
    UsbKeyboard.sendKeyStroke(KEY_H);
  }

  else {
    digitalWrite (ledPin, LOW);
    }
}

void delayMs(unsigned int ms)
{
  for (int i = 0; i < ms; i++) {
    delayMicroseconds(1000);
  }
}
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne comprend pas trop le branchement de ton usb  :-?

Je ne sais pas si la librairie processing.Serial fonctionne de cette façon.

Normalement elle permet d'afficher tout les ports lus avec la fonction :

Code:
println(Serial.list());
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

j'ai changé le code de l'arduino pour utiliser le port usb de l'arduino et non pas celui de l'exterieur


int ledPin = 13;
int trigger = 200;

void setup()
{
  Serial.begin(9600);
  pinMode (ledPin, OUTPUT);
  digitalWrite (ledPin, LOW);
}

void loop()
{

  if (analogRead(0) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("a");
    delay (100);
  }
  if (analogRead(1) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("b");
    delay (100);
  }
  if (analogRead(2) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("c");
    delay (100);
  }
  if (analogRead(3) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("d");
    delay (100);
  }
  if (analogRead(4) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("e");
    delay (100);
  }
  if (analogRead(5) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("f");
    delay (100);
  }
  if (analogRead(6) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("g");
    delay (100);
  }
  if (analogRead(7) < trigger) {
    digitalWrite (ledPin, HIGH);
    Serial.println("h");
    delay (100);
  }
  else {
    digitalWrite (ledPin, LOW);
    }
}


mais je ne sais pas si il est bon
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ça devrait jouer.

Dans ton prog Processing tu rajoutes ça dans le setup :

Code:
myPort.bufferUntil(lf);

et ça dans les déclarations :

Code:
int lf = 10;  // 10 = LN (new line Feed) en ascii

Tu mets en place l'appel de la librairie Serial et ça devrait jouer avec le petit bout de code que je t'avais déjà mentionné.
« Last Edit: June 16, 2010, 12:41:51 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

Ca fonctionne smiley

super
merci  smiley
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonne nouvelle  smiley-wink
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Pages: [1]   Go Up
Jump to: