processing e arduino

Salve a tutti,

vi spiego brevemente cosa vorrei fare: con processinng vorrei accendere un led su arduino (per iniziare a capire come comunicare tra loro).
Come ho letto sul web, ho scaricato la libreria su processing, e quando la importo me ne importa due:

import org.firmata.*;
import cc.arduino.*;

successivamente come ho letto sul sito di arduino ho scritto questo seplice codice:

import processing.serial.*;
    import cc.arduino.*;
    println(Arduino.list());

senza pero importare la libreria firmata, che non so cosa sia, ma sullo schermo che esce non mi scrive nulla. La mia arduino UNO e sulla COM5 e penso che processing pensi che sia sulla COM1, come fgaccio a dirglielo??

Grazie =)

Firmata è un programma (sketch) che devi caricare su Arduino.
Il Firmata su Arduino riconosce i comandi da Processing che manderai attraverso la seriale ad Arduino (praticamente comandi che si basano sul protocollo Firmata)

Quel comando:

println(Arduino.list());

serve solo per avere un elenco delle porte seriali. Così puoi capire quale scegliere.

http://playground.arduino.cc/Interfacing/Processing
Instruction, punto 5 lo dice chiaramente (ma in inglese)

okay, quindi devo caricare su arduino la libreria firmata?? (per quello che ho capito, se sparo scemate correggimi XD )
e come faccio a dire a processing che la seriale e la com5 e non la com1? Non serve dirglielo??
Grazie =)

Si, devi caricare Firmata su Arduino.
Per la porta devi usare il comando:

arduino = new Arduino(this, Arduino.list()[0], 57600);

Ma quello zero nella quadra, indica il primo elemento della lista. Tu devi indicare il numero dell'elemento giusto.
Da ma su mio pc, elemento 0 = COM1 che è la seriale fisica e non la porta usb

Potresti anche mettere (non sono sicuro):
arduino = new Arduino(this, "COM1", 57600);
naturalmente metti la com numero giusta da te

okay quindi per esempio su processing avvio questo codice:

import org.firmata.*;
import cc.arduino.*;
import processing.serial.*;


Arduino arduino;
int ledPin = 9;

void setup()
{
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[1], 57600);
  arduino.pinMode(ledPin, Arduino.OUTPUT);
}

void draw()
{
  arduino.digitalWrite(ledPin, Arduino.HIGH);
  delay(1000);
  arduino.digitalWrite(ledPin, Arduino.LOW);
  delay(1000);
}

e su arduino questo?

#include <Boards.h>
#include <Firmata.h>

void setup(){}
void loop(){}

per non si accende il led collegato al pin 9 =(

Quasi. Su Arduino devi caricare il firmware o sketch Firmata. Lo trovi fornito assieme all'IDE Arduino.
File->Esempi->Firmata->StandardFirmata.

okay, adesso lo caricato su arduino... Ce un codice lunghissimo, che devo fare?

Per Processing avevo questo esempio, a video un quadrato per tutti i pin digitali, li accendi/spegni con il mouse:

import processing.serial.*;
import cc.arduino.*;
Arduino myArduino;

color off = color(4, 79, 111);
color on = color(0, 205, 0);      // Red Green Blue

int[] values = { Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW };

void setup() 
{ size(470, 200);
   //println(Arduino.list());    myArduino = new Arduino(this, Arduino.list()[0], 57600);
  myArduino = new Arduino(this, "COM4", 57600);
  for (int i = 0; i <= 13; i++)
  { myArduino.pinMode(i, Arduino.OUTPUT);
  }
}

void draw() 
{ background(off);
  stroke(on);
  for (int i = 0; i <= 13; i++) 
  { if (values[i] == Arduino.HIGH)
    { fill(on);
    }
    else
    { fill(off);
    }
    rect(420 - i * 30, 30, 20, 20);
    fill(200);
    text(i, 420 - i * 30,13);
  }
}

void mousePressed()
{ int pin = (450 - mouseX) / 30;
  if (values[pin] == Arduino.LOW) 
  { myArduino.digitalWrite(pin, Arduino.HIGH);
     values[pin] = Arduino.HIGH;
  } else 
 { myArduino.digitalWrite(pin, Arduino.LOW);
    values[pin] = Arduino.LOW;
  }
}

Federico99:
okay, adesso lo caricato su arduino... Ce un codice lunghissimo, che devo fare?

In che senso? Nulla. Quel codice lo hai caricato su Arduino e quel codice si incarica di capire i comandi che spedisci da Processing attraverso l'oggetto Arduino.xxxx

quindi in conclusione (spero mi funzioni)

su arduino carico lo sketch "standard firmata" e lo carico sull arduino UNO senza cambiamenti giusto?

, e su processing carico quello che mi hai postato, scrivendo 1 al posto di 0 nell array arduino list, e devo ancora cambiare qualcosa, perche non funziona?

Si esatto. Anche il tuo esempio va bene, solo che a video non mostri nulla su PC.

Questo io lo cambierei usando direttamente la COMx giusta (presumo da te sia COM2):

arduino = new Arduino(this, "COM2", 57600);

Processing di solito usa quell'array perchè su Linux le porte hanno un altro nome.

yuppieee funziona!!

Grazie mille, da solo non ce l avrei mai fatta =)

Nella draw() del mio esempio sopra, ho messo anche i numeri dei pin.