Annonce

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


#16 2015-06-09 23:50:51 Re : Interface web cartographie Arduino

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

Re: Interface web cartographie Arduino



Bonsoir,

Processing affiche une scène à la fin de la méthode draw(). Pour réaliser ce que tu souhaites il est nécessaire d'introduire plusieurs variables globales. Un drapeau qui permet de savoir si le bouton a été pressé. Une variable temps et une variable compteur.
C'est ensuite dans la boucle draw que nous auscultons l'état de ces variables.
Dans la méthode Test() les variables sont initialisées et drapeau est mis sur true.
N'hésite pas à poser des questions :

import controlP5.*;

ControlP5 cp5;
boolean drapeau;
int compteur;
int temps;

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

void draw() {
  background(0);
  fill(255);
  text(compteur, 285, 82.5);
  if (drapeau && (millis() - temps > 100)) {
    temps = millis();
    compteur++;
    if (compteur == 25) {
      drapeau = false;
    }
    println(compteur);
  }
}

void Test() {
  drapeau = true;
  compteur = 0;
  temps = millis();
}

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

Pour les second point, je n'ai pas très bien compris ce que tu souhaites réaliser.

Hors ligne

 

#17 2015-06-11 11:16:07 Re : Interface web cartographie Arduino

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

Re: Interface web cartographie Arduino



Effectivement, je n'avais pas du tout pensé a utiliser la fonction draw()! Quitte a avoir une fonction infinie, autant s'en servir ! merci !!

Pour le second point, j'ai trouvé le soucis, j'initialisais le serial 9200, et j'utilisais le 9600 de l'arduino xD

Par contre maintenant, j'ai l'impression que l'arduino ne reçoit pas toujours les valeurs:
voila le sketck Processing pour tester cela :

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

ControlP5 cp5;
Serial serial;

int Longueur = 5;
int Largeur = 5;

String a = "";

void setup()
{
  size(800,600);
  background(0);
  
  cp5 = new ControlP5(this);
  serial = new Serial(this, Serial.list()[9], 9600);
  
  creationSlider("Longueur", 10, 290, 350, 20, 1, 60, Longueur);
  creationSlider("Largeur", 10, 320, 350, 20, 1, 60, Largeur);
  creationBouton("Envoyer", 280, 350, 80, 40, 130, 130, 130);
}

void draw()
{
}

void Envoyer()
{
  serial.write("e"+Longueur+","+Largeur);
}

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

void creationSlider(String nom, int pos_x, int pos_y, int long_x, int long_y, int min, int max, int valeur)
{
  cp5.addSlider(nom)
  .setBroadcast(false)
  .setPosition(pos_x,pos_y)
  .setSize(long_x,long_y)
  .setRange(min,max)
  .setValue(valeur)
  .showTickMarks(false)
  .setSliderMode(Slider.FLEXIBLE)
  .setBroadcast(true);
  
  PFont font = createFont("Consolas",14,false);
  cp5.getController(nom).getCaptionLabel().setFont(font).toUpperCase(false).align(RIGHT, BOTTOM); 
  cp5.getController(nom).getValueLabel().setFont(font);
}

Et le code Arduino

#include <SoftwareSerial.h>

int lect;
long val1=0, val2=0;
 
void setup()
{
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(100);
}

void loop()
{
  while (lect != 'd')
  {
    if (Serial.available() > 0)
    {
      lect = Serial.read();
    }
    delay (50);
    
    if(lect=='m')
    {
    }
    else if(lect=='r')
    {
    }
    else if(lect=='l')
    {
    }
    else if(lect == 'h')
    {
    }
    else if(lect =='b')
    {
    }
    else if(lect =='e')
    {
      if (Serial.available() > 0)
      {
        val1 = Serial.parseInt();
        val2 = Serial.parseInt();
        for(int i =0; i<val1; i++)
        {
          digitalWrite(13,HIGH);
          delay(200);
          digitalWrite(13,LOW);
          delay(200);
        }
      }
      lect='i';
    }
    
    if (Serial.available() > 0)
    {
      lect = Serial.read();
    }
    delay (50);
  }
}

Dernière modification par chth26 (2015-06-11 11:28:35)

Hors ligne

 

#18 2015-06-12 08:18:11 Re : Interface web cartographie Arduino

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

Re: Interface web cartographie Arduino



Bonjour,

N'ayant pas d'Arduino sous la main, je ne peux tester ton code. Cependant, tes sliders dans ton programme Processing ont comme intervalle de valeurs 10 et 60, donc il me paraît inutile d'employer des int pour stocker l'information. Des bytes suffisent largement. Cela facilite le transit des données un int est codé sur 4 octets un byte sur un seul. La liaison série entre l'ordinateur et l'Arduino envoie des octets.
Regarde ce qui a déjà été traité ici :
http://codelab.fr/5677

D'autre part dans ton code Arduino, utilises plutôt l'instruction switch case qu'une série illisible de if else.

Hors ligne

 

#19 2015-06-12 20:20:56 Re : Interface web cartographie Arduino

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

Re: Interface web cartographie Arduino



je vais changer en byte, mais je suis pas certain que ca va changer grand chose, je tiens au courant.

En revanche, il se trouve que mathematica est installé sur une Raspberry. Cela permet entre autre de creer mes graphes et de les exporter dans mon dossier web en format png.

Ma commande Mathematica est enregistré dans un fichier script.m que je peux lancer via le terminal avec la commande

wolfram -script /home/pi/Desktop/script.m

Y aurait-il un moyen de lancer cette commande depuis processing via un bouton pas exemple?

Hors ligne

 

#20 2015-06-12 22:32:16 Re : Interface web cartographie Arduino

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

Re: Interface web cartographie Arduino



Oui, on peut lancer une commande terminal sous Processing. Va voir ici :
http://codelab.fr/5603

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2017