コード例 #1
0
        private static void TestI2c()
        {
            var ftI2c = new Ft4222I2c(new I2cConnectionSettings(0, Bno055Sensor.DefaultI2cAddress));

            var bno055Sensor = new Bno055Sensor(ftI2c);

            Console.WriteLine($"Id: {bno055Sensor.Info.ChipId}, AccId: {bno055Sensor.Info.AcceleratorId}, GyroId: {bno055Sensor.Info.GyroscopeId}, MagId: {bno055Sensor.Info.MagnetometerId}");
            Console.WriteLine($"Firmware version: {bno055Sensor.Info.FirmwareVersion}, Bootloader: {bno055Sensor.Info.BootloaderVersion}");
            Console.WriteLine($"Temperature source: {bno055Sensor.TemperatureSource}, Operation mode: {bno055Sensor.OperationMode}, Units: {bno055Sensor.Units}");
            Console.WriteLine($"Powermode: {bno055Sensor.PowerMode}");
        }
コード例 #2
0
        private static void Main(string[] args)
        {
            Ccs811Sensor ccs811;

            Console.WriteLine("Hello CCS811!");
            // Simple menu to select native I2C/GPIO or thru FT4222, with GPIO pins and specific features to test
            Console.WriteLine("Select which platform I2C/GPIO you want to use:");
            Console.WriteLine(" 1. Native I2C/GPIO");
            Console.WriteLine(" 2. FT4222");
            var platformChoice = Console.ReadKey();

            Console.WriteLine();
            Console.WriteLine("Which I2C address do you want to use? Use the first one if Address pin is to ground, use the second one if to VCC.");
            Console.WriteLine($" 1. First 0x{Ccs811Sensor.I2cFirstAddress:X2}");
            Console.WriteLine($" 2. Second 0x{Ccs811Sensor.I2cSecondAddress:X2}");
            var addressChoice = Console.ReadKey();

            Console.WriteLine();
            Console.WriteLine("Do you want to the interrupt pin and events?");
            Console.WriteLine("(Y)es,(N)o");
            var pinChoice = Console.ReadKey();

            Console.WriteLine();
            int pinInterrupt = CheckAndAskPinNumber(pinChoice.KeyChar);

            Console.WriteLine($"Do you want to use the Wake pin?");
            Console.WriteLine("(Y)es,(N)o");
            pinChoice = Console.ReadKey();
            Console.WriteLine();
            int pinWake = CheckAndAskPinNumber(pinChoice.KeyChar);

            Console.WriteLine($"Do you want to use the Reset pin?");
            Console.WriteLine("(Y)es,(N)o");
            pinChoice = Console.ReadKey();
            Console.WriteLine();
            int pinReset = CheckAndAskPinNumber(pinChoice.KeyChar);

            if (platformChoice.KeyChar == '1')
            {
                Console.WriteLine("Creating an instance of a CCS811 using the platform drivers.");
                ccs811 = new Ccs811Sensor(I2cDevice.Create(new I2cConnectionSettings(3, addressChoice.KeyChar == '1' ? Ccs811Sensor.I2cFirstAddress : Ccs811Sensor.I2cSecondAddress)), pinWake: pinWake, pinInterruption: pinInterrupt, pinReset: pinReset);
            }
            else if (platformChoice.KeyChar == '2')
            {
                Console.WriteLine("Creating an instance of a CCS811 using FT4222 drivers.");
                var ftdiI2C        = new Ft4222I2c(new I2cConnectionSettings(0, addressChoice.KeyChar == '1' ? Ccs811Sensor.I2cFirstAddress : Ccs811Sensor.I2cSecondAddress));
                var gpioController = new GpioController(PinNumberingScheme.Board, new Ft4222Gpio());
                ccs811 = new Ccs811Sensor(ftdiI2C, gpioController, pinWake, pinInterrupt, pinReset, false);
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Error: Invalid platform choice.");
                Console.ResetColor();
                return;
            }

            Console.WriteLine("Choose your operation mode:");
            int           i             = 0;
            OperationMode operationMode = OperationMode.ConstantPower1Second;

            foreach (var mode in Enum.GetValues(typeof(OperationMode)))
            {
                Console.WriteLine($" {i++}. {mode}");
            }

            var modeChoice = Console.ReadKey();

            try
            {
                // Converting the char to decimal, removing '0' = 0x30
                int selectedMode = Convert.ToInt32(modeChoice.KeyChar) - 0x30;
                if ((selectedMode >= 0) && (selectedMode <= 4))
                {
                    operationMode = (OperationMode)Convert.ToInt32(selectedMode);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Error selecting mode, default {operationMode} will be selected");
                }
            }
            catch (StackOverflowException)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"Error selecting mode, default {operationMode} will be selected");
            }

            Console.ResetColor();
            DisplayBasicInformatio(ccs811);
            Console.WriteLine($"Current operating mode: {ccs811.OperationMode}, changing for {operationMode}");
            ccs811.OperationMode = operationMode;
            Console.WriteLine($"Current operating mode: {ccs811.OperationMode}");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine($"Warning: the sensor needs to run for 48h in operation mode {OperationMode.ConstantPower1Second} before getting accurate results. " +
                              $"Also, every time you'll start the sensor, it will need approximately 20 minutes to get accurate results as well");
            Console.ResetColor();

            if (pinInterrupt >= 0)
            {
                Console.WriteLine("Interruption mode selected.");
                Console.WriteLine("Do you want to enable Threshold interruption?");
                Console.WriteLine("(Y)es,(N)o");
                var threshChoice = Console.ReadKey();
                Console.WriteLine();
                if ((threshChoice.KeyChar == 'Y') || (threshChoice.KeyChar == 'y'))
                {
                    TestThresholdAndInterrupt(ccs811);
                }
                else
                {
                    Console.Write(", once a measurement will be available, it will be displayed. Press any key to exit the program.");
                    ccs811.MeasurementReady += Ccs811MeasurementReady;
                    while (!Console.KeyAvailable)
                    {
                        Thread.Sleep(10);
                    }
                }
            }
            else
            {
                Console.WriteLine("What to you want to test?");
                Console.WriteLine(" 1. Read and display gas information for 10 times.");
                Console.WriteLine(" 2. Read and display gas information for 1000 times.");
                Console.WriteLine(" 3. Read and display detailed gas information for 10 times.");
                Console.WriteLine(" 4. Read and display detailed gas information for 1000 times.");
                Console.WriteLine(" 5. Read, load and change back the baseline.");
                Console.WriteLine(" 6. Test temperature and humidity changes.");
                Console.WriteLine(" 7. Read and log gas information 10000 times.");
                var operationChoice = Console.ReadKey();
                Console.WriteLine();
                switch (operationChoice.KeyChar)
                {
                case '1':
                    ReadAnDisplay(ccs811);
                    break;

                case '2':
                    ReadAnDisplay(ccs811, 1000);
                    break;

                case '3':
                    ReadAndDisplayDetails(ccs811);
                    break;

                case '4':
                    ReadAndDisplayDetails(ccs811, 1000);
                    break;

                case '5':
                    TestBaseline(ccs811);
                    break;

                case '6':
                    TestTemperatureHumidityAdjustment(ccs811);
                    break;

                case '7':
                    Console.WriteLine("Result file will be log.csv. The file is flushed on the disk every 100 results.");
                    ReadAndLog(ccs811, 10000);
                    break;

                default:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Error: Sorry, didn't get your choice, program will now exit.");
                    Console.ResetColor();
                    break;
                }
            }

            Console.WriteLine($"Current operating mode: {ccs811.OperationMode}, changing for {OperationMode.Idle}");
            ccs811.OperationMode = OperationMode.Idle;
            Console.WriteLine($"Current operating mode: {ccs811.OperationMode}");
            // Dispose the CCS811 sensor
            ccs811.Dispose();
        }