40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
using GrovePi.Common;
|
|
|
|
namespace GrovePi.Sensors
|
|
{
|
|
public interface IUltrasonicRangerSensor
|
|
{
|
|
int MeasureInCentimeters();
|
|
}
|
|
|
|
internal class UltrasonicRangerSensor : IUltrasonicRangerSensor
|
|
{
|
|
private const byte CommandAddress = 7;
|
|
private readonly GrovePi _device;
|
|
private readonly Pin _pin;
|
|
|
|
internal UltrasonicRangerSensor(GrovePi device, Pin pin)
|
|
{
|
|
_device = device;
|
|
_pin = pin;
|
|
}
|
|
|
|
public int MeasureInCentimeters()
|
|
{
|
|
var buffer = new byte[4] {CommandAddress, (byte) _pin, Constants.Unused, Constants.Unused};
|
|
var result = _device.DirectAccess.WritePartial(buffer);
|
|
if (result.Status != Windows.Devices.I2c.I2cTransferStatus.FullTransfer)
|
|
{
|
|
return -1;
|
|
}
|
|
Delay.Milliseconds(50);
|
|
buffer = new byte[3];
|
|
result = _device.DirectAccess.ReadPartial(buffer);
|
|
if (result.Status != Windows.Devices.I2c.I2cTransferStatus.FullTransfer)
|
|
{
|
|
return -1;
|
|
}
|
|
return buffer[1]*256 + buffer[2];
|
|
}
|
|
}
|
|
}
|