//********LES LIBRAIRIES****************************
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <string.h>
#include "IRremote.h"
//*********ADRESSAGE DES DRIVERS PWM**************************************
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);
//*********Suivant le type de servo utilisé, ********************
//*************la largeur d'impulsion minimale pour 0° **********
//**********et largeur d'implusion Maximale pour 180° ***********
//#define PULSEMIN 150 // Variable longueur d'impulsion minimale, remplacé par tableau pour chaque servo
#define ANGLEMIN 0 //Variable angle min
//#define PULSEMAX 530 // Variable longueur d'impulsion maximale, remplacé par tableau pour chaque servo
#define ANGLEMAX 180 // Variale angle Mas
//**************Déclaration du TABLEAU INISERVO, positions de chaque servo à l'initialisation **************************
// de 0 à 5 pour la jambe droite et de 6 à 11 pour la jambe gauche
byte iniservo [12]= {90,90,90,180,90,90,90,90,90,0,90,90};
// ***************** Déclaration du Tableaux pulsemin [a][1] et pulsemax [a][2]******************************
double PULSE[12][2]= {
{140,530},//servo 0 : PD
{140,510},//servo 1 : HD
{145,545},//servo 2 : JD
{155,575},//servo 3 : GD
{150,535},//servo 4 : CD
{145,535},//servo 5 : MD
{135,510},//servo 6 : PG
{145,520},//servo 7 : HG
{130,510},//servo 8 : JG
{145,520},//servo 9 : GG
{145,540},//servo 10 : CG
{145,550},//servo 11 : MG
};//Fin du tableau
//***************************************************
//*****************SETUP*****************************
//***************************************************
void setup()
{
//**************Config de la communication série **************
Serial.begin(115200);// !!!! FAIRE TEST AVEC valeur 9600 !!!!!!
//*******Configuration de la communication avec driver PWM ****************
pwm.begin();
pwm.setPWMFreq(60); // Les servo sont mis-à-jour à ~60 Hz
//************Start Récepteur IR ******************************************
irrecv.enableIRIn(); // Start the receiver ///FAIRE TEST SANS.....dernier ajout !!!
//************INITIALISE LE TABLEAU DE TRAVAIL : phaseangle***************************************
memcpy(phaseangle, MATRICE, sizeof(MATRICE));
delay(500);//POUR TEST
//********PLACER TOUS LES SERVO EN POSITION INITIALE : jambes tendues**********************
initialisation();
delay(3000); //POUR TEST
Serial.println("Fin de setup()");//POUR TEST
}
void initialisation()
{
Serial.println("DEBUT initialisation");//POUR TEST
for (a=0; a <= 11; a++) //Les 12 servo passe sur la consigne, servo de broche a=0 to 11
{
pulseLen = map(iniservo[a], ANGLEMIN, ANGLEMAX, PULSE[a][0], PULSE[a][1]);
if (pulseLen < PULSE[a][0]) {pulseLen=PULSE[a][0];} // pour éviter valeur inférieure à pulsemin, possible de contraindre fct°map
if (pulseLen > PULSE[a][1]) {pulseLen=PULSE[a][1];} // pour éviter valeur supérieure à pulsemax, possible de contraindre fct° map
pwm.setPWM(a, 0, pulseLen);//le servo broche a, se place à la position demandée
oldservo [a]=iniservo[a];//la position actuel est sauvegardé, permettra une incrémentation de X degré à partir de cette position, voir avec fonctionnalité ultérieure
delay(1000);//Pour les tests un délais de 1 seconde est mis en place entre chaque mouvement de servo
}
Serial.println("FIN initialisation");//POUR TEST
}//Fin fonction initialisation
void loop(){
//**************Est ce que nous recevons un signal IR *****************
if (irrecv.decode(&results))
{
translateIR();
irrecv.resume(); // receive the next value
}
//ICI en fonction de WID et WWID je sélectionne ce que je dois faire
//POUR TEST
/*if (toto==1)
{
phase(0, 0);
}
toto=0;*/
}//FIN DU LOOP *******************************************************