Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// partage de liens //// une carte des membres//// (apéros) codelab


#1 2015-06-03 00:08:42 Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Interface web cartographie Arduino



Bonjour a tous,

Je travail actuellement sur un projet de cartographie a base d'une Arduino et d'une Raspberry Pi.
Le principe est de pouvoir contrôler et visualiser les données d'un cartographieur gérée par une Arduino via le port série par le biais d'une interface web locale gérée par la Raspberry afin de pouvoir y accéder avec une tablette.

Je suis débutant sur processing, mais commence a bien prendre la main. J'arrive sans aucun soucis à contrôler mon Arduino depuis la Raspberry par le port série en utilisant java. Mais j'ai des difficultés pour le reste.

1. J'ai vu qu'il n'était pas possible d'utiliser le port série si on exportait en .js (j'utilise Apache2 comme serveur web). Avez vous une solution pour ceci étant donné que j'ai aucune connaissance en php ou autre langage web et que la communication peut uniquement se faire par le port série.

2. J'aimerai pouvoir afficher un graphique (de ce style http://img11.hostingpics.net/thumbs/mini_571417Capturede769cran20150602a768235749.png) ainsi que des boutons de contrôle sur la même page un peu comme ceci :
http://img11.hostingpics.net/thumbs/mini_890558hemeshgui.png
J'ai réussi sans problème à réaliser un graphique 3D avec la library iGeo (première photo), mais combinée avec la library controlP5, cette dernière prend le dessus et la fenêtre devient noire sans le graphique mais uniquement le bouton.

Quelle library 3D me conseillez vous donc pour réaliser cette interface sachant que je n'ai besoin que d'une vue 3D ?(pas des autres vue disponibles avec iGeo)

Merci d'avance.

Hors ligne

 

#2 2015-06-03 00:48:11 Re : Interface web cartographie Arduino

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 743

Re: Interface web cartographie Arduino



Bonsoir,

Pour ton premier point, je ne comprends l'utilisation de la carte Arduino, la Raspberry Pi à des ports série, 3,3v certes mais bien fonctionnelle si tu adjoints quelques transistors.

Pour répondre à ton deuxième point, la gestion d'une scène 3D avec des contrôleurs, va voir les exemples :
File > Examples … > Contributed Librairies > ControlP5 > Extra >ControlP5controllerOnTop3D

Il faut dessiner ta scène 3D entre ces deux instructions :

Hors ligne

 

#3 2015-06-03 10:22:04 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Merci de ta réponse!

Pour l'arduino, le cartographieur n'utilise pas un simple arduino mais un capable de gérer des moteurs 1.7 A, des capteurs et je ne peut reprogrammer tout ca ^^

Serait il possible de combiner controlP5 avec une library comme iGeo afin de gérer plus facilement la 3D (déplacement, zoom)? Ou auriez vous un exemple de code pour gérer ceci?

Pour l'interface web, auriez vous une solutions?

Merci d'avance.

Hors ligne

 

#4 2015-06-03 15:10:26 Re : Interface web cartographie Arduino

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Interface web cartographie Arduino



salut chth26 ! comment va chthu ? smile Bon, ça part un peu dans tous les sens ces explications... (j'avais écrit une partie de ce message avant ta réponse)

chth26 a écrit:

J'arrive sans aucun soucis à contrôler mon Arduino depuis la Raspberry par le port série en utilisant java.

Euh, java..? mais avec Processing sur le Raspberry Pi ? possiblement grâce à cette méthode ?? : http://scruss.com/blog/2014/01/07/proce … %E2%98%BA/ (A noter que sur cette carte, il n'est pas possible d'utiliser, entre autres choses, le mode P3D ni OpenGL, qui ne sont pas supportés, et par conséquent pas non plus la librairie iGeo.)

citation :

J'ai vu qu'il n'était pas possible d'utiliser le port série si on exportait en .js (j'utilise Apache2 comme serveur web)

Grâce à mon décodeur big_smile je crois comprendre que tu souhaiterais faire un sketch Processing qui interrogerait (à distance donc) le port série pour récupérer les données (avec la librairie serial) et les afficher ensuite sur la tablette sous la forme d'une image 3D (générée par la librairie iGeo) qu'on pourrait manipuler avec des curseurs (librairie ControlP5). Et puis au final, faire fonctionner le tout dans un navigateur grâce à Processing.js...
Le problème, c'est que Processing.js n'émule (en partie) que les librairies standards de Processing, mais pas les librairies java additonnelles (et si c'était le cas, comme le sketch est exécuté dans le navigateur, le port série serait celui de la tablette).

En même temps, pour la partie graphique, avec ton exemple de surface topographique qui correspond à un tableau de points (ou de sphères) qui varient seulement en hauteur (et en couleur), c'est complètement faisable avec les fonctions 3D supportées par Processing.js. Mais vu les mauvaises performances résultant de toutes ces couches de langages interprétés, et cette quantité de points, ça sera certainement extrêmement lourd pour une tablette, et encore plus à faire bouger... à moins peut-être d'utiliser une surface composée de triangles, avec une liste de vertices ???

Pour ce type d'animation en WebGL dans le navigateur, three.js serait bien plus indiqué (exemple: http://threejs.org/examples/#webgl_particles_random) mais du coup c'est du javascript, finalement la seule manière raisonnable de programmer pour le navigateur (et tout plein de librairies aussi).
Pour continuer sur Processing, mieux vaut compiler le sketch pour Android, on obtiendra certainement de meilleurs résultats, et iGeo et ControlP5 pourraient probablement fonctionner.

Pour ce qui est de la récupération des données à représenter via le serveur Apache, ça se fait généralement avec un fichier JSON ou XML, qu'on peut modifier seulement lorsque de nouvelles données sont disponibles, ou bien générer dynamiquement à l'aide d'un script CGI, à chaque fois que le fichier est demandé au serveur web. Sur le Raspberry, le plus simple serait de faire ça avec script Python qui communiquerait avec le port série.

Si tu préfères interagir directement et dans les deux sens avec l'Arduino, y'a possibilité de se servir, en javascript, de socket.io (ou simplement des websockets) dans le navigateur pour communiquer directement avec le port série via une passerelle sous Node.js (sur le RPi) toujours en javascript. Là encore, ça peut se faire assez facilement, voir cet exemple : http://lowpowerlab.com/blog/2013/10/11/ … -and-demo/ , et puis ça te permettrait de te la péter dans  les soirées mondaines web 2.0 ! cool

Dernière modification par Nicolas Lhommet (2015-06-03 15:23:25)

Hors ligne

 

#5 2015-06-03 15:39:59 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Salut Nicolas,

effectivement j'arrive a contrôler mon arduino grâce a Processing directement depuis la Raspberry.

Tout ça m'a l'air quand même assez difficile a mettre en place. Le must serait de pouvoir piloter et voir le graphique sur la même page web. Après si par le web ce n'est pas possible, lancer l'application java en pilotant la Raspberry par vnc est-il envisageable niveau performances ? Et pour la 3D si ce n'est pas possible, pour simplement réaliser l'image en 2D sans pouvoir la piloter est-il plus adéquate ?

Hors ligne

 

#6 2015-06-03 16:20:23 Re : Interface web cartographie Arduino

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 743

Re: Interface web cartographie Arduino



Bonjour,

Pour que Processingjs puisse accéder au port série :
http://danialk.github.io/blog/2014/04/2 … in-action/

Je n'ai pas testé, bon courage.

Hors ligne

 

#7 2015-06-03 20:40:47 Re : Interface web cartographie Arduino

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Interface web cartographie Arduino



Mushussu a écrit:

Pour que Processingjs puisse accéder au port série :
http://danialk.github.io/blog/2014/04/2 … in-action/

Salut, oui, c'est exactement ce dont je parlais dans le dernier paragraphe de mon précédent message : node.js utilisé comme passerelle entre le javascript du navigateur (via le module socket.io) et le port série (vie la module serialport), enfin c'est du classique et c'est pas les exemples qui manquent sur Internet.

Comme le sketch est transformé en Javascript par Processing.js, les fonctions et les variables globales peuvent être utilisées réciproquement avec du code Javascript ajouté directement dans la même page. Enfin, tout ceci est expliqué en long et en large sur le site : http://processingjs.org/articles/jsQuic … ocessingjs

chth26 a écrit:

Tout ça m'a l'air quand même assez difficile a mettre en place. Le must serait de pouvoir piloter et voir le graphique sur la même page web.

C'est possible grâce à la solution ci-dessus qui permet d'établir une communication bi-directionnelle, c'est pour ça que j'ai utilisé le mot "interagir"... et quand je disais " ça peut se faire assez facilement", évidemment, c'est pas du clef en main, faut prendre le temps se familiariser un minimum, mais c'est pas beaucoup de code. En plus d'étudier les exemples des liens qu'on t'a trouvé, voici des tutoriels assez simples et didactiques en français, c'est tout ce qu'il y a à savoir, puis à associer :
http://atinux.developpez.com/tutoriels/ … socket-io/
http://blog.nicolasc.eu/articles/npotw- … lport.html

Mais tu peux aussi faire sans node.js, vu qu'il existe aussi des librairies websocket pour Processing (java) qui permettent de communiquer directement avec un navigateur récent (de la même manière, avec un peu de code Javascript dans la page), ça conviendrait pour ton sketch qui contrôle le port série sur ton RPi 

citation :

lancer l'application java en pilotant la Raspberry par vnc est-il envisageable niveau performances ?

mouais, déjà commence par faire quelques essais d'animation graphique sur le Rasberry avec Processing, histoire te faire une idée, tu m'en diras des nouvelles lol
 

citation :

Et pour la 3D si ce n'est pas possible, pour simplement réaliser l'image en 2D sans pouvoir la piloter est-il plus adéquate ?

Pas forcement, la "lourdeur" viendra plutôt des nombreux éléments à dessiner pour chaque image de l'animation, et on peut pas faire pour l'instant de 3D sur Processing avec la RPi (pour ça, je te conseille OpenFrameworks, en C++)

Sinon voici une possibilité qui reprend exactement le même principe que la passerelle node.js entre le navigateur et le port série, mais ENTIÈREMENT programmée avec Processing :
- sur le Processsing de la Rapsberry Pi : utiliser la libraire netP5 (en tcp) pour envoyer et recevoir sur le réseau local les messages du port série
- faire un sketch pour l'interface graphique avec Processing-Android sur la tablette, intégrant également la librairie netP5 pour communiquer avec le sketch du Raspberry

La librairie netP5 permet d'envoyer et de recevoir des message par le réseau, et devrait fonctionner sur Android, (contrairement à la librairie "net" intégrée). Il s'installe en même temps que oscP5, mais il n'est pas nécessaire d'utiliser le protocole OSC, et netP5 suffira pour envoyer de simples chaînes de caractères en ascii, voir : http://forum.processing.org/one/topic/n … 63165.html

Bon courage !

Dernière modification par Nicolas Lhommet (2015-06-06 06:16:42)

Hors ligne

 

#8 2015-06-04 13:52:02 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Merci beaucoup de vos réponses.

J'ai commencé a réaliser une interface juste pour piloter la sonde pour le moment, mais j'obtiens ce message d'erreur, vous auriez une idée ?

juin 04, 2015 1:45:18 PM controlP5.ControlBroadcaster printMethodError
Grave: An error occured while forwarding a Controller event, please check your code at Mesurer
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at controlP5.ControlBroadcaster.invokeMethod(Unknown Source)
	at controlP5.ControlBroadcaster.callTarget(Unknown Source)
	at controlP5.ControlBroadcaster.broadcast(Unknown Source)
	at controlP5.Controller.broadcast(Unknown Source)
	at controlP5.Button.setValue(Unknown Source)
	at Commandes.creationBouton(Commandes.java:133)
	at Commandes.setup(Commandes.java:45)
	at processing.core.PApplet.handleDraw(PApplet.java:2361)
	at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240)
	at processing.core.PApplet.run(PApplet.java:2256)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at Commandes.Mesurer(Commandes.java:98)
	... 15 more

Voila le code de Processing :

import controlP5.*;
import processing.serial.*;

ControlP5 cp5;
Serial serial;
Textfield BoxTension;

int Pas = 10;
String tension;

void setup()
{
  size(800,600);
  //strokeWeight(2);
  //strokeJoin(ROUND);
  //stroke(255);
  smooth();
  cp5 = new ControlP5(this);
  serial = new Serial(this, Serial.list()[9], 9200);
  
  creationBouton("Haut", 100, 10, 80, 80, 130, 130, 130);
  creationBouton("Bas", 100, 190, 80, 80, 130, 130, 130);
  creationBouton("Gauche", 10, 100, 80, 80, 130, 130, 130);
  creationBouton("Droite", 190, 100, 80, 80, 130, 130, 130);
  //creationBouton("Ok", 100, 100, 80, 80, 0, 220, 0);
  creationBouton("Mesurer", 280, 100, 80, 80, 0, 0, 220);
  creationBouton("Quitter", 10, height-40, 80, 30, 200, 0, 0);
  creationSlider("Pas", 10, 280, 350, 20, 0, 60);
  creationValeur ("Tension", 280, 65, 80, 25, 255, 255, 255);

}

void draw()
{
  background(0);
}


public void Haut()
{
  serial.write('h');
}

public void Bas()
{
  serial.write('b');
}

public void Gauche()
{
  serial.write('l');
}

public void Droite()
{
  serial.write('r');
}

public void Ok()
{
  serial.write('d');
}

public void Mesurer()
{
  PFont font = createFont("Consolas",14,false);
  
  serial.write('m');
  tension = serial.readString();
  BoxTension.setText(tension);
}
  

public void Pas(int valeur)
{
}

public void Quitter()
{
  if (mouseButton == LEFT)
  {
    exit();
  }
}

void delay(int delay)
{
  int time = millis();
  while(millis()-time <= delay);
}

void creationBouton(String nom, int pos_x, int pos_y, int long_x, int long_y, int color_r, int color_v, int color_b)
{
  cp5.addButton(nom)
  .setValue(0)
  .setPosition(pos_x,pos_y)
  .setSize(long_x,long_y)
  .setColorBackground(color(color_r,color_v,color_b))
  .setColorForeground(color(color_r+25,color_v+25,color_b+25))
  .setColorActive(color(color_r+75,color_v+75,color_b+75));
  
  PFont font = createFont("Consolas-Bold",18,false);
  cp5.getController(nom).getCaptionLabel().setFont(font).toUpperCase(false).align(CENTER, CENTER); 
}

void creationSlider(String nom, int pos_x, int pos_y, int long_x, int long_y, int min, int max)
{
  cp5.addSlider(nom)
  .setPosition(pos_x,pos_y)
  .setSize(long_x,long_y)
  //.setColorBackground(color(0,0,0)) //Fond
  //.setColorForeground(color(0,0,0)) //Curseur
  //.setColorActive(color(0,0,0)) //Passage Souris
  .setRange(min,max)
  .setValue(10)
  .showTickMarks(false)
  .setSliderMode(Slider.FLEXIBLE);
  
  PFont font = createFont("Consolas",14,false);
  cp5.getController(nom).getCaptionLabel().setFont(font).toUpperCase(false);
  cp5.getController(nom).getValueLabel().setFont(font);
}


void creationValeur (String nom, int pos_x, int pos_y, int long_x, int long_y, int text_color_r, int text_color_v, int text_color_b)
{
  BoxTension = cp5.addTextfield(nom)
  .setPosition(pos_x, pos_y)
  .setSize(long_x, long_y)
  .setColor(color(text_color_r,text_color_v,text_color_b))
  .setLabel("Tension :")
  .setLock(true)
  ;
  
  PFont font = createFont("Consolas",14,false);
  cp5.getController(nom).getCaptionLabel().setFont(font).toUpperCase(false).align(LEFT, CENTER); 
  cp5.getController(nom).getCaptionLabel().getStyle().marginTop  = -20;
}

De plus, y aurait il un moyen pour qu'au lancement du sketch, processing n'execute pas les commandes des boutons ?

Merci

Dernière modification par chth26 (2015-06-04 13:55:33)

Hors ligne

 

#9 2015-06-04 21:26:04 Re : Interface web cartographie Arduino

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Interface web cartographie Arduino



chth26 a écrit:

De plus, y aurait il un moyen pour qu'au lancement du sketch, processing n'execute pas les commandes des boutons ?

Quand on utilise setValue pour associer une valeur à un bouton (ou autre objet de ControlP5), cela génère aussi un événement qui va exécuter la fonction liée à ce bouton, comme quand on clique dessus. Et comme dans ton code, tu utilises setValue dans ta fonction "creationBouton", forcément la commande associée s'exécute à chaque fois que tu crées un bouton.

Si on se penche sur la fonction "Mesurer", comme te le propose poliment le message d'erreur ("please check your code at Mesurer"), on voit que celle-ci envoie une chaîne de caractère dans ton champs texte "Tension". Le problème, c'est que quand cette fonction est exécutée lors de la création du bouton "Mesurer", tu n'as pas encore créé ton champs texte 'Tension", d'où le message d'erreur.

Pour éviter qu'un objet de ControlP5 n’exécute sa fonction associée quand on veut lui donner une valeur avec "setValue", on peut désactiver momentanément les évenements qui le concerne en lui envoyant un "setBroadcast(false)" puis, une fois la valeur attribuée, les réactiver avec un "setBroadcast(true)", alors tu pourrais procéder comme ceci lors de l'initialisation :

...
  cp5.addButton(nom)
  .setBroadcast(false)
  .setValue(0)
  .setBroadcast(true)
...

Pour finir, je constate qu'avec le slider, "setSize", "setRange" et "setSliderMode" générent aussi des événements, donc tu peux faire la même chose, comme ceci :

...
  cp5.addSlider(nom)
  .setBroadcast(false)
  .setPosition(pos_x,pos_y)
  .setSize(long_x,long_y)
  .setRange(min,max)
  .setValue(10)
  .showTickMarks(false)
  .setSliderMode(Slider.FLEXIBLE)
  .setBroadcast(true);
...

Hors ligne

 

#10 2015-06-04 21:52:39 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Merci beaucoup pour les infos !
Je me rend compte qu'au final je n'ai pas besoin de setValue sur mes bouton etant donné que je les utilise uniquement pour envoyer des "commandes" via le port série.

Néanmoins j'arrive pas à résoudre le problème avec la fonction mesurer. Le message n'apparait plus au lancement, mais lorsque j'appuie sur mon bouton pour la premiere fois. Ensuite, la valeur se reporte bien dans le champ de tension.

Dernière modification par chth26 (2015-06-04 22:13:55)

Hors ligne

 

#11 2015-06-04 23:59:19 Re : Interface web cartographie Arduino

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Interface web cartographie Arduino



chth26 a écrit:

Néanmoins j'arrive pas à résoudre le problème avec la fonction mesurer.

Et tu as fait quoi ? Moins d'une demie heure après mon dernier message ..? On aimerait bien le savoir, ça éviterait d'expliquer des choses que tu aurais déjà constatées en cherchant.

Programmer, c'est surtout trouver tout un tas de petites solutions à tout un tas de petits problèmes. Le minimum, c'est d'essayer de diagnostiquer. Même sans être un spécialiste, on peut procéder empiriquement : isoler le problème, trouver la ligne qui pose souci. Si on bloque, ça permet au moins de dire "ça doit venir de ça", d'orienter ses recherches.. et aussi celles de ceux à qui on demande de l'aide.

Pour donner un exemple, bien plus utile que de se contenter de lâcher la solution, voici comment je viens procéder pour ce problème particulier :

- J'essaye d'abord de commenter une ligne (c'est à dire la désactiver en la transformant en commentaire en la faisant précéder par "//") qui pourrait poser problème. Comme il n'y a que 3 lignes dans la fonction concernée, c'est vite fait, et si je commente la ligne "BoxTension.setText(tension);", le problème disparaît, donc le problème se situe là.

- Dans cette ligne j'appelle une méthode "setText" de ControlP5 en lui envoyant une chaîne de caractères "tension", qui est lue sur le port série. Il y a peut-être quelque chose qui ne lui plaît pas avec cette chaîne ?... Alors j'utilise l'arme la plus basique et répandue pour débugger : j'affiche la variable "tension" pour voir à quoi elle ressemble, avec un "println(tension);" à la place de l'appel de fonction qui pose problème.

- Là, je me rends compte, en affichant "tension", que quand je ne reçois pas de données sur le port série, j'ai parfois des chaînes vides (qui n'affichent rien), parfois la valeur "null" qui s'affiche et le souci vient probablement de là, alors je transforme le code pour faire en sorte que, si "tension" a la valeur null (on dit plutôt qu'elle ne pointe vers rien), je ne l'utilise pas avec la méthode "setText", comme ceci :

  tension = serial.readString();
  if (tension != null) BoxTension.setText(tension);

et le problème est réglé.

- Pour finir, je me dis que ce doit être un problème courant, la lecture du port série avec "serial.readString()", alors je fais ce que j'aurais dû faire dès le départ : lire le manuel ! Personnellement, je me contente de taper "processing readstring" dans un moteur de recherche, comme ça je tombe directement sur la page qui m'intéresse sur le site officiel de Processing. S'y trouve essentiellement un petit exemple de quelques lignes, qui permet de comprendre comme s'y prendre correctement. En particulier pour la lecture des données, il y a ça :

while (myPort.available() > 0) {
    String inBuffer = myPort.readString();   
    if (inBuffer != null) {
      println(inBuffer);
    }
  }

Donc on voit que la gestion du cas problématique de la valeur "null" est déjà présenté dans cet exemple de base (et de référence), et en procédant de même, le souci ne se serait pas posé.

Dernière modification par Nicolas Lhommet (2015-06-05 00:25:01)

Hors ligne

 

#12 2015-06-05 00:27:52 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Moins de 30 minutes oui, mais j'y ai passé une bonne partie de ma journée dessus, et j'en avait effectivement conclu que le problème était entre le readString et l'écriture avec le setText.
Mais je pensais qu'il était capable de lire le null, d'où mon erreur.
Je me suis acharné a chercher du coté de controlP5 et pas du coté du readString alors que c'était évident. J'ai quand même 4 onglets de mon navigateur ouvert sur le site de processing et un sur controlP5 ^^

Merci tout de même d'avoir pris de ton temps pour étudier mon problème !

Dernière modification par chth26 (2015-06-05 00:34:52)

Hors ligne

 

#13 2015-06-05 00:55:57 Re : Interface web cartographie Arduino

Nicolas Lhommet
membre
Date d'inscription: 2014-01-18
Messages: 194

Re: Interface web cartographie Arduino



Pourtant tes messages d'erreur se terminaient toujours par "Caused by: java.lang.NullPointerException". Évidemment, ça en apprend souvent plus sur les conséquences que sur les causes du problème.
Mais en cherchant uniquement ce message d'erreur, je tombe directement sur cette page d'aide en français : http://fr.java.wikia.com/wiki/Java.lang … rException qui explique tout de suite "Cette exception est lancée lorsqu'une application tente d'utiliser un objet null alors qu'un objet est nécessaire.", ça peut mettre sur la voie.

EDIT : En en associant le mot "processing" à "erreurs" ou "errors" dans une recherche, on tombe naturellement sur des pages avec des explications sur les messages d'erreurs les plus courants :
http://fr.flossmanuals.net/processing/l … courantes/
https://github.com/processing/processin … mon-Errors
Dans cette dernière page du github de Processing, on peut lire :
"java.lang.NullPointerException
Translation: I’ve encountered a variable whose value is null. I can’t work with this.
"
ce qui donne "cette erreur peut se traduire ainsi : j'ai rencontré une variable dont la valeur est null. Je ne peux rien en faire."

Dans les problèmes que tu as rencontré, tu l'obtenais soit parce que ton code essayait d'accéder à un champs de texte qui n'existait pas encore, soit qu'il donnait une variable qui ne pointait vers rien (null) à une fonction qui attend une chaîne de caractère, même vide.

Pour ceux qui voudraient avoir une petite idée de ce que sont les pointeurs (et tout ce qui est null smile), voici une chouette page d'initiation, (avec des explications qui ont apparemment bien servi à un bourgeois gentilhomme du nom de Molière ??) : https://zestedesavoir.com/tutoriels/820 … on-avancee (EDIT: ah des gens se plaignent qu'il s'agirait en fait d'un certain Monsieur Jourdain, jpouvais pas savoir...big_smile)

Bon, tiens-nous au courant de tes résultats, a+

Dernière modification par Nicolas Lhommet (2015-06-05 11:17:51)

Hors ligne

 

#14 2015-06-05 14:47:27 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Je reviens vers vous (encore...) pour un petit soucis avec controlP5.
Lorsque j'appuie sur un bouton, il lance la cartographie (boucle while dans la fonction void du bouton) et est censé m'afficher la valeur a l'écran avec un textfield a chaque relevé de mesure. Le soucis est que ce dernier ne met à jour qu'une fois sortie de la fonction du bouton... Y aurait-il un moyen de mettre a jour le textfield en pendant la boucle while ?

Voila le code du bouton :

public void Ok()
{
  serial.write('d');
  serial.clear();
  delay(2000);
  while (i <= ((Pas+1)*(Pas+1))-1)
  {
    tension = serial.readString();
    output.println(x+" "+" "+y+" "+tension);
    serial.write('g');
    delay(500);
    BoxTension.setText(tension);
    i++;
    if (s == 0)
    {
      x++;
      if (x > 20)
      {
        x = 20;
        y++;
        s = 1;
      }
    }
    else
    {
      x--;
      if (x < 0)
      {
        x = 0;
        y++;
        s = 0;
      }
    }
  }
  output.flush();
}

Dernière modification par chth26 (2015-06-05 16:08:55)

Hors ligne

 

#15 2015-06-09 17:06:11 Re : Interface web cartographie Arduino

chth26
membre
Date d'inscription: 2015-06-02
Messages: 12

Re: Interface web cartographie Arduino



Le programme est presque terminé dans la limite de ce que j'ai pu réaliser (pas de 3D puisque pas géré par la Raspi, uniquement un graphe 2D avec des points de couleur, et pour le moment une application java sur la Raspi et non sur le web).

En revanche j'ai 2 soucis:
Le premier est toujours celui du post au dessus. Lorsqu'on appuie sur un bouton de controlP5, les informations ne sont envoyés qu'une fois la fonction terminée. le soucis est clairement visible avec ce petit sketch :

import controlP5.*;

ControlP5 cp5;

void setup()
{
  size(800,600);
  background(0);
  smooth();
  cp5 = new ControlP5(this);
  creationBouton("Test", 10, 10, 80, 80, 100, 100, 100);
}

void draw()
{
}

void Test()
{
  int i = 0;
  while (i <= 25)
  {
    delay(100);
    background(0);
    fill(255);
    text(i, 285, 82.5);
    println(i);
    i++;
  }
}

void delay(int delay)
{
  int time = millis();
  while(millis()-time <= delay);
}

void creationBouton(String nom, int pos_x, int pos_y, int long_x, int long_y, int color_r, int color_v, int color_b)
{
  cp5.addButton(nom)
  .setPosition(pos_x,pos_y)
  .setSize(long_x,long_y)
  .setColorBackground(color(color_r,color_v,color_b))
  .setColorForeground(color(color_r+25,color_v+25,color_b+25))
  .setColorActive(color(color_r+75,color_v+75,color_b+75));
  
  PFont font = createFont("Consolas-Bold",18,false);
  cp5.getController(nom).getCaptionLabel().setFont(font).toUpperCase(false).align(CENTER, CENTER); 
}

Le second est que je voudrais envoyer une valeur par le serial afin de pouvoir régler un paramètre de l'arduino, mais impossible de coder ce petit bout de code... (je poste quand même, même si Arduino n'est pas le sujet du forum au cas ou)
J'ai une boucle while qui attend des valeur ASCII en début de programme de la forme :

 while( lect != d)
{
    if (Serial.available() > 0)
    {
      lect = Serial.read();
    }
    delay (50);
    
    if(lect=='l')
    {
        permet de deplacement de 1 pas vers la gauche
    }
    else if (
etc...

J'aimerai juste envoyer une valeur (par exemple e), et envoyer ensuite ma valeur souhaité de type int. Mais impossible de réaliser ceci. J'ai fait un bout de code (que j'ai plus --") qui me renvoyait bien le premier chiffre (en soustrayant '0'), mais renvoyer 195 en ASCII pour le second...
Si vous avez une idée au cas ou, merci ! smile

Dernière modification par chth26 (2015-06-09 17:09:26)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017