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 static void datalog()
        {
            while (true)
            {
                fileLog = new FileLogger("file.log");

                // Crea ed utilizza un ADC. Il codice del ADC utilizzerà un gestore del bus SPI
                adc = new DigitalConverterMCP3208();

                lux      = new LightSensor(adc, 0, 3.3);
                temp     = new TemperatureSensor(adc, 1, 3.3);
                moisture = new SoilMoistureSensor(adc, 2, 3.3);
                co2      = new CO2Sensor(adc, 3, 4.9);
                rh       = new RelativeHumiditySensor(adc, 4, 5.0);

                shift = new OutShiftRegister(16, 25, 24, 23);

                lcd = new LCD1602Shift(shift, 12, 11, 10, 9, 13, 14);

                irrigator = new Device_OnOffShift(shift, 8);
                ////////irrigator.WriteLog += WriteFileLog;
                humidifier = new Device_OnOffShift(shift, 2);
                ////////humidifier.WriteLog += WriteFileLog;

                lightDevice = new LightDevice(shift, 3, 4, 5, 6, 7, 21, 20);

                lightDevice.PercentualeApertura(50);
                //irrigator.TimeOn(3000);

                //_timer = new DispatcherTimer();
                //_timer.Interval = TimeSpan.FromMilliseconds(1000);
                //_timer.Tick += Timer_Tick;
                //if (_pin != null)
                //{
                //    _timer.Start();
                //}
            }
        }