private ushort[] runCommand(SGPCommand cmd, ushort[] parameters = null) { bus.SetDevice(this.address); var bytesToWrite = new byte[cmd.OpCode.Length + (cmd.ParameterLength * (WORD_LENGTH + CRC_LENGTH))]; if (cmd.ParameterLength > 0 && parameters?.Length != cmd.ParameterLength) { throw new ArgumentException(nameof(parameters)); } Array.Copy(cmd.OpCode, 0, bytesToWrite, 0, cmd.OpCode.Length); if (parameters != null) { foreach (var i in Enumerable.Range(0, parameters.Length)) { Span <byte> span = bytesToWrite.AsSpan().Slice(i * (WORD_LENGTH + CRC_LENGTH) + cmd.OpCode.Length, (WORD_LENGTH + CRC_LENGTH)); span[0] = (byte)(parameters[i] >> 8); span[1] = (byte)(parameters[i] & 0xFF); span[2] = CRC(span.Slice(0, WORD_LENGTH)); } } var argBytes = bytesToWrite.AsSpan(1); bus.WriteI2cBlockData(bytesToWrite[0], argBytes.ToArray()); Thread.Sleep(cmd.ResponseTimeMs); if (cmd.ResponseLength > 0) { var data = new byte[cmd.ResponseLength * (WORD_LENGTH + CRC_LENGTH)]; bus.ReadI2cBlockData(0, data); ushort[] result = ReadCheckSummedWords(data); return(result); } return(Array.Empty <ushort>()); }
private byte[] runCommand(byte command, int resultLength) { bus.SetDevice(this.address); bus.WriteData(new byte[] { command }); if (resultLength > 0) { byte[] result = new byte[resultLength]; bus.ReadData(result); return(result); } return(Array.Empty <byte>()); }
public BME280(I2CBus bus, int address = DEFAULTADDRESS) { this.bus = bus; this.address = address; bus.SetDevice(this.address); var chipId = new byte[1]; bus.WriteData(new byte[] { 0xD0 }); bus.ReadData(chipId); System.Console.WriteLine($"Chip id = {chipId[0]} Expected {CHIPID}"); this.getCalibrationData(); this.getHumidityCalibrationData(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); I2CBus bus = new I2CBus(); bus.Open("/dev/i2c-1"); bus.SetDevice(0x58); SGP30 sensor = new SGP30(bus); string str = sensor.GetSerialNumber(); Console.WriteLine($"SGP30 Serial number: {str}"); sensor.InitAirQuality(); var baseLine = sensor.GetBaseline(); Console.WriteLine($"Baseline: {baseLine.Raw_CO2} {baseLine.Raw_VOC}"); //sensor.SetBaseline(0, 0); values are only available after 12 hours or something so no clue // what a valid baseline is // while (true) // { // var result = sensor.MeasureAirQuality(); // Console.WriteLine($"{DateTime.Now} {result.CO2_PartsPerMillion}"); // Thread.Sleep(1000); // } BME280 sensor2 = new BME280(bus, 0x76); while (true) { var temperature = sensor2.ReadTemperature(); Console.WriteLine($"{DateTime.Now} Temperature: {temperature}"); Thread.Sleep(1000); } }