Подскажите, как заставить работать Arduino Due и контролером PCA9685. Использую вот эту библиотеку https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library Сам контроллер точно рабочий, с Мегой всё работает. А вот на Due проблема Покопался на иностранных форумах, наткнулся вот на эту тему https://forum.arduino.cc/index.php?topic=345971.0 Но там проблема так и не решена. Также есть такой симптом: если использовать вот этот скетч http://playground.arduino.cc/Main/I2cScanner то на пинах SCL1/SDA1 не определяется устройство но если подключить к пинам SDA/SCL находится 2 устройства с адресами 0x40 and 0x70
@Hamulus, в Adafruit-PWM-Servo-Driver-Library в заголовочном файле есть строки Код (C++): #if defined(ARDUINO_SAM_DUE) #define WIRE Wire1 #else #define WIRE Wire #endif т.е. библиотека ожидает, что устройство подключено к SCL1/SDA1 Если в I2cScanner тоже добавить такое определение, то на Due контроллер PCA9685найдется на SCL1/SDA1
спасибо, с использованием Wire1 сканер устройство находит однако проблему неработоспособности это не решает
В итоге все работает если OE вообще ни к чему не подключен (хотя в даташите написано, что его надо подключать к плюсу, а в инструкции для других ардуин - что к минусу ) , а SDA и SCL подтянуты к плюсу питания резисторами 4,7К. Изменения библиотеки не потребовалось.
Здравствуйте, научите пожалуйста пользоваться вот этим шилдом. Подключил пять сервоприводов, 0-4 Код (C++): #include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40); void setup() { Serial.begin(9600); pwm1.begin(); pwm1.setPWMFreq(1600); // This is the maximum PWM frequency } void loop() { Как мне, к примеру, повернуть сервопривод 0 на 60 градусов. }
Код (C++): #include <iarduino_MultiServo.h> // Подключаем библиотеку iarduino_MultiServo MSS; // Объявляем переменную MSS, для работы с библиотекой (объект класса iarduino_MultiServo). void setup() { // MSS.servoSet(10,180,130,470); // Ручное позиционирование сервопривода (Подключён к выводу 10. Максимальный угол поворота 180°. ШИМ для 0° = 130. ШИМ для 180° = 470) // MSS.servoSet(11,180,140,480); // Ручное позиционирование сервопривода (Подключён к выводу 11. Максимальный угол поворота 180°. ШИМ для 0° = 140. ШИМ для 180° = 480) MSS.servoSet(15, SERVO_SG90); // Авто позиционирование сервопривода (Подключён к выводу 15. Название сервопривода) // Функция servoSet() вызывается для каждого сервопривода. // Если ко всем выводам подключены одинаковые сервоприводы, то допускается вызвать функцию servoSet() один раз, указав вместо номера вывода: SERVO_ALL // - Пример_1: MSS.servoSet(SERVO_ALL, SERVO_SG90); // Ко всем выводам подключены сервоприводы SG90 // - Пример_2: MSS.servoSet(SERVO_ALL,180,140,480); // Ко всем выводам подключены одинаковые сервоприводы, параметры которых заданы вручную MSS.begin(); // Инициализация модуля (Адрес по умолчанию = 0x40. Частота по умолчанию = 50Гц) } void loop(){ MSS.servoWrite(15,0); // Повернуть сервопривод, подключённый к 15 выводу, на 0° delay(3000); // Ждём 3 сек. MSS.servoWrite(15,180); // Повернуть сервопривод, подключённый к 15 выводу, на 180° delay(3000); // Ждём 3 сек. } Или вот так, ужасно шумит и дёргается
А может кто подсказать как аккумулятором запитать это дело? Но вот решил я собрать сервобота например,какой аккумулятор лучше использовать? и сервоприводы потребляют достаточно много тока,может какой то DC-DC преобразователь нужен который может выдавать 2А стабильно или что то в этом роде (плохо разбираюсь в теме питания,помогите)