arduino/ping/maxmsp

scusate, sono nuovo del forum, vorrei aiuto in merito ad un progetto che vorrei realizzare. vi posto subito la mia domanda sperando che qualcuno possa essermi di aiuto.

materiale:
arduino 2009 atmega328
parallax ping sensors
maxmsp software

la mia domanda è semplice ma difficile nello stesso tempo, almeno per me.. visto che dopo svariati tentativi non ne sono ancora venuto a capo.

vorrei collegare 4 parallax ping sensors alla mia arduino e leggere i corrispettivi valori in maxmsp per ognuno di loro..
per fare questo ho questo codice per lo sketch di arduino:

int pingPin = 7;

void setup()
{
Serial.begin(9600);
}

void loop()
{
long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// We give a short LOW pulse beforehand to ensure a clean HIGH pulse.
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

Serial.print(inches);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

mentre la patch in maxmsp è la seguente:

----------begin_max5_patcher----------
1405.3oc0Z00aihCE84jeEV7bZks4qv7VWsuMZVMRqztOLZTkC3l3s.NBLcZ
6n4+9hsIDbBP.RZZmWBEav9bO9du12C8mymYsh+LM2B7Iv2.yl8y4yloZR1v
rp6mYkPdNLljqdLqDZdNYM0ZgtOA8YgpcDxAfCr209C7TQJIgp56tLFIdWO7
BQLUHdYKUOsVVfu23kxYup5.guEV07VhHbCKc88YzPg9kvt1kcCbfNxKHnm5
xxag0iEKRM07U+2MtN6l6zhDVZ4rqLE79F0XR0JR13ulOW9yhAxIozeTNOGQ
IaAgYThf9EZZQq7x+PyhHojQxLA8QLNXeIUfQP4EerhW7amWPdsxKn14klyI
MqhMpniR.xhoOQyxY7zFO8Lq8HyEEn.CxQCP0Bnsm8drURyqi4gORUPDtqwH
5CiaT3aoo6eCEQX7i4SxR2lQyooBhnB7MmYRQr3918KM6+ARHsyWtiU7YVqy
XQ7TILLdWYy6lvuAPtJS1sIxUOQJYaKurfyiWQxdhkyVESMVMJciIorjReRA
SiHLr98XIayXoBiwhlRJGiM4gY73XigR2ySszSD8IVH8GrHwF0XsmuLR1zv6
wH.yn8CBzVUHDkqQK128QwLqHoqqia5JJox8A4f2wrGvuGFozbJaKXoqDIy1
kLQ+GKlncalz0LKSXLkj0rm9b35OMS2oZNEQ5sTEGZeJhD2IQhuJDoQl5CxV
mQKijh.jsxKMejXVJMjWnCMvuSLMthnUo28UzMdY2Ds86rGaOD8qw.lflAPm
mS6hKAchTGbvw+vsIOjNclfeK95PmYkSIErkmId+4SeEc55cJ5zcBdmWR5TO
rVCwjvNZqo92trIuIXSMI0PdRBUmiwx5BZqJbLhrRcxD13gQD9cRDvtS8LBh
X+gfjIl637DJqP1e6LTNuHKbm8WsCOvzhhn4BVZ8gB+V8FXG7baXQQlm.SsD
vh1xKOMUE7.eePqniE0tCD0nOTnFOPT68gB01+VhZmAhZ6eK8qc9PgZ+AhZ2
KHpqZrD95xyyIOQitubVJSdeOQHxXk0LoSRZTtdeEkdpxdasb2IUibY49qHw
URJTiGqAUB878LwHkqoHYfBxDSVQiCiYgO1TAji1+TVz7hCNAk0p0g7Xd1NM
H7rcwANR4GVBsCvX4e4D.QAdkal1TdFAMoZ81pHeUNUJc1M2sDBou74WkSwB
4O+QbAsrNewla95ed2M+8Kogsz0W3Qzj51YecCOkFw9LKJm+3eUvD27urLZ4
dC0Stzlpc1FqxS15hoWVUYcvQJOIOwpAmXnKCpcMpv1iPiJ6Kn1cUUC13b0u
8Z2A00gfUDotj5tztC6LFs6l.uH3qWGSs5ymuFWcKPKRKGYkncAcXKduw1RG
qwITQFGfgSZ80PmoguFuiWbUqwt8pOK1+8Q25Gx3I4ujrhGes77wt5ZsBTJw
44zqp0v2GuElfSlDeXDpLZJQKguCrWJA0JkX+VSIuFCVmwK1B77llmxhyxaw
Qkgzq+uwAdDwP3KG0jSiAHH.YO8jKK1e8LHIn6oSzfdm1jUe5FvCf.OHDrDf
.vIGgcVrDRKbEJn+7wKGAMMEeot91p5uKykKWb+eaUzRXiiv4B6aqazT2hRM
XlB3nYnCK5phmNVvFCMM5R2CnwCcTYVsWh0QqZCFS3gfIzUESXuAfIr+0kmF
DlrGGlbr8t0sLgmsuNgm96fabmu9qE6hjOnu5aFed1g+PrikiyNPKCjvC4qP
I1yt9ty0SPBDzo7N8ttdmuEL34hI6AvSXmqKlbdC3IGjm12REVT6ocAhKrGR
dP70kAWNDLYecyCJmN7ElmvAU4A8Zrppt6bQKb.Ln7+0pFAOmFsZ7IyIKSM6
DTemAZKu4Wy+ecKVatC
-----------end_max5_patcher-----------

come potete vedere.. il codice arduino crea dei valori corrispondenti all entrata digitale 7..quindi per un unico ping... ma la mia necessità usando 4 ping è di averne 4 diversi per i digitali 7, 6, 5, 4 (visto che arduino 2009 legge i digitali da 0 a 7). ho provato a collegare i diversi ping alla stessa porta 7 ma come volevasi dimostrare il codice crea un casino nella numerazione e giustamente legge i ping uniti.. creando una sballata numerazione... di conseguenza in max succede la stessa cosa visto che il messagio di lettura dei valori arriva dal codice arduino.
ho provato anche a scrivere i codici arduino separatamente per ogni porta in diversi sketch(perchè insieme mi da errore)..e anche se così funziona su ogni porta non è possibile farlo per tutte nello stesso momento .. cioè, mi spiego meglio, il codice arduino compila uno sketch alla volta.. quindi...
purtroppo non essendo un vero programmatore non sono in grado di elaborare un giusto codice arduino che dia la possibilità di leggere contemporaneamente 4 diversi ping per 4 diverse porte digitali.
facendo un giro in rete ho visto che bisogna duplicare per 4 pinping il codice arduino creando una sorta di loop tra essi.. ma davvero non ci sono riuscito. i miei tentativi danno sempre errore!

spiegato tutto sto incasinamento..
cè qualcuno in grado di aiutarmi, anzi, che sia capace di riscrivere ad hoc un nuovo codice arduino che legga contemporaneamente questi 4 ping per le porte 7, 6, 5, 4 e correggere la mia patch su maxmsp che via arduino riconosca il tutto?

spero davvero che qualcuno di voi programmatori possa aiutarmi, è davvero importante per me risolvere questo dilemma.
grazie in anticipo...
buona giornata.

ciao ikid
La logica di funzionamento é che mandi prima un impulso sonoro e poi aspetti ad sentire l' eco. Per fare questo puoi farlo solo per un sensore alla volta perché la funzione pulseIn() aspetta e non fa eseguire altro codice.
dopo il primo sensore puoi ripetere la misura col secondo sensore e così via

Non l'ho provato ne ho la possibilitá di farlo comunque provo:

definisci i piedini per gli altri sensori
int pingPin2 = 6;
int pingPin3 = 5;
int pingPin4 = 4;

poi nell loop() dopo la misura del primo sensore aggiungi quello del secondo terzo e quarto.
Esempio per il secondo sensore:

...
pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);
...

ovviamente devi definire le variabili aggiunte.

Ciao Uwe

Ciao Uwe

hmmmmm...

ho provato in questo modo... ma mi da questo errore:
In function 'void loop()':
error: 'duration2' was not declared in this scope

int pingPin = 7;
int pingPin2 = 6;
int pingPin3 = 5;
int pingPin4 = 4;

void setup()
{
Serial.begin(9600);
}

void loop()
{
long duration, inches, cm;

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

pinMode(pingPin3, OUTPUT);
digitalWrite(pingPin3, LOW);
delayMicroseconds(2);
digitalWrite(pingPin3, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin3, LOW);

pinMode(pingPin3, INPUT);
duration2 = pulseIn(pingPin3, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

pinMode(pingPin4, OUTPUT);
digitalWrite(pingPin4, LOW);
delayMicroseconds(2);
digitalWrite(pingPin4, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin4, LOW);

pinMode(pingPin4, INPUT);
duration2 = pulseIn(pingPin4, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

Serial.print(inches);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}

ancora un altra prova....

int pingPin1 = 7;
int pingPin2 = 6;
int pingPin3 = 5;
int pingPin4 = 4;

void setup()
{
Serial.begin(9600);
}

void loop()
{
long duration1, inches1, cm1;

pinMode(pingPin1, OUTPUT);
digitalWrite(pingPin1, LOW);
delayMicroseconds(2);
digitalWrite(pingPin1, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin1, LOW);

pinMode(pingPin1, INPUT);
duration1 = pulseIn(pingPin1, HIGH);

inches1 = microsecondsToInches(duration1);
cm1 = microsecondsToCentimeters(duration1);

void loop()
{
long duration2, inches2, cm2;

pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

void loop()
{
long duration3, inches3, cm3;

pinMode(pingPin3, OUTPUT);
digitalWrite(pingPin3, LOW);
delayMicroseconds(2);
digitalWrite(pingPin3, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin3, LOW);

pinMode(pingPin3, INPUT);
duration3 = pulseIn(pingPin3, HIGH);

inches3 = microsecondsToInches(duration3);
cm3 = microsecondsToCentimeters(duration3);

void loop()
{
long duration4, inches4, cm4;

pinMode(pingPin4, OUTPUT);
digitalWrite(pingPin4, LOW);
delayMicroseconds(2);
digitalWrite(pingPin4, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin4, LOW);

pinMode(pingPin4, INPUT);
duration4 = pulseIn(pingPin4, HIGH);

inches4 = microsecondsToInches(duration4);
cm4 = microsecondsToCentimeters(duration4);

Serial.print(inches1);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm1);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}

Serial.print(inches2);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm2);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}

Serial.print(inches3);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm3);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}

Serial.print(inches4);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm4);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds)
{

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{

return microseconds / 29 / 2;
}

niente!!!!!!

Ciao Ikid,
a mio avviso dovresti dichiarare tutte le variabili che ti servono come hai fatto per:

long duration, inches, cm;

Dovrai farlo anche per

long duration1, inches1, cm1; e cosi via..

Ciao

M.

Ciao Ikid,
ci sono un pò di errori nel tuo programma.

  • Prima di tutto le variabili vanno settate fuori dal loop e dal setup.
  • Può esserci solo un loop nel programma.
  • Le righe riportate sotto sono delle funzioni che devono essere scritte una sola volta e richiamate all'occorrenza
long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}

Questo di seguito è il tuo codice ripulito ma non so se funzionante perchè non ho a disposizione il tuo hardware..spero ti possa essere utile

int pingPin1 = 7;
int pingPin2 = 6;
int pingPin3 = 5;
int pingPin4 = 4;
long duration1, inches1, cm1;
long duration2, inches2, cm2;
long duration3, inches3, cm3;
long duration4, inches4, cm4;

void setup()
{
Serial.begin(9600);
}

void loop()
{
pinMode(pingPin1, OUTPUT);
digitalWrite(pingPin1, LOW);
delayMicroseconds(2);
digitalWrite(pingPin1, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin1, LOW);

pinMode(pingPin1, INPUT);
duration1 = pulseIn(pingPin1, HIGH);


inches1 = microsecondsToInches(duration1);
cm1 = microsecondsToCentimeters(duration1);

pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

pinMode(pingPin3, OUTPUT);
digitalWrite(pingPin3, LOW);
delayMicroseconds(2);
digitalWrite(pingPin3, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin3, LOW);

pinMode(pingPin3, INPUT);
duration3 = pulseIn(pingPin3, HIGH);

inches3 = microsecondsToInches(duration3);
cm3 = microsecondsToCentimeters(duration3);

pinMode(pingPin4, OUTPUT);
digitalWrite(pingPin4, LOW);
delayMicroseconds(2);
digitalWrite(pingPin4, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin4, LOW);

pinMode(pingPin4, INPUT);
duration4 = pulseIn(pingPin4, HIGH);

inches4 = microsecondsToInches(duration4);
cm4 = microsecondsToCentimeters(duration4);

Serial.print(inches1);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm1);
Serial.println();

delay(100);

Serial.print(inches2);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm2);
Serial.println();

delay(100);

Serial.print(inches3);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm3);
Serial.println();

delay(100);

Serial.print(inches4);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm4);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}

Ciao e buona giornata

M.

allora...
il codice in questa maniera non mi da errore.. e anzi. si illuminano tutti i sensori...
ma la numerazione nel serial monitor... (cioè quella che deve dare i diversi valori.. e che credo essendo 4 sensori con 2 numerazioni per ognuno mi dovrebbe dare 8 cifre separate).. invece mi da ancora due..
rallentate nelo svolgersi. trall altro..
e anche se provo a muovere la mano davanti la numerazione cambia in modo strano non correttamente.

Il problema potrebbe dipendere dal timing dei sensori.

Nel nuovo codice viene fatta la lettura, stampata e poi si attende 100 ms

int pingPin1 = 7;
int pingPin2 = 6;
int pingPin3 = 5;
int pingPin4 = 4;
long duration1, inches1, cm1;
long duration2, inches2, cm2;
long duration3, inches3, cm3;
long duration4, inches4, cm4;

void setup()
{
Serial.begin(9600);
}

void loop()
{
pinMode(pingPin1, OUTPUT);
digitalWrite(pingPin1, LOW);
delayMicroseconds(2);
digitalWrite(pingPin1, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin1, LOW);

pinMode(pingPin1, INPUT);
duration1 = pulseIn(pingPin1, HIGH);

inches1 = microsecondsToInches(duration1);
cm1 = microsecondsToCentimeters(duration1);

Serial.print(inches1);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm1);
Serial.println();

delay(100);

pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

inches2 = microsecondsToInches(duration2);
cm2 = microsecondsToCentimeters(duration2);

Serial.print(inches2);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm2);
Serial.println();

delay(100);

pinMode(pingPin3, OUTPUT);
digitalWrite(pingPin3, LOW);
delayMicroseconds(2);
digitalWrite(pingPin3, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin3, LOW);

pinMode(pingPin3, INPUT);
duration3 = pulseIn(pingPin3, HIGH);

inches3 = microsecondsToInches(duration3);
cm3 = microsecondsToCentimeters(duration3);

Serial.print(inches3);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm3);
Serial.println();

delay(100);

pinMode(pingPin4, OUTPUT);
digitalWrite(pingPin4, LOW);
delayMicroseconds(2);
digitalWrite(pingPin4, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin4, LOW);

pinMode(pingPin4, INPUT);
duration4 = pulseIn(pingPin4, HIGH);

inches4 = microsecondsToInches(duration4);
cm4 = microsecondsToCentimeters(duration4);

Serial.print(inches4);
Serial.print(32, BYTE);// space in ascii
Serial.print(cm4);
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}

Prova cosi..però non è facile senza l'hardware!! :wink:

M.

ora i sensori si illuminano uno dopo l altro..
ma invece di darmi la lettura della numerazione in sequenza me la da una sotto l laltra nel serial number di arduino.. in differenti numeri.. infatti se provo a muoverci qualcosa davanti ora cambia in base alla distanza.. solo che la lettura è abbastanza lenta forse proprio per il fatto che legge uno alla volta e non tutti contemporaneamente.
invece prima si illuminavano tutti in sincrono... devo controllare nuovamente se la lettura era per ognuno separata anche se erano uno sotto l laltro.
forse è la soluzione.....

grazie.

Ciao ikid

Senza offenderti
secondo me dovresti incominciare a imparare Arduino partendo da esempi piú semplici.
Non ha senso incominciare con cose che non comprendi in questo momento per la tua conoscenza limitata e hai bisogno di aiuto e non capisci quello che Ti consigliamo.
Incomincia con gli esempi di un libro di Arduino o col tutorial di questo sito http://arduino.cc/en/Tutorial/HomePage .
Comunque Ti aiutiamo, ma non ritengo sensato farti la pappa pronta. Con la pappa pronta non impari.

Ciao Uwe

Certo hai ragione! Non mi aspettavo che mi si preparasse la pappa.. E forse ho sbagliato a presentarmi con gli ingredienti di una pappa mezza cotta. Sai, ho da poco comprato arduino e avendo questa piccola idea in testa volevo vedere se si potesse realizzare, tutto qui. Ma giustamente non comprendendo appieno i vostri consigli vista la mia conoscenza in merito ancora agli inizi potrebbe sembrare presuontuoso partire in questo modo o postare una domanda su un aiuto del genere. Ringrazio molto le persone che si sono prodigate ad aiutarmi, e visto che ormai "il danno" è fatto spero di finire col vostro aiuto di risolvere il problema. Grazie anche per i consigli su libro o tutorials, magari al piu presto ne compro uno! Vi aggiorno sugli sviluppi. Grazie e buonasera, ciao

direi che una buona guida sul C dovrebbe bastare, tipo questa http://programmazione.html.it/guide/leggi/32/guida-c/

Puoi saltare la parte che riguarda i file, printf() e scanf() si fanno in modo diverso dato che arduino non ha il monitor, ma l'importante è capire come funzionano i programmi. In partica scaricati magari dev-c++ e fatti un pò di programmi in C, poi quando hai capito il ragionamento alla base passa all'arduino. Per sapere i comandi disponibili in arduino (che sono ridotti/diversi rispetto al C vero e proprio) vai quì: Arduino - Home

scusate se non mi sono potuto collegare prima.
grazie davvero a tutti. è bello sapere che si può sempre contare sul prossimo quando si ha bisogno di aiuto. in particolare oltre agli altri voglio ringraziare Gargakk che è stato la colonna portante di questo post.
poi, vi dico che ho scaricato sia il libro di massimo banzi (in inglese :-[ ) sulle basi arduino che diverse guide c e c++. ma mi conviene studiare c o c++? c è molta differenza tra i vari linguaggi?
ora passo a chiedervi l ultimo aiuto in merito alla domanda da cui è nato questo post.

compilato il codice in arduino tutto funziona bene. i sensori vengono rilevati e le variabili numeriche vengono rilasciate dal serial monitor.
ho pero come dicevo l ultima volta una serie di variabili di due per ogni sensore tutte su un unica stringa. ad esempio:

115 245 (sensore 1)
104 234 (sensore 2)
45 78 (sensore 3)
114 127 (sensore 4)

le parti tra le parentesi solo per identificarli, non ci sono nel serial monitor.
mi chiedevo, visto che ho bisogno di agire su ogni singola variabile di due singolarmente è possibile tramite qualche comando in particolare dividere le stringhe ognuna su una colonna diversa? ad esempio:

115 245 104 234 45 78 114 127

dando uno sguardo ai vari comandi arduino ho trovato
string - char array
String - object

e anche Input/Output che dovrebbero essere dei comandi che agiscono sulle stringhe.
potete perfavore indirizzarmi su quali comandi mi conviene usare per poter fare l operazione richiesta?

intanto comincio a leggere la guida che mi ha passato lesto.
grazie e spero di non essere stato presuntuoso in questo mio post.
buona giornata