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.
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....
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.....
Hors ligne
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.
Hors ligne
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
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
Pages: 1