srf02, i2c mode. Come programmare?

Salve a tutti, ho da poco Arduino e non riesco a far funzionare il mio sensore a ultrasuoni srf02.

Ho provato a collegarlo sia in serial mode sia in i2c mode, ma niente di fatto… ho anche già guardato praticamente tutti i forum e i consigli che ci sono in internet, ma niente!!!

Qualcuno potrebbe aiutarmi???

Questo è uno dei tanti listati che ho scritto in serial mode:

int i = 0;
unsigned long j,k = 0;

void setup() {

pinMode(8, OUTPUT); // questi sono 4 led che mi indicano la distanza
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
for(i=8;i<12;i++){
digitalWrite(i, HIGH);}

Serial.begin(9600);
delay(100);
Serial.write(0,HEX);
Serial.write(0x51);
delay(500);

for(i=1;i<=2;i++){z*=0;};*

  • for(i=8;i<12;i++){*
  • digitalWrite(i, LOW);}*
  • delay(1000);*
    }
    void loop() {

Serial.write(0,HEX);
Serial.write(0x5E);
delay(100);
for(i=8;i<12;i++){

  • digitalWrite(i, LOW);};*
    if (Serial.available()==2) {
    j=Serial.read();
    k=Serial.read();
    if (k>30) digitalWrite(8, HIGH); //distanza a cui si trova l’oggetto in cm
    if (k>50) digitalWrite(9, HIGH);
    if (k>100) digitalWrite(10, HIGH);
    if (k>200) digitalWrite(11, HIGH);
    Serial.flush();
    j,k = 0;
    delay(100);
    };
    }
    con questo codice dovrebbe (almeno credo) aggiornarmi la misura circa ogni 200 millisecondi, invece mi legge la misura solo una volta (cioè appena accendo aruino il sensore legge la distanza, ma poi non l’aggiorna).
    Qualcuno potrebbe aiutarmi??? Grazie mille in anticipo…

i2c funziona solo in pin analog 4 e 5

Inoltre qualora ti serivsse c'e' pure questa libreria che ho gia' provato: http://www.grapelabs.de/index.php?id=51

si grazie federico avevo già visto quel sito, ma non riesco a farlo funzionare nemmeno in quel modo, vi mostro il programma che avevo fatto:

#include “Wire.h”
#include “SRF02.h”

SRF02 sensor(0x70, SRF02_CENTIMETERS);
int i = 0;
unsigned long nextPrint,a = 0;

void setup()
{
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
for(i=8;i<12;i++){
digitalWrite(i, HIGH);}

Wire.begin();

delay(1000);
for(i=8;i<12;i++){
digitalWrite(i, LOW);}
delay(1000);

}

void loop()
{
SRF02::update();
if (millis() > nextPrint)
{

a = sensor.read();
if (a>30){digitalWrite(8, HIGH);};
if (a>50){digitalWrite(9, HIGH);};
if (a>100){digitalWrite(10, HIGH);};
if (a>200){digitalWrite(11, HIGH);};

// Serial.println(sensor.read());
nextPrint = millis () + 1000;
}
}

a me sembra giusto, ma comunque non riesco a farlo funzionare.
Ho provato sia con le resistenze che senza, ma niente di fatto…

Potrebbe essere il sensore rotto??? o è poco probabile?

Con questo codice funziona? Le resistenze di pullup sul bus i2c ci vanno, ma dovrebbe dare lo stesso valori anche senza. Il codice restituisce valori sulla seriale.

#include "Wire.h"
#include "SRF02.h"

SRF02 srf02[3] =
{
  SRF02(0x70, SRF02_CENTIMETERS),
  SRF02(0x71, SRF02_CENTIMETERS),
  SRF02(0x72, SRF02_CENTIMETERS)
};

unsigned long nextPrint = 0;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  SRF02::setInterval(500);
}

void loop()
{
  while (true)
  {
    SRF02::update();
    if (millis() > nextPrint)
    {
      Serial.print(srf02[0].read());
      Serial.print(",");
      Serial.print(srf02[1].read());
      Serial.print(",");
      Serial.print(srf02[2].read());
      Serial.println();
      nextPrint = millis () + 1000;
    }
  }
}