Arduino -> mehrere SRF02 Sensoren

Hallo
für ein Projekt möchte ich mehrere SRF02 Sensoren über ein Arduino Mikrocontroller abfragen.
Die Abfrage eines einzelnen Sensors funktioniert auch.

Ich benutze dazu diesen Code → http://arduino.cc/forum/index.php?topic=86368.0;wap2

Soweit so gut.
Die Abfrage von mehrere SRF02 Sensoren bekomme ich leider nicht hin. Dazu habe ich versucht den oberen Code etwas zu ergänzen.

Problem: die Ausgabe für “Entfernung1” und “Entfernung2” gibt immer den gleichen Wert aus!!
Ich vermute das bevor “Entfernung2” gemessen wird ich wahrscheinlich den Speicher wieder auf Null setzen müsste. Bin allerdings neu auf dem Gebiet und noch nicht so fit in der Programmiererei.

#include <Wire.h>

#define srfAddress1 0x70 // Address of the SRF02
#define srfAddress2 0x72 // Address of the SRF02

#define cmdByte 0x00 // Command byte
#define rangeByte 0x02 // Byte for start of ranging data

byte highByte = 0x00; // Stores high byte from ranging
byte lowByte = 0x00; // Stored low byte from ranging
int range = 0;
int rangeData;

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

void loop()
{
rangeData=getRange();
}

int getRange() // This function gets a ranging from the SRF02
{

//Sensor 1

Wire.beginTransmission(srfAddress1); // Start communticating with SRF02
Wire.write((uint8_t)cmdByte); // Send Command Byte
Wire.write((uint8_t)0x51); // Send 0x51 to start a ranging
Wire.endTransmission();

delay(100); // Wait for ranging to be complete

Wire.beginTransmission(srfAddress1); // start communicating with SRFmodule
Wire.write((uint8_t)rangeByte); // Call the register for start of ranging data
Wire.endTransmission();

Wire.requestFrom(srfAddress1, 2); // Request 2 bytes from SRF module

while(Wire.available() < 2); // Wait for data to arrive
highByte = Wire.read(); // Get high byte
lowByte = Wire.read(); // Get low byte

range = (highByte << 8 ) + lowByte; // Put them together

//print it
Serial.print("Entfernung1: ");
Serial.print(rangeData, DEC);
delay(500);

//Sensor 2

Wire.beginTransmission(srfAddress2); // Start communticating with SRF02
Wire.write((uint8_t)cmdByte); // Send Command Byte
Wire.write((uint8_t)0x51); // Send 0x51 to start a ranging
Wire.endTransmission();

delay(100); // Wait for ranging to be complete

Wire.beginTransmission(srfAddress2); // start communicating with SRFmodule
Wire.write((uint8_t)rangeByte); // Call the register for start of ranging data
Wire.endTransmission();

Wire.requestFrom(srfAddress2, 2); // Request 2 bytes from SRF module

while(Wire.available() < 2); // Wait for data to arrive
highByte = Wire.read(); // Get high byte
lowByte = Wire.read(); // Get low byte

range = (highByte << 8 ) + lowByte; // Put them together

//print it
Serial.print(" Entfernung2: ");
Serial.println(rangeData, DEC);
delay(500);

return(range); // Returns Range

}

Bitte poste deinen Beitrag im Deutsch-Forum.

The problem is caused by calculating the value but not printing it. You use 2 different variables, the problem is in this part for both sensors.

range = (highByte << 8 ) + lowByte; // Put them together

//print it
Serial.print(" Entfernung2: ");
Serial.println(rangeData, DEC);
delay(500);

Please provide an English translation too when posting on the international section


Das Problem wird verursacht durch die Berechnung des Wertes aber Sie drucken es nicht ab. Sie verwenden zwei verschiedene Variablen, [für beide Sensoren]. Bitte geben sie eine englische Übersetzung auf dem internationalen Teil des Forums

Thanks for your advice.

I have replaced

range = (highByte << 8 ) + lowByte; // Put them together

//print it
Serial.print(" Entfernung2: ");
Serial.println(rangeData, DEC);
delay(500);

with

range = (highByte << 8 ) + lowByte; // Put them together

//print it
Serial.print(" Entfernung2: ");
Serial.println(range, DEC);
delay(500);

and it works now.

Can i delete some parts of the code or can i make the code a bit shorter? Do you have any idea, or is it right now?