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);
            }
        }
Exemple #2
0
        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);
        }