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