Lettura seriale vettori su arduino

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..

Non puoi aprire sullo stesso PC il Serial Monitor dell’IDE e Processing in quanto tutti e due occupano la seriale.

Quindi come posso fare? Continua a darmi porta seriale occupata… ora ho provato con questi codici:
CODICE PROCESSING

import processing.serial.*;

int[] A = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 99};
int i;
boolean k = false;
Serial porta;

void setup()
{
  size(400, 400);
  String portName = Serial.list()[1];
  porta = new Serial(this, portName, 9600);
}

void draw()
{
  if (keyPressed==true && k == false) {
    k = true;
  }
  if (k) {
    for (i=0; i<11; i++) {
      porta.write(A[i]);
      delay(5);
      if (i==11) {
        k=false;
      }
    }
  }
}

CODICE ARDUINO

#include <SoftwareSerial.h>



int A[9];  // crea un array vuoto di 9 elementi
int i;
int incomingNumber;

boolean readyToSend = false;


void setup() {

  Serial.begin(9600);  // inizializza la comunicazione seriale a 9600 bps

}

void loop() {

  if (Serial.available() > 0 && readyToSend == false) {

    incomingNumber = Serial.read();
    if (incomingNumber != 99)
    {
      A[i] = incomingNumber;
      i++;
    }
    else {
      i = 0;
      readyToSend = true;
    }
  }
  if (readyToSend) {
    int L = 0;
    for (L = 0; L < sizeof(A); L++) {
      Serial.println(A[i]);
    }
    if (L == sizeof(A)) {
      readyToSend = false;
    }
  }
}

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.

Quindi l’esercizio non è risolvibile? Non c’è nessuna alternativa?

NicholasASR:
Non c'è nessuna alternativa?

Devi modificare il codice Processing in modo che oltre ad inviare i dati deve anche occuparsi di riceverli e visualizzarli.

astrobeed:
Devi modificare il codice Processing in modo che oltre ad inviare i dati deve anche occuparsi di riceverli e visualizzarli.

Potresti aiutarmi che non riesco? Sono due giorni che ci provo…

Come ti è già stato fatto notare questo non è il forum di Processing, è il forum di Arduino, per Processing devi chiedere aiuto sul suo forum.

>NicholasASR: alla prossima domanda su "Processing" mi vedo costretto a chiudere il thread ... :confused:

Guglielmo