Annonce

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


#1 2009-05-10 16:36:19 communication Processing / arduino

prahaline
nouveau membre
Date d'inscription: 2009-04-26
Messages: 5

communication Processing / arduino



je tente de contrôler mon scketch processing avec la lumière, utilisant une LDR connectée à ma platforme arduino. Le code général fonctionne mais je dois sans cesse changer des valeurs reçue pour le mapping car le niveau de lumière change constamment. sad
J'aimerais donc savoir comment enregistrer des informations venant d'arduino pour communiquer à processing le niveau le plus élévé et le plus bas de lumière. Je ne sais pas si cette demande est claire donc je tape le code, histoire de me faire comprendre....hmm

PROCESSING :

import processing.serial.*; //import information from the arduino

int delayValue=0; //variable for delayValue
int min_value=0; //variable for the lowest level of light
int max_value=0; //varaible for the highest level of light

Serial myPort;  //Chose the prot for communication with arduino

PenroseLSystem ds; //call PenroseLSystem class

void setup()
{
  size(360,640); //size of the window
  stroke(255);  //colour of the line
  ds = new PenroseLSystem(); //call a new PenroseLSystem each time draw
  ds.simulate(5); //size of the overall graphic

  println(Serial.list()); //print the list of port avaible
  myPort = new Serial(this, Serial.list()[1], 9600); //chose the port for communication
  myPort.bufferUntil('\n'); //don't generate a serial event unless you get a new line character
}





void serialEvent (Serial myPort) {
  String inString = myPort.readStringUntil('\n'); //get the ascii string (information code from arduino)
 
  if (keyPressed) {
    if(key==CONTROL){
      inString=trim(inString);
      float a=Float.parseFloat(inString);
      max_value=(int)a;
    }
    if(key==ALT){               //if the alt key is pressed the value obtained id the highest one.
      inString=trim(inString);
      float a=Float.parseFloat(inString);
      min_value=(int)a;
    }   
  }
  if (inString != null) {      //if there's string information coming...

    inString = trim(inString);
    float a = Float.parseFloat(inString); //translate them in float number...
    float b = map(a, min_value, max_value, 0, 1000); //map the lowest and highest number obtained to the highest and lowest delay Value
    delayValue = (int)b;       //translate the values obtained in int number and apply it to delayValue

  }

}


void draw()
{
  background(0);      //black background
  translate(100,250);  //translate the overall graphic to fit it to the window
  ds.render();         //draw from LSystem and PenroseLSystem code
  println (delayValue); //print the delay Value
  delay(delayValue);  //apply the int delayValue to freeze the program
}

ARDUINO :

void setup() {
// initialize the serial communication:
  Serial.begin(9600);
}

void loop() {
  // send the value of analog input 0:
  Serial.println(analogRead(0));
  // wait a bit for the analog-to-digital converter
  // to stabilize after the last reading:
  delay(10);
}

aidez moi.....sadsad

Hors ligne

 

#2 2009-05-10 18:56:12 Re : communication Processing / arduino

matheynen
membre
Date d'inscription: 2008-06-09
Messages: 226

Re: communication Processing / arduino



Je ne vois pas ce qui ne fonctionne pas.

Ton code en théorie semble correct,
il y a-t-il un bug ?

Pourrais-tu préciser.


Ce que vous avez fait au plus petit de mes frères, c'est à moi que vous l'avez fait.

Hors ligne

 

#3 2009-05-10 21:51:50 Re : communication Processing / arduino

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: communication Processing / arduino



Salut,

Je ne comprends pas trop ce que tu cherches à faire : est ce que ce sont les modifications trop rapides de lumière qui te gênent ? Si c'est ça il faut « lisser » le signal transmis à processing (ou le faire dans processing) pour éviter les changements brutaux. Par exemple, dans arduino, faire une moyenne des 10 derniers signaux et transmettre cette valeur plutot que chaque valeur du signal (10 signaux ça fait environ 1/10e de secondes, donc ça reste précis)

Si je comprends bien ton code, une lumière forte frappe la LDR et et le rendu est bloqué pendant une seconde, et tout le sketch avec, en somme il ne progresse que dans l'ombre, c'est ça?

Sinon, c'est un détail mais dans ton code p5, tu pourrais également intialiser max_value à 1000

ps : pour utilise la balise « code », il faut placer ton code entre la balise ouvrante et celle qui ferme, c.a.d. : [ code ]  le code ici [ / code ]

Hors ligne

 

#4 2009-05-12 23:33:41 Re : communication Processing / arduino

prahaline
nouveau membre
Date d'inscription: 2009-04-26
Messages: 5

Re: communication Processing / arduino



en fait je dois faire la démo de ce projet dans deux lieux différents, les valeurs minimales et maximales reçues par la LDR et utilisées pour le mapping chageront donc. Je ne serais pas sur place pour faire les réglages moi-même donc je cherche un code 'générique' qui pourrait fonctionner dans les deux cas....ou alors une solution de réglage plus simple. j'espère que c'est plus clair...;-(...
En tout cas merci de vos réponses..! J'initialise max_value à 1000 et continues mes recherches...

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024