#include "pca9685.h" #include #include "extern-plugininfo.h" #include #include Pca9685::Pca9685(const QString &portName, int address, QObject *parent) : I2CDevice(portName, address, parent) { } bool Pca9685::writeData(int fd, const QByteArray &command) { if (command == "init") { writeByte8(fd, MODE2, OUTDRV); writeByte8(fd, MODE1, ALLCALL); QThread::msleep(5); quint8 mode1 = readByte8(fd, MODE1); mode1 = mode1 & ~SLEEP; writeByte8(fd, MODE1, mode1); QThread::msleep(5); qCInfo(dcI2cDevices())<<"PCA9685 Initialization: SUCCESS"; return true; } if (command.startsWith("PWM")) { QList parts = command.split(':'); quint8 channel = parts.at(1).toUInt(); quint16 on = parts.at(2).toUInt(); quint16 off = parts.at(3).toUInt(); writeByte8(fd, LED0_ON_L+4*channel, on & 0xFF); writeByte8(fd, LED0_ON_H+4*channel, on >> 8); writeByte8(fd, LED0_OFF_L+4*channel, off & 0xFF); writeByte8(fd, LED0_OFF_H+4*channel, off >> 8); return true; } if (command.startsWith("FREQ")) { QList parts = command.split(':'); quint16 frequency = parts.at(1).toUInt(); float prescaleval = 25000000.0; //25MHz prescaleval /= 4096.0; //12-bit prescaleval /= float(frequency); prescaleval -= 1.0; qInfo()<<"Setting PWM frequency to "<