private async void Analogs_Click(object sender, EventArgs e) { List <IAnalog> analogs = new List <IAnalog>(); List <Analog> an = await data.GetAnalogs(1); if (analogs.Count() > 0) { textBox1.Text += string.Format("GetAnalogs() {0} analogs retrieved \r\n", analogs.Count()); } foreach (Analog a in an) { if (a.HardwareType == HardwareTypes.SPI) { SPIAnalog analog = new SPIAnalog(a.Id, a.Address); analog.Multiplier = a.Multiplier; analog.Units = a.Units; analog.Name = a.Name; analog.Description = a.Description; analogs.Add(analog); } } foreach (IAnalog a in analogs) { textBox1.Text += string.Format("Id:{0} name:{1} description:{2} Address:{3} Value:{4} Multiplier:{5} Units;{6} \r\n", a.Id, a.Name, a.Description, a.Address, a.Value, a.Multiplier, a.Units); } }
public IAnalog CreateAnalog(Analog a) { log.DebugFormat("InterfaceService.CreateAnalog() {0}", a.Name); //Address property will be SPI:CHANNEL, eg 0:1 //The following code parses out the address to get SPI and CHANNEL string[] parts = a.Address.Split(':'); int spiId = Convert.ToInt32(parts[0]); string channel = parts[1]; if (spiId > Spis.Count - 1) { throw new Exception(string.Format("Configuration error: unknown SPI Id {0}", spiId)); } ConnectorPin spiClock = GetGPIOPin(string.Format("P1Pin{0}", 23)); ConnectorPin spiCs = GetGPIOPin(string.Format("P1Pin{0}", 24)); ConnectorPin spiMISO = GetGPIOPin(string.Format("P1Pin{0}", 21)); ConnectorPin spiMOSI = GetGPIOPin(string.Format("P1Pin{0}", 19)); SpiDevice spi = new SpiDevice(spiClock, spiCs, spiMISO, spiMOSI, gpioDriver); Spis[spiId].Hardware = spi; if (spi == null) { throw new Exception(string.Format("Configuration error: unknown SPI Id {0}", spiId)); } //log.DebugFormat("CreateAnalog(): SPI:{0} Channel:{1}", spiId, channel); //log.DebugFormat("Spi {0}", Spis[0].Data.Name); log.DebugFormat("Analog name {0}", a.Name); IInputAnalogPin pin; switch (channel) { case "0": pin = spi.Connection.In(Mcp3008Channel.Channel0); break; case "1": pin = spi.Connection.In(Mcp3008Channel.Channel1); break; case "2": pin = spi.Connection.In(Mcp3008Channel.Channel2); break; case "3": pin = spi.Connection.In(Mcp3008Channel.Channel3); break; case "4": pin = spi.Connection.In(Mcp3008Channel.Channel4); break; case "5": pin = spi.Connection.In(Mcp3008Channel.Channel5); break; case "6": pin = spi.Connection.In(Mcp3008Channel.Channel6); break; case "7": pin = spi.Connection.In(Mcp3008Channel.Channel7); break; default: throw new Exception(string.Format("Configuration error: unknown analog input channel {0}", channel)); } //ElectricPotential referenceVoltage = ElectricPotential.FromVolts(3.3); //var driver = new MemoryGpioConnectionDriver(); //GpioConnectionSettings.DefaultDriver; //Mcp3008SpiConnection _spi = new Mcp3008SpiConnection( // driver.Out(GetGPIOPin("P1Pin23")), // driver.Out(GetGPIOPin("P1Pin24")), // driver.In(GetGPIOPin("P1Pin21")), // driver.Out(GetGPIOPin("P1Pin19"))); //IInputAnalogPin inputPin = spi.Connection.In(Mcp3008Channel.Channel0); //var sample = referenceVoltage * (double)pin.Read().Relative; //log.DebugFormat("CreateAnalog() sample: {0} mV", sample.Millivolts); SPIAnalog ana = new SPIAnalog(pin, a.Name, a.Multiplier, a.Units); ana.Sample(); log.DebugFormat("CreateAnalog() sample: {0} mV", ana.Value); //ana.Value; return(ana); }