Nano PCA9685 servos commandés par des inters

Bonjour, j'utilise un nano et une carte PCA9685 pour commander des aiguillages "en mode lent". Je commande 6 aiguillages via des inters sur les broches PD2 à PD7 et cela fonctionne comme je le veux.

Par contre j'ai besoin (pour une autre partie de mon réseau) de passer à 7 aiguillages et je n'y arrive pas... La carte PCA9685 est censée commander 16 servos, j'ai cherché un peu partout je dois être le seul original à vouloir commander mes aiguillages à l'ancienne... Je vous joins le code que j'ai adapté à mon utilisation (avec ma dernière tentative via PB0) qui c'est soldé par un nouvel échec...
Si c'est possible merci d'éclairer ma lanterne....

> // Version 2a 04/01/2022 7 servos
> #include <Wire.h>                     // librairie I2C
> #include <Adafruit_PWMServoDriver.h>  // librairie interface 16 servo-moteurs
> 
> //Objet servo PWM
> Adafruit_PWMServoDriver Pca = Adafruit_PWMServoDriver(0x40);
> 
> word OUV_015 = 0;
> word FER_015 = 0;
> 
> //Constantes
> 
> #define nbPCAServo 7 //Nombre de valeur tableau
> 
> //Parametres position min & max par servo
> int MIN_IMP [] ={500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500};    //Valeur minimum des servo 0°
> int MAX_IMP [] ={2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500};//Valeur maximum des servo 180°
> int Posi[]= {500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500};        //Objectif de position au depart à 0°
> boolean BP [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};            //Image de l'entrée indexée
> boolean OUV[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};           //Ordre d'ouverture du servo indexé
> boolean FER[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};           //Ordre de fermeture du servo indexé
> int Pas[] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};                //Pas d'incrementation (vitesse du mvt des servo)3, 5, 7, 9, 11, 1, 3, 6, 9, 11
> int i;                                             //index du programme
>                                   
> 
> void setup()
> {
> //Serial.begin(9600);
>   // Init PCA carte extension servo
>   Pca.begin();
>   Pca.setPWMFreq(50);  // servos à ~50 Hz 
>   Pca.setPWM(7,0,0);//(adresse, val depart, val fin)
>   // Init des entrées
>   pinMode(PD2,INPUT_PULLUP);   //Borne D2 du nano
>   pinMode(PD3,INPUT_PULLUP);   //Borne D3 du nano
>   pinMode(PD4,INPUT_PULLUP);   //Borne D4 du nano
>   pinMode(PD5,INPUT_PULLUP);   //Borne D5 du nano
>   pinMode(PD6,INPUT_PULLUP);   //Borne D6 du nano
>   pinMode(PD7,INPUT_PULLUP);   //Borne D7 du nano
>   pinMode(PB0,INPUT_PULLUP);   //Borne D9 du nano
>      
> }//Fin de setup
>  
> void loop()
> {
> BP[0] = digitalRead(PD2);
> BP[1] = digitalRead(PD3);
> BP[2] = digitalRead(PD4);
> BP[3] = digitalRead(PD5);
> BP[4] = digitalRead(PD6);
> BP[5] = digitalRead(PD7);
> BP[6] = digitalRead(PB0);
> 
> //Gestion indéxée des servo
>   
>  for (int i=0; i<nbPCAServo; i++) 
>  { 
> // Bit OUV ordre d'ouverture du servo
>    if (BP[i] == HIGH && Posi[i] == MIN_IMP[i]){OUV[i] = HIGH;}
>    if (Posi[i] >= MAX_IMP[i])
>    {
>    OUV[i] = LOW;
>    Posi[i] = MAX_IMP[i];
>    bitWrite(OUV_015,i,1);//signalisation ouvert sur servo
>    } 
>    else
>    { bitWrite(OUV_015,i,0);}
> 
> // Bit FER ordre de fermeture du servo
>    if (BP[i] == LOW && Posi[i] == MAX_IMP[i]){FER[i] = HIGH;}
>    if (Posi[i] <= MIN_IMP[i])
>    {
>    FER[i] = LOW;
>    Posi[i] = MIN_IMP[i];
>    bitWrite(FER_015,i,1);//signalisation fermé sur servo
>    }
>    else 
>    {bitWrite(FER_015,i,0);}
> 
> // MVT ouverture
>    if (OUV[i] == HIGH && FER[i] ==LOW) {Posi[i] = Posi[i] + Pas[i] ;}
> 
> // MVT fermeture
>    if (FER[i] == HIGH && OUV[i] ==LOW) {Posi[i] = Posi[i] - Pas[i] ;}
>    
> 
> // Reglage de la position du servo indéxé
> 
> Pca.writeMicroseconds(i,Posi[i]);}
> 
> //Serial.print(OUV_015,BIN);
> //Serial.print("      ");
> //Serial.println(FER_015,BIN);  
> } //Fin de LOOP

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.