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}"); }
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(); }