Buonasera a tutti
vi scrivo poiché durante un progetto mi é sorto un dubbio, io ho due shield, uno é un sensore di pressione e l'altro un accelerometro, entrambi hanno la necessità di usare il pin sda si può usare lo stesso pin? Se no come posso risolvere? Come arduino ho arduino ethernet.
Vi ringrazio in anticipo a tutti per le vostre risposte
Dicendo pin sda fai intuire che i dispositivi in questione utilizzino il protocollo I2C in questo caso si, il pin sda come il pin scl puo e deve essere condiviso da tutti i dispositivi.
I2C
Se invece è dedicato ad altri scopi, allora bisogna prima capire cosa effettivamente fa.
Grazie mille per la celere risposta. Allora l'idea era che il sensore di pressione se rilevava una pressione minore di un valore accendeva un led, nel frattempo l'accelerometro deve misurare le accelerazioni e riportarle su un grafico. Grazie ancora
Devi verificare con che sistema questi due dispositivi comunicano con Arduino.
cioè nel senso in che modo o ogni quanto invia i dati ad arduino?
No, proprio come fisicamente dialogano i sensori ed arduino, scrivi i modelli che stai usanto o meglio dacci qualche link di riferimento.
Allora accelerometro: gy-521 per l'accelerometro ;
barometro: gy-68 per il barometro ;
grazie ancora
Entrambi usano il protocollo I2C.
Quindi come posso fare? parlando terra-terra
Il protocollo i2c prevede l'utilizzo di 2 soli pin, comuni a tutti i dispositivi. Insomma: puoi usare gli stessi pin.
vi ringrazio a tutti per le risposte, però il problema persiste infatti eseguendo un test per trovare gli indirizzi dei moduli il monitor seriale mi restituisce il seguente errore:
I2C Scanner
Scanning...
Unknow error at address 0x01
Unknow error at address 0x02
Unknow error at address 0x04
No I2C devices found
Scanning..
e il codice si blocca. Fisicamente i cavi dei 2 moduli sono collegati sui i pin sda e scl. il codice che uso é il seguente:
#include <Wire.h>
void setup()
{
Wire.begin();Serial.begin(9600);
Serial.println("\nI2C Scanner");
}void loop()
{
byte error, address;
int nDevices;Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");delay(5000); // wait 5 seconds for next scan
}
potete aiutarmi a districare l'inghippo? Grazie a tutti
Con un modulo solo collegato funziona? Hai i resistori di pull-up?
Per capire il bus I2C studiati QUESTO tutorial
Guglielmo