41 lines
No EOL
1.1 KiB
C#
41 lines
No EOL
1.1 KiB
C#
using System;
|
|
|
|
namespace GrovePi.Sensors
|
|
{
|
|
public interface IAccelerometerSensor
|
|
{
|
|
byte[] Read();
|
|
}
|
|
|
|
internal class AccelerometerSensor : IAccelerometerSensor
|
|
{
|
|
private const byte CommandAddress = 20;
|
|
private readonly GrovePi _device;
|
|
private readonly Pin _pin;
|
|
|
|
internal AccelerometerSensor(GrovePi device, Pin pin)
|
|
{
|
|
if (device == null) throw new ArgumentNullException(nameof(device));
|
|
_device = device;
|
|
_pin = pin;
|
|
}
|
|
|
|
public byte[] Read()
|
|
{
|
|
var buffer = new [] {CommandAddress, (byte) _pin, Constants.Unused, Constants.Unused};
|
|
_device.DirectAccess.Write(buffer);
|
|
|
|
var readBuffer = new byte[1];
|
|
_device.DirectAccess.Read(readBuffer);
|
|
|
|
if (readBuffer[1] > 32)
|
|
readBuffer[1] = (byte) -(readBuffer[1] - 224);
|
|
if (readBuffer[2] > 32)
|
|
readBuffer[2] = (byte) -(readBuffer[1] - 224);
|
|
if (readBuffer[3] > 32)
|
|
readBuffer[3] = (byte) -(readBuffer[1] - 224);
|
|
|
|
return readBuffer;
|
|
}
|
|
}
|
|
} |