예제 #1
0
        public static void Main(string[] args)
        {
            var pinCS0 = GpioPin.FromNumber(25); // Pin 22 (BCM 25)
            var pinCS1 = GpioPin.FromNumber(26); // Pin 37 (BCM 26)
            var pinRST = GpioPin.FromNumber(16); // Pin 36 (BCM 16)

            var spiSettings = new SpiConnectionSettings(busId: 0, chipSelectLine: 0);
            var gpioPinMap  = new Dictionary <TargetChip, ChipPinConfig>
            {
                [TargetChip.Board0] = new ChipPinConfig(csPin: pinCS0, resetPin: pinRST),
                [TargetChip.Board1] = new ChipPinConfig(csPin: pinCS1, resetPin: pinRST),
            };

            using (var spiDevice = new UnixSpiDevice(spiSettings))
                using (var gpioController = new GpioController(PinNumberingScheme.Logical))
                    using (var ymf825Device = new NativeSpi(spiDevice, gpioController, gpioPinMap))
                    {
                        var driver = new Ymf825Driver(ymf825Device);
                        driver.EnableSectionMode();

                        Console.WriteLine("Software Reset");
                        driver.ResetSoftware();

                        SetupTones(driver);

                        var index = 0;
                        var score = new[]
                        {
                            60, 62, 64, 65, 67, 69, 71, 72,
                            72, 74, 76, 77, 79, 81, 83, 84,
                            84, 83, 81, 79, 77, 76, 74, 72,
                            72, 71, 69, 67, 65, 64, 62, 60
                        };

                        while (true)
                        {
                            const int noteOnTime = 250;
                            const int sleepTime  = 0;

                            NoteOn(driver, score[index]);
                            Thread.Sleep(noteOnTime);
                            NoteOff(driver);

                            Thread.Sleep(sleepTime);

                            if (Console.KeyAvailable)
                            {
                                break;
                            }

                            index++;
                            if (index >= score.Length)
                            {
                                index = 0;
                            }
                        }

                        driver.ResetHardware();
                    }
        }