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.