private static void test()
        {   // per test Adc: definizione del convertitore analogico digitale
            DigitalConverterMCP3208 adc = new DigitalConverterMCP3208();

            // per test IO digitale: definizione di canali di IO digitale
            const int chanLed1    = 40;
            const int chanLed2    = 38;
            const int chanButton1 = 37;
            const int chanButton2 = 35;
            DigitalIO pinIn1      = new DigitalIO(chanButton1, GpioPinDriveMode.Input);
            DigitalIO pinIn2      = new DigitalIO(chanButton2, GpioPinDriveMode.Input);
            DigitalIO pinOut1     = new DigitalIO(chanLed1, GpioPinDriveMode.Output);
            DigitalIO pinOut2     = new DigitalIO(chanLed2, GpioPinDriveMode.Output);
            // si può anche fare così:
            //DigitalIO pinIn1 = new DigitalIO(ConnectorPin.P1Pin37, GpioPinDriveMode.Input);
            //DigitalIO pinOut1 = new DigitalIO(ConnectorPin.P1Pin40, GpioPinDriveMode.Output);
            //DigitalIO pinIn2 = new DigitalIO(ConnectorPin.P1Pin35, GpioPinDriveMode.Input);
            //DigitalIO pinOut2 = new DigitalIO(ConnectorPin.P1Pin38, GpioPinDriveMode.Output);

            // definizioni per test output digitali su shift register
            OutShiftRegister  shift      = new OutShiftRegister(16, 25, 24, 23);
            Device_OnOffShift irrigator  = new Device_OnOffShift(shift, 8);   // ottavo pin dello shift register
            Device_OnOffShift humidifier = new Device_OnOffShift(shift, 2);   // secondo pin dello shift register

            //TestAllDigitalInputs(pinTuttiIn);
            //return;

            while (true)
            {
                Console.CursorTop = 0;
                Console.Clear();

                ReadAllAdc();

                // test two digital inputs
                Console.WriteLine("Canale bottone 1: {0}, Canale bottone 2: {1} ",
                                  chanButton1, chanButton2);
                Console.WriteLine("Bottone 1: {0}, Bottone 2: {1} ",
                                  pinIn1.Read().ToString(), pinIn2.Read().ToString());
                // test two digital outputs
                Console.WriteLine("\r\nCanale LED 1: {0}, Canale LED 2: {1} ",
                                  chanLed1, chanLed2);
                pinOut1.Write(pinIn1.Read());
                pinOut2.Write(pinIn2.Read());

                ActuateShiftRegister();

                Thread.Sleep(500);
            }
        }
        private void Timer_Tick(object sender, object e)
        {
            if (_pinValue == GpioPinValue.High)
            {
                _pinValue = GpioPinValue.Low;
            }
            else
            {
                _pinValue = GpioPinValue.High;
            }
            _pin.Write(_pinValue);

            //textLux.Text = lux.Read().ToString("F0");
            //textGradi.Text = temp.Read().ToString("F1");
            //textRH.Text = rh.Read().ToString("F0");
            //textPPM.Text = co2.Read().ToString("F0");
            //textUT.Text = moisture.Read().ToString("F0");
            //textVoltmetro.Text = adc.ReadVolt(5).ToString("F1");
        }