Offline
Jr. Member
Karma: 0
Posts: 74
|
 |
« on: April 15, 2012, 08:54:49 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #2 on: April 15, 2012, 10:17:53 am » |
Se non vado errato basta che cri una stringa vuota e poi "appendi" i vari valori: String stringa=""; for (int i=0,i=5,i++){ char sensore='a'+char(i); stringa += char(sensore); } Serial.println(stringa); Spero serva(ma soprattutto spero sia giusto  )
|
|
|
|
« Last Edit: April 15, 2012, 10:26:48 am by Francesco94 aka J.T.Kirk »
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 18
Posts: 4051
Arduino rocks
|
 |
« Reply #3 on: April 15, 2012, 10:24:51 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 74
|
 |
« Reply #4 on: April 15, 2012, 11:44:55 am » |
Grazie per le risposte tempestive  , ho provato questo codice: int a0; int a1; int a2; int a3; int a4; int a5;
void setup() { Serial.begin(9600); }
void loop() { a0 = analogRead(A0); a1 = analogRead(A1); a2 = analogRead(A2); a3 = analogRead(A3); a4 = analogRead(A4); a5 = analogRead(A5); String stringOne = String(a0 + "," + a1); stringOne = String(stringOne + "," + a2); stringOne = String(stringOne + "," + a3); stringOne = String(stringOne + "," + a4); stringOne = String(stringOne + "," + a5); Serial.println(stringOne); } 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
|
|
|
|
« Last Edit: April 15, 2012, 11:56:49 am by aleale97 »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 74
|
 |
« Reply #5 on: April 15, 2012, 12:08:45 pm » |
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 è 286,288,290,289,290,291 ripetuto all'infinito.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 74
|
 |
« Reply #6 on: April 15, 2012, 12:48:51 pm » |
Domandina: Come faccio a leggere una stringa da processing?  Mi fa leggere solo un int 
|
|
|
|
|
Logged
|
|
|
|
|
BG (I)
Offline
Full Member
Karma: 0
Posts: 199
Usus plura docet
|
 |
« Reply #7 on: April 15, 2012, 02:05:41 pm » |
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 }
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #8 on: April 15, 2012, 02:29:46 pm » |
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 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.
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 172
Posts: 16135
+39 349 2158303
|
 |
« Reply #9 on: April 15, 2012, 02:52:26 pm » |
non capisco il problema; mandi i valori uno dopo l'altro sulla seriale con altretanti Serial.print(); Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #10 on: April 15, 2012, 02:59:23 pm » |
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  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 Francesco
|
|
|
|
|
Logged
|
|
|
|
|
Firenze, Italy
Offline
Full Member
Karma: 0
Posts: 102
Dislessia portami via
|
 |
« Reply #11 on: April 16, 2012, 12:08:03 am » |
Questo dovrebbe andare. Caricare l'array con le analogRead a bomba non dará problemi?
|
|
|
|
|
Logged
|
The brightest flame burns quickest
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #12 on: April 16, 2012, 04:57:07 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2955
The quieter you become, the more you can hear
|
 |
« Reply #13 on: April 16, 2012, 05:07:14 am » |
non è che dovresti convertire i numeri in ascii prima di usarli ? (la funzione itoa ti dice niente?)
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 74
|
 |
« Reply #14 on: April 16, 2012, 08:06:53 am » |
ragazzi pensavo di aver risolto con: //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); } invece processing mi da questo output: 215,213
309,315,318,316,322,324
38 9,386,384,384,381,379 241, 241,239,232, 233,230 256,259,261,266
Cosa mi sta a significare? 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!!! 
|
|
|
|
|
Logged
|
|
|
|
|
|