Pca9685 Problem

Mehrere Versuche kein Servo bewegt sich Hilfe!

//Bibliotheken 
#include  < Wire . h > // https://www.arduino.cc/en/reference/wire
 #include  < Adafruit_PWMServoDriver . h > // https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library

//Konstanten 
#define  nbPCAServo  16

//Parameter 
int  MIN_IMP  [ nbPCAServo ]  = { 500 ,  500 ,  500 ,  500 ,  500 ,  500 , 500 ,  500 , 500 , 500 , 500 , 500 , 500 , 500 , 500 , 500 } ; int MAX_IMP [ nbPCAServo ] = { 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 , 2500 } ; int MIN_ANG [ nbPCAServo ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; int MAX_ANG [ nbPCAServo ] = { 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 , 180 } ;         
                  
                  
                  

//Objekte 
Adafruit_PWMServoDriver  pca =  Adafruit_PWMServoDriver ( 0x40 ) ;

void  setup ( ) { 
//Init Serial USB 
Serial . begin ( 9600 ) ; 
Seriell . println ( F ( „System initialisieren“ ) ) ; 
pca . beginnen ( ) ; 
pca . setPWMFreq ( 60 ) ;   // Analoge Servos laufen mit ~60 Hz-Updates 
}

void  loop ( ) { 
  pcaScenario ( ) ; 
}

void  pcaScenario ( ) { /* function pcaScenario */  
////Szenario zum Testen von Servomotoren, die vom PCA9685 I2C-Modul gesteuert werden 
für  ( int  i = 0 ;  i < nbPCAServo ;  i ++ )  { 
  Serial . print ( "Servo" ) ; 
  Seriell . println ( i ) ; 
      //int middleVal=((MAX_IMP[i]+MIN_IMP[i])/2)/20000*4096; // Konvertierung von µs in pwmval 
      //pca.setPWM(i,0,middleVal); 
      for ( int  pos = ( MAX_IMP [ i ] + MIN_IMP [ i ] ) / 2 ; pos < MAX_IMP [ i ] ; pos += 10 ) { 
        pca . writeMicroseconds ( i , pos ) ; Verzögerung ( 10 ) ; 
      } 
      for ( int  pos = MAX_IMP [ i ] ; pos > MIN_IMP [ i ] ; pos -= 10 ) { 
        pca . writeMicroseconds ( i , pos ) ; Verzögerung ( 10 ) ; 
      } 
      for ( int  pos = MIN_IMP [ i ] ; pos < ( MAX_IMP [ i ] + MIN_IMP [ i ] ) / 2 ; pos += 10 ) { 
        pca . writeMicroseconds ( i , pos ) ; Verzögerung ( 10 ) ; 
      } 
      pca . setPin ( i , 0 , true ) ;  // Pin i deaktivieren 
    } 
}

int  jointToImp ( double  x , int  i ) { /* function jointToImp */  
////Konvertieren Sie den Gelenkwinkel in einen pwm-Befehlswert
     
      int  imp = ( x  -  MIN_ANG [ i ] )  *  ( MAX_IMP [ i ] - MIN_IMP [ i ] )  /  ( MAX_ANG [ i ] - MIN_ANG [ i ] )  +  MIN_IMP [ i ] ; 
      imp = max ( imp , MIN_IMP [ i ] ) ; 
      imp = min ( imp , MAX_IMP [ i ] ) ;
      
 return  imp ; 
}`

Use code tags to format code for the forum`

strong text

*Use code tags to format code for the forum

Setze Deinen Sketch bitte in Codetags. Wie das geht, steht hier.
Außerdem formatiere den Code bitte ordentlich. Strg+T in der IDE hilft Dir dabei.
Das kannst Du auch noch nachträglich ändern.

Du musst auch die Versorgung für die Motoren an den Schraubklemmen anschließen.

Gruß Tommy

Hab ein 5 V Netzteil dran geklemmt , einen Servo direkt am Arduino funktioniert.

Wieviele Servos?

Wo und welches Netzteil?
Grüße Uwe

Eingezeichnet ist 1 - im Code sind es 16.
Allerdings ist der Code da oben nicht nutzbar und die Bitte das zu ändern wurde ignoriert. :man_shrugging:

Ja, aber da ist auch kein Netzteil eingezeichnet, was laut Text verwendet wurde.
Darum sind für mich alle bisherigen Angaben unsicher und zu bezweifeln.
Grüße Uwe

Jupp. Genau das...

Dann werden wir halt den TO ignorieren, bis er/sie/es das ändert.
Etwas mehr Text würde auch zum Verständnis beitragen.

Gruß Tommy

aktuelle ein Servo als Netzteil ein Zolt was auf 5Veingestellt ist der code wurde geändert.

Das wird nix!

In der IDE einmal STRG-T
Dann BEARBEITEN - FÜR FORUM KOPIEREN
Dann in den Post gehen, den gesamten Code markieren udn STRG-V

Ok werd ich morgen früh sofort machen versprochen :crossed_fingers:

Welche Max Leistung bzw Strom?

Laut Hersteller Zolt 36W Universal Netzteil AC zu DC 3V 4.5V 5V 6V 7.5V 9V 12V 1A 2A 3A 3000mA Max.

Am Board sollen am Ende 4 SG 90 Mini Servos laufen.

Du hast Arbeit....
Sach mal, hast Du den Code mit irgendsoeinem quatschübersetzer bearbeitet?

Das erklärt den vermurksten Code evtl.
Wenn Du den richtigen richtig einfügst, dann gibts auch keinen Kauderwelsch.

Wenn ich das richtig sehe ist das so laut Code🤔

#include <Wire.h>//https://www.arduino.cc/en/reference/wire
#include <Adafruit_PWMServoDriver.h>//https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library

//Constants
#define nbPCAServo 16

//Parameters
int MIN_IMP [nbPCAServo] ={500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500};
int MAX_IMP [nbPCAServo] ={2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500};
int MIN_ANG [nbPCAServo] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int MAX_ANG [nbPCAServo] ={180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180};

//Objects
Adafruit_PWMServoDriver pca= Adafruit_PWMServoDriver(0x40);

void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
pca.begin();
pca.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

void loop(){
  pcaScenario();
}

void pcaScenario(){/* function pcaScenario */ 
////Scenario to test servomotors controlled by PCA9685 I2C Module
for (int i=0; i<nbPCAServo; i++) {
  Serial.print("Servo");
  Serial.println(i);
      //int middleVal=((MAX_IMP[i]+MIN_IMP[i])/2)/20000*4096; // conversion µs to pwmval
      //pca.setPWM(i,0,middleVal);
      for(int pos=(MAX_IMP[i]+MIN_IMP[i])/2;pos<MAX_IMP[i];pos+=10){
        pca.writeMicroseconds(i,pos);delay(10);
      }
      for(int pos=MAX_IMP[i];pos>MIN_IMP[i];pos-=10){
        pca.writeMicroseconds(i,pos);delay(10);
      }
      for(int pos=MIN_IMP[i];pos<(MAX_IMP[i]+MIN_IMP[i])/2;pos+=10){
        pca.writeMicroseconds(i,pos);delay(10);
      }
      pca.setPin(i,0,true); // deactivate pin i
    }
}

int jointToImp(double x,int i){/* function jointToImp */ 
////Convert joint angle into pwm command value
     
      int imp=(x - MIN_ANG[i]) * (MAX_IMP[i]-MIN_IMP[i]) / (MAX_ANG[i]-MIN_ANG[i]) + MIN_IMP[i];
      imp=max(imp,MIN_IMP[i]);
      imp=min(imp,MAX_IMP[i]);
      
 return imp;
}

Sry das der Code wieder nicht richtig eingefügt ist :face_with_peeking_eye: schreibe via Handy.

Alles gut - der passt schon.
Und ist nicht übersetzt,,, :wink:

Danke für das Verständnis :blush:

Hier: LCD-Display zeigt nichts an, I2C - #12 by my_xy_projekt verbirgt sich ein I2C-Scanner.
Den Code einmal auf den UNO spielen und dann müsste Dir die Adresse des PCA ausgegeben werden.
Wenn die dann mit Deinem Code übereinstimmt, mach bitte ein Foto von dem Aufbau.
Bitte so, das man jedes Kaeblechen erkennt.