Problema con Arduino,Processing e potenziometro

Ciao a tutti, so un paio d'ore che l'accoppiata Arduino-Processing mi sta dando problemi :~ Codice Arduino :

int pot = A0;
int val = 0;

void setup ()
{ 
Serial.begin(9600);
} 

void loop()
{ 
val = map(analogRead(pot), 0 , 1023, 0 , 255);
Serial.println(val);
}

Codice Processing :

import processing.serial.*;

Serial port;
float val = 0;

void setup(){
size(450,450);
print(Serial.list());
port = new Serial(this,Serial.list()[0], 57600);
println();
println("Porta utilizzata "+Serial.list()[0]);
port.bufferUntil('\n');
}

void draw(){
 fill(0);
 ellipse(225,225,50,val);
}

void serialEvent (Serial port){
  val = float(port.readStringUntil('\n'));
}

Il problema è che caricando prima lo sketch di Arduino posso constatare la lettura precisa tramite il monitor seriale quindi tutto ok. Quando invece vado a caricare lo sketch di Processing (facendo attenzione a dire a Processing di utilizzare la porta dove Arduino è connesso) il monitor seriale di Arduino inizia dare di matto scrivendo caratteri come " ààà àà ààà àààà àààààà ààà" e in Processing la lettura dalla seriale è nulla. Nel seriale di Processing invece l'errore riscontrato è "Error, disabling serialEvent() for /dev/ttyACM0 null" . La cosa bella è che caricando questo sketch in Processing ( con lo stesso d'Arduino):

import processing.serial.*;
Serial port;
float brightness = 0;

void setup(){
  size(500, 500);
  port = new Serial(this, Serial.list()[0], 9600);
  port.bufferUntil('\n');
  }

void draw(){
  background(0,0,brightness);
  }

void serialEvent (Serial port){
  brightness = float(port.readStringUntil('\n'));
  }

Tutto funziona alla perfezione!!!

Sperando che qualcuno mi aiuti , vi ringrazio in anticipo. Luigi.

Non puoi avere il monitor seriale e Processing sulla stessa seriale, ma soprattutto non puoi avere la seriale su Arduino a 9600 e su Processing a 57600. Devi usare la stessa velocità e un solo programma che usa la seriale alla volta.

Ciao, grazie della risposta. Per il bound rate ho corretto ma niente, per l'altra cosa potresti spiegarti meglio per favore? Come faccio a fare un lavoro del genere cambiando la seriale?

Semplicemente lascia com'e' il tutto ma NON puoi usare il monitor seriale dell'IDE di Arduino e Processing contemporaneamente

Ho modificato il codice in questo modo : Arduino :

int pot = A0;
int val = 0;
void setup ()
{ 
} 

void loop()
{ 
val = map(analogRead(pot), 0 , 1023, 0 , 255);
delay(100);
}

Processing :

import processing.serial.*;

Serial port;
float val = 0;

void setup(){
size(450,450);
port = new Serial(this,Serial.list()[0], 9600);
port.bufferUntil('\n');
fill(0);
}
void draw(){
 ellipse(225,225,50,val);
}

void serialEvent (Serial port){
  val = float(port.readStringUntil('\n'));
}

Ma non cambia nulla (ovviamente non posso vedere piu i valori del serial monitor) ma nel programma in Processing l'ellisse non cambia ruotando il potenziometro.

... ma se dal codice di Arduino togli la Serial.print() ... come vuoi che arrivino i dati a Processing ??? Per grazia Divina ??? ]:D

Guglielmo

nid69ita: Semplicemente lascia com'e' il tutto ma NON puoi usare il monitor seriale dell'IDE di Arduino e Processing contemporaneamente

Forse mi sono spiegato male. Da computer se usi Processing aprendo la seriale NON puoi dentro all'IDE di Arduino usare il Monitor Seriale, non che non puoi usare la seriale sull'Arduino.

P.S. @Guglielmo, contemporaneità di risposta :grin:

Mi sono reso conto di aver tolto la comunicazione seriale :) :) Ora funziona ma l'errore oltre al fatto che utilizzavo i due monito seriale era che mancava l'istruzione in Arduino print('\n'); poichè infatti al programma in Processing dicevo di leggere la seriale fino a quando non trovava '\n'. Allego i codici casomai servisse a qualcuno :

Arduino:

int pot = A0;
int val = 0;
void setup ()
{ 
  Serial.begin(9600);
} 

void loop()
{ 
val = analogRead(pot);
Serial.print(val);
Serial.print('\n');
}

Processing :

import processing.serial.*;

Serial port;
float val = 0;

void setup(){
size(400,400);
port = new Serial(this,Serial.list()[0], 9600);
port.bufferUntil('\n');
fill(0);
}
void draw(){
 ellipse(mouseX,mouseY,50,val);
}

void serialEvent (Serial port){
  val = float(port.readStringUntil('\n'));
}

Grazie a tutti!

In Arduino puoi semplificare usando println() invece di print() La println() aggiunge alla fine il \n

Stai solo facendo prove o vuoi fare un progetto con Processing ? C'e' la libreria G4P con un pò di GUI per Processing, c'e' da studiarla un pò ma è carina. http://www.lagers.org.uk/g4p/ Ha anche un tool di disegno: http://www.lagers.org.uk/g4ptool/index.html

Logicamente se stai solo facendo delle prove lascia stare. Ti incasinano e richiedono un pò di studio.

nid69ita: In Arduino puoi semplificare usando println() invece di print() La println() aggiunge alla fine il \n

Stai solo facendo prove o vuoi fare un progetto con Processing ? C'e' la libreria G4P con un pò di GUI per Processing, c'e' da studiarla un pò ma è carina. http://www.lagers.org.uk/g4p/ Ha anche un tool di disegno: http://www.lagers.org.uk/g4ptool/index.html

Logicamente se stai solo facendo delle prove lascia stare. Ti incasinano e richiedono un pò di studio.

Grazie. Per ora stavo solo facendo delle prove ma potrebbe tornarmi utile.