Ciao a tutti, ho un problema. Ho creato su processing due vettori e ho scritto un codice per passarli serialmente ad Arduino.
Ora su Arduino ho scritto un codice per prendere questi due vettori e ricrearli anche su Arduino. Il problema è che mi dice quando avvio il codice : Errore nell’apertura della porta seriale “/dev/cu.usbmodem1421” (Port busy).
L’errore credo stia nel codice di Arduino… qualcuno può aiutarmi?
Codice Processing:
import processing.serial.*;
int[] A = {1,2,3,4,5,6,7,8,9}; // crea un vettore di 9 interi
int[] B = {1,2,3,4,5,6,7,8,9,10}; // crea un vettore di 10 interi
int i;
Serial porta; // crea un oggetto della classe seriale
void setup()
{
size(400,400);
String portName = Serial.list()[1];
porta = new Serial(this, portName, 9600);
}
void draw()
{
/* Invia ad Arduino il vettore A di 9 elementi. */
for (i=0; i<9; i++) {
porta.write(A[i]);
println(A[i]);
delay(100);
}
/* Invia ad Arduino il vettore B di 9 elementi. */
for (i=0; i<10; i++) {
porta.write(B[i]);
println(B[i]);
delay(100);
}
}
CODICE ARDUINO
int A[9]; // crea un array vuoto di 9 elementi
int B[10]; // crea un array vuoto di 10 elementi
int i;
void setup() {
Serial.begin(9600); // inizializza la comunicazione seriale a 9600 bps
}
void loop() {
if (Serial.available()) {
for (i=0; i<9; i++) {
A[i] = Serial.read();
}
for (i=0; i<10; i++) {
B[i] = Serial.read();
}
}
Serial.println(A[7]);
Serial.println(B[7]);
}
ciao...il problema ce l'hai quando tenti di caricare lo sketch su arduino o durante l'esecuzione?
se è il primo caso ...processing è chiuso o avviato?
se secondo caso, se non sbaglio, con/sulla stessa Serial arduino deve leggere quello che invia processing, che non si ferma mai (anche se con delay di 100), e "contemporaneamente" scrivere quello che gli è arrivato!?
in processing ci sono degli esempi per comunicare con arduino...alcuni sono fatti utilizzando la libreria firmata (su arduino) altri no...ci hai dato un occhio?
per prova io cambierei i due sketch e farei che processing invii i dati a comando (per esempio con mousePressed())...con arduino resterei in attesa di un qualche cosa che indichi che l'invio è finito e solo allora invierei risposta.
Io in Processing eviterei la menata del Serial.list() e darei il nome esatto della porta
String portName = Serial.list()[1];
porta = new Serial(this, portName, 9600);
Su Windows darei la porta COM su cui hai Arduino , esempio porta = new Serial(this, "COM8", 9600);
Tu sei su linux ? mac ? Ma Arduino Uno o Arduino Leonardo ?
Allora io sono Mac e uso Arduino UNO. L'errore insorge dopo che metto play su Processing e poi vado ad aprire il monitor seriale di Arduino. Quindi come posso fare per inviare un elemento di array da processing, registrarlo su un array in arduino, e poi rimandare il secondo elemento su processing e cosi via? Perché come ho scritto io mi pare di capire dalla risposta di ORSO che Processing continua a mandare e quindi il seriale è sempre occupato..
Scusate il doppio post... esiste quindi un modo per creare 2 array di interi su processing e inviarli su Arduino senza che mi dica che il seriale è occupato? Ho provato migliaia di codici diversi ma non riesco!
NicholasASR:
Ho provato migliaia di codici diversi ma non riesco!
Non è un problema di codice, è un problema di uso della seriale, non puoi usarla simultaneamente con Processing e con l'IDE di Arduino, uno dei due deve essere inattivo.