Problemi con Processing

Allora dopo aver provato a giocare con Arduino e averne capite le potenzialità mi manca ancora un pezzetto , voglio interfacciarlo con il PC ho letto di Processing ma a questo punto mi sono piantato :-/ :-/, sapete indicarmi un libro o un sito in Italiano , perchè l'inglese e fare l'autodidatta e troppo per mè , dove ci siano dei esempi molto semplici per poter cominciare a capire come combinare il tutto. Il mio primo utilizzo è poter leggere le porte analogiche.

Ciao IMer

Ciao Imer.

Arduino e Processing comuincano via seriale.

Per ricevere i dati di Arduino in Processing il modo più veloce é utilizzare la libreria Firmata in Arduino.

File>Examples>Firmata>StandardFirmata

Scrivilo su Arduino e poi chiudi il programma.

In Processing: Scaricati la Arduino Library, da qui.

Segui le istruzioni per installarla in processing (in pratica devi metterla - decompattata - in ...\processing-1.1\libraries), scaricando quella che ti serve (Mega o Arduino 2009)

Poi apri Processing e in teoria dovresti trovare gli esempi in File>Examples>Libraries>Arduino. In realtà sotto W$ non lo trovo. Devi andare ad aprirti il file ...\processing-1.1\libraries\Arduino\examples\arduino_input.pde

Eseguendo quel file scoprirai una visualizzazione abbastanza basic degli input di Arduino.

;)

e se non succede nulla?

allora vuol dire che non stai "ascoltando" la giusta porta seriale.

import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
int ledPin = 13;

void setup()
{
//println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[0]);
arduino.pinMode(ledPin, Arduino.OUTPUT);// sets port 13 to input
}

void draw()
{
arduino.digitalWrite(ledPin, Arduino.HIGH); // light goes on
delay(1000); // wait 1 second
arduino.digitalWrite(ledPin, Arduino.LOW);// light goes off
delay(1000);
}

esegui questo da Processing (che in pratica replica il Blink). Se non funziona togli il commento da

//println(Arduino.list());

Devi cambiare il numero della seriale (che iniziano da [0], ma, soprattutto su W$, non necessariamente sono le prime)

If you try this and it does not work, uncomment the line println(Arduino.list()); and run it again. The message area should display a list of the devices connected to the USB ports. If the arduino is in the list, but not at possition 0, change to the appropriate number in the line arduino = new Arduino(this, Arduino.list()[XX]); where XX is the new number.

Spero che con questo tu ce la faccia. Comunque c'é molto materiale in giro per farlo.

Ciao!

Grazie mille , domani sera con più calma ci provo , questa sera ho cercato un po in rete , ma la dimensione della mia ignoranza è tale che tutte le informazioni che trovo mi mandano in tilt , da quello che ho letto il tuo è appunto l'esempio "basic" da cui partire.

CIao IMer

Grazie mille , ci sono riuscito iL problema era che io davo la COM come suo numero , ossia COM1 = 1 , invece usando il comando :

println(Arduino.list());

mi sono accorto che metteva un numero tra le parentesi quadre ed era quella la numerazoine per processing , come ho inserito il numero corretto tutto funziona. Complimenti a tutti per Arduino e tutto il soft che si trova.

Ciao IMer

Non ci capisco piu nulla :'( , allora questa mattina sono riuscito a far funzionare il led e ho provato anche l'esempio dove ci sono i cerchi che aumentano di diametro in funzione del valore letto sul Pin analogico. Questa sera non funziona nulla , all'avvio di processing lampeggiano i led RX e TX poi lampeggia un paio di volte il led sul pin 13 e poi nulla , vedo solo lampeggiare RX e niente altro. Ho provato a cambiare la COM e se setto quello sbagliata non vedo neppure il RX e TX lampeggiare quindi la COM scelta è corretta. Ho provato a cambiare il delay ma non cambia il tempodi lampeggio , ho provato a ricaricare arduino , ma nulla , sono di nuovo incagliato. Dove sbaglio ?

su Arduino hai messo Firmata? Probabilmente é un problema di COM. Riprova!

E non ti peredere d'animo!

Trovato l’errore ma adesso sono ancora più confuso :
Il programma di test quello dei cerchietti mi ero dimenticato di portare la velocità a 57600.
Invece quello di test per far lampeggiare il led , andando per similitudine paragonando con quello che funziona ho dovuto correggere questa riga:
arduino = new Arduino(this, Arduino.list()[1]); prima

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

Domando ma questa mattina ero rinco e ho visto funzionare cose che non esistono o è possibile che funzioni senza settare la velocità.
Mi dimenticavo di dire che questa mattina è stato provato su un’altro PC.

Ciao IMEr

Ok adesso comincio a parlare (male) anche con Processing , ma sorgono altre 2 domande:

1 Quali comandi si usano per formattare un variabile definita float in modo che posso stamparla con il comando print() ad esempio con 3 decimali

L'equivalente di questo per arduino che faccio scrivere su un LCD : float composizione ;

char str[12] = {'0','0','0','0','0','0','0','0','0','0','0','0'} ; messaggio = dtostrf (composizione,6,3,str)

2 Il comando print() può solo stampare nella parte nera di processing (In basso ) o c'è il modo di portare la stampa di un dato sul form che si apre all'avvio dello Sketck ?

CIao IMer

Questo problema come lo risolvo ?
Non riesco a spiegarmi fate prima a lanciare lo sketch , c`è collegato un arduino con caricato standardfirmata.
In pratica legge gli ingressi analogici e mi dovrebbe scrivere il valore nel form.

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;

color off = color(4, 79, 111);
color on = color(84, 145, 158);
float costante = 5/1023;
int risultato = 0;
String messaggio , stri ;
PFont fontA;

void setup() {
size(470, 350);
background(200);
arduino = new Arduino(this, Arduino.list()[1], 57600); // setto numero porta e velocita

// Set the font and its size (in units of pixels)
fontA = loadFont(“Ziggurat-HTF-Black-32.vlw”);
textFont(fontA, 32);
textMode(SCREEN);

//for (int i = 0; i <= 13; i++)
//arduino.pinMode(i, Arduino.INPUT);

}

void draw() {
fill (0);
stroke(on);

for (int i = 1 ; i <= 6; i++) { // parto da 1 perchè non accetta negativi
risultato = arduino.analogRead(i-1) ; //*(float) costante ;

text (i,10,50 * i);
text (risultato,80,50 * i);

text (" ",80,150 * i);

}

}

CIao IMer