Fehler in Code - PCA9685 PWM driver

Hallo liebes Arduino-Forum,

ich würde gern mit einem Poti, angeschlossen an Pin 6 des CD4051B und an den analogen Eingang A0 des Arduinos und an die digitalen Pins 2-4 zum Auswählen des durchzuschaltenden Eingangs, einen Servo, angeschlossen an das Servo-Board Anschluss 0, ansteuern. Den Potiwert kann ich mir über den Multiplexer anzeigen lassen. Der Servo angeschlossen an das Board funktioniert auch. Er soll sich im Bereich von 40° bis 60° drehen. Allerdings bewegt sich der Servo eher selten und zufällig. Vielleicht findet jemand den Fehler im Code. Ich habe ihn von folgender Seite adaptiert: Arduino code and Video for PCA9685 16 channel 12 bits servo controller V1 - Robojax

Hier mein Code:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN 125 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 575 // this is the 'maximum' pulse length count (out of 4096)

int potiWert = 0;

void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
Serial.println("Potiwert wird ausgegeben!");
pwm.begin();
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
}

void loop ()
{
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 1);

potiWert = analogRead(A0);
Serial.println(potiWert);

pwm.setPWM(0, 0, map(potiWert, 40, 60, SERVOMIN,SERVOMAX));

}

Vielen Dank für Eure Hilfe!

Laß Dir mal den von der Funktion map() errechenten Wert über serial ausgeben.

Grüße Uwe

1 Like

Danke für deine schnelle Antwort. Ja, die Werte sind sehr abenteuerlich. Ich habe die Übergabewerte der map-Funktion angepasst zu: pwm.setPWM(0, 0, map(potiWert, 0, 1023, 40, 60));
Der gebildete Stellbereich stimmt jetzt. Allerdings bewegt sich der Servo nun gar nicht mehr. Benötige ich für die pwm.setPWM Funktion noch die SERVOMIN und SERVOMAX Werte? Leider hilft mir die Beschreibung auf der Webseite und die Erläuterungen zu der Bibliothek auf der Adafruit-Website nicht weiter.

Grüße Tom