PCA9685 Manager C#

using System;

using System.Device.I2c;


public class PCA9685Manager

{

    // Адрес устройства PCA9685 по умолчанию

    private const byte PCA9685_ADDRESS = 0x40;


    // Регистры для управления PCA9685

    private const byte MODE1 = 0x00;

    private const byte LED0_ON_L = 0x06;


    // Устройство I2C для общения с PCA9685

    private I2cDevice _device;


    /// <summary>

    /// Конструктор, инициализирующий I2C соединение с PCA9685.

    /// </summary>

    public PCA9685Manager()

    {

        // Настройка I2C соединения

        var settings = new I2cConnectionSettings(1, PCA9685_ADDRESS);

        _device = I2cDevice.Create(settings);


        // Инициализация PCA9685

        _device.Write(new byte[] { MODE1, 0x00 });

    }


    /// <summary>

    /// Устанавливает ширину импульса PWM для указанного канала.

    /// </summary>

    /// <param name="channel">Канал (от 0 до 15).</param>

    /// <param name="on">Время начала импульса.</param>

    /// <param name="off">Время окончания импульса.</param>

    public void SetPwm(int channel, int on, int off)

    {

        _device.Write(new byte[] { (byte)(LED0_ON_L + 4 * channel), (byte)(on & 0xFF), (byte)(on >> 8), (byte)(off & 0xFF), (byte)(off >> 8) });

    }


    /// <summary>

    /// Устанавливает длительность импульса для сервопривода на указанном канале.

    /// </summary>

    /// <param name="channel">Канал (от 0 до 15).</param>

    /// <param name="pulse">Длительность импульса в микросекундах (обычно от 1000 до 2000).</param>

    public void SetServoPulse(int channel, int pulse)

    {

        int value = pulse * 4096 / 20000; // Преобразование длительности импульса в значение для PCA9685

        SetPwm(channel, 0, value);

    }

}


class Program

{

    static void Main()

    {

        PCA9685Manager pca9685Manager = new PCA9685Manager();


        while (true)

        {

            pca9685Manager.SetServoPulse(0, 1000); // 0 градусов

            System.Threading.Thread.Sleep(1000);

            pca9685Manager.SetServoPulse(0, 2000); // 180 градусов

            System.Threading.Thread.Sleep(1000);

        }

    }

}


Comments

Popular posts from this blog

PCA9685 подключение к Orange Pi 5

управление используя 2 Axis Analog and Button Joystick Module Orange Pi 5