Ciao a tutti, sto cercando di interfacciare vari sensori collegati all'arduino con il mio computer per poi fare l'output di dati su processing. Volevo chiedervi una cosa:
Io ho queste variabili sull'arduino:
int a1 = 235;
int a2 = 865;
int a3 = 457;
int a4 = 1;
int a5 = 687;
int a0 = 1023;
come faccio a spedirli tutti in una sola volta permettendo così a processing di dividerli con la funzione split()? Come creo una stringa che contenga tutti questi valori per poi mandarli sulla seriale in una sola stringa?
Spero che mi sono fatto intendere :)... Bye bye e grazie.
Le mie aspettative erano che avrebbe continuato a stampare su seriale la stringa, ma l'unica cosa che ottengo dalla seriale è:
,45Ïí,43þ
neanche ripetuto.
Proverò con il codice di Francesco94 ora.
EDIT:
Ho provato a eseguire il codice di Francesco94 (che sinceramente non capisco) in questo modo:
int i;
void setup() {
Serial.begin(9600);
}
void loop()
{
String stringa="";
while (i < 5){
char sensore='a'+char(i);
stringa += char(sensore);
i++;
}
Serial.println(stringa);
}
ma la seriale mi stampa il nulla, ovviamente ripetuto all'infinito. Come se la variabile fosse vuota, nell'attesa di vostre risposte leggo il link che mi ha passatoIngHooch
EDIT: che dice le stesse cose dell'arduino Learning. In attesa di vostre risposte farò altre prove
Ok, ci sono riuscito. Ho leggermente riadattato il codice di Francesco94 sino a farlo diventare questo:
//Inizializzo le variabili per lo store dei valori analogici
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
void setup() {
//Inizializzo la porta Seriale
Serial.begin(9600);
}
void loop()
{
//Inizializzo la stringa
String stringa="";
//Leggo i valori dalle porte analogiche
a0 = analogRead(A0);
a1 = analogRead(A1);
a2 = analogRead(A2);
a3 = analogRead(A3);
a4 = analogRead(A4);
a5 = analogRead(A5);
//Aggiungo alla stringa tutti i valori separati da virgole
stringa += int(a0);
stringa += char(',');
stringa += int(a1);
stringa += char(',');
stringa += int(a2);
stringa += char(',');
stringa += int(a3);
stringa += char(',');
stringa += int(a4);
stringa += char(',');
stringa += int(a5);
//Stampo la stringa a Seriale
Serial.println(stringa);
}
Il codice è ben commentato e si spiega da solo, l'output è
Forse questo mio esempio ti può servire anche se non del tutto pertinente, legge una stringa da Arduino e la scrive su un file:
// Scrittura su file da Arduino
import processing.serial.*;
Serial mySerial;
PrintWriter output;
void setup() {
mySerial = new Serial( this, Serial.list()[1], 9600 ); // seleziona la porta seriale di Arduino e la velocità
mySerial.bufferUntil('\n'); // Buffer seriale fino a new line
output = createWriter( "dati.txt" ); // Nome file dati (lo scrive dove risiede il programma)
}
void draw() {
// Imposta dati con data e tempo
int gi = day(); // giorno
int me = month(); // mese
int an = year(); // anno
int se = second(); // secondi
int mn = minute(); // minuti
int or = hour(); // ore
if (mySerial.available() > 0 ) {
String value = mySerial.readStringUntil('\n'); // legge dati da seriale fino a new line
if ( value != null ) {
// scrive dato tempo oppure aggiungere anche data
String s = String.valueOf(or)+":"+String.valueOf(mn)+"."+String.valueOf(se)+" ";
output.print( s );
output.print( value ); // scrive su file lettura da seriale da Arduino
}
}
}
// Esce dal programma alla pressione di qualsiasi tasto
void keyPressed() {
output.flush(); // Scrive i dati rimanenti su file
output.close(); // Chiude il file
exit(); // Esce dal programma
}
ma la seriale mi stampa il nulla, ovviamente ripetuto all'infinito. Come se la variabile fosse vuota, nell'attesa di vostre risposte leggo il link che mi ha passatoIngHooch
EDIT: che dice le stesse cose dell'arduino Learning. In attesa di vostre risposte farò altre prove
Forse la prossima volta è meglio che commento il codice ] ] ] comunque la mia idea comprendeva che tu all'interno del loop inserissi anche le variabili, non ho scritto tutto il codice completo ma intendevo di inserire il mio nel loop con prima le variabili.
adesso sto scrivendo il codice come lo pensavo poi te lo posto.
Ok, ho finito di scrivere il codice come avevo idea che dovesse essere... ma non funziona tuttavia dal momento che non vedo errori gravi (almeno credo,come ho già detto altrove vengo da python, in c scrivo da pochissimo(tre giorni fa)) posto comunque il codice nella speranza che qualcuno possa sistemarlo, che mi piace proprio XD
void setup() {
Serial.begin(9600);
}
void loop() {
String sommaValori = "";
int valori[6]={analogRead(A0),analogRead(A1),analogRead(A2),analogRead(A3),analogRead(A4),analogRead(A5)}; //Raccoglie i vari valori dei sensori e li infila in una lista
byte i=0; //Indice xD
while (i<6){
sommaValori += String(valori[i]); //Appendo alla stringa somma il valore del sensore all posizione i dell'array
Serial.println(sommaValori); //Stampo la stringa
i=i++; //aumento indice
}
}
comunque concordo con uwe, ha più senso che usi più volte il Serial.print piuttosto che fare un'unica grande variabile da spedire...ma il codice ormai l'ho scritto
IngHooch:
Caricare l'array con le analogRead a bomba non dará problemi?
È vero... mi ero dimenticatp del delay tra le letture, basta farli separati... appena a casa provo nuovo codice. A meno che qualcuno nn ci pensi prima.
Francesco
//Inizializzo le variabili per lo store dei valori analogici
int a0;
int a1;
int a2;
int a3;
int a4;
int a5;
void setup() {
//Inizializzo la porta Seriale
Serial.begin(9600);
}
void loop()
{
//Inizializzo la stringa
String stringa="";
//Leggo i valori dalle porte analogiche
a0 = analogRead(A0);
a1 = analogRead(A1);
a2 = analogRead(A2);
a3 = analogRead(A3);
a4 = analogRead(A4);
a5 = analogRead(A5);
//Aggiungo alla stringa tutti i valori separati da virgole
stringa += int(a0);
stringa += char(',');
stringa += int(a1);
stringa += char(',');
stringa += int(a2);
stringa += char(',');
stringa += int(a3);
stringa += char(',');
stringa += int(a4);
stringa += char(',');
stringa += int(a5);
//Stampo la stringa a Seriale
Serial.println(stringa);
}
Inoltre, la funzione myPort.available() restituisce il numero di dati ancora da leggere sulla seriale? Perchè altrimenti aspetto che arduino invia i 6 valori e poi li leggo da processing...
Grazie ancora per tutte le risposte!!!