Recevoir une donnée

Dependencies:   mbed

main.cpp

Committer:
MoussOudj
Date:
2018-06-14
Revision:
0:f82efb692e3b

File content as of revision 0:f82efb692e3b:

#include "mbed.h"
#include "PCA9685.h"


Serial xbee(PA_9, PA_10);
DigitalOut myled(LED1);
Serial pc(USBTX,USBRX);
I2C i2c_PCA(PB_9, PB_8); // Utilisation et déclaration d'un port I2C pour communiquer avec la carte PWM Adafruit
PCA9685 PCA_SERVO(ADDR, i2c_PCA, 50); 

uint8_t text_xbee[21];
uint8_t idx_carac_xbee_in = 0;
uint8_t send_measure = 0;


/*
void irq_xbee(void){ // Fonction d'interruption qui agit dès qu'une mesure est arrivée
    text_xbee[idx_carac_xbee_in] = xbee.getc();
    send_measure = 1; // Une mesure est reçu, on met donc le flag à 1
    idx_carac_xbee_in =  (idx_carac_xbee_in+1) % 5;
    
}*/


//Phalanges doigt 0 // Définitions de chaque servomoteur sur chaque doigt. Le doigt 0 correspond à l'index, et les servos se suivent de haut en bas. M0 est donc le servo de la base du doigt, et M3 le servomoteur le plus haut
#define D0M1 0x00 // On attribue à chaque servomoteur une adresse sur laquelle on enverra l'ordre d'angle
#define D0M2 0x01 // Ces adresses correspondent à des ports de la carte PWM Adafruit
#define D0M3 0x02
#define D0M0 0x03

//Phalanges doigt 1 // Définitions de chaque servomoteur du doigt majeur
#define D1M1 0x04
#define D1M2 0x05
#define D1M3 0x06
#define D1M0 0x07

//Phalanges doigt 2 // Définitions de chaque servcomoteur de l'annulaire
#define D2M1 0x08
#define D2M2 0x09
#define D2M3 0x0A
#define D2M0 0x0B

//Phalanges doigt 3 // Définitions de chaque servomoteur de l'auriculaire
#define D3M1 0x0C
#define D3M2 0x0D
#define D3M3 0x0E
#define D3M0 0x0F

int i = 0;



void angle(int moteur, int valeur){ // Fonction qui envoie les données au servomoteur correspondant
        
    valeur = valeur * 10;// Mise en forme correspondant
    valeur = valeur + 1100;//  Ajout de l'offset
    
    if(valeur >= 2400) // On borne les données reçues
    {
        valeur = 2400;
    }
    if(valeur <= 1100)
    {
        valeur = 1100;
    }
    
    PCA_SERVO.set_pwm_pw(moteur, valeur); // Puis on envoie au moteur
}










int main() {
    
    int i = 0;
    
    pc.baud(115200);
    xbee.baud(9600);
     //xbee.attach(&irq_xbee);
     
     
     
     
     PCA_SERVO.init(); //Initialisation des servomoteurs
    for(i=0;i<=15;i++){ // On met tous les servomoteurs dans une position qui équivaut à la position de repos
        PCA_SERVO.set_pwm_output_on_0(i, 0);
    }
    
    
    
    /*angle(D1M1, ); // Les valeurs sont différentes les unes des autres car les servomoteurs ne sont pas tous identiques et ils prennent de la place, ils se décalent donc un peu
    angle(D1M2, 35);
    angle(D1M3, 35);*/
     
    /* for(i;i<10;i++){
     
     angle(4,80);
     
     wait(2);
     
      angle(4,20);
      }*/
  
    int test;
    
    /*
         for(i = 0 ;i<10;i++){
     
     angle(4,120);
     
     wait_ms(100);
     
      angle(4,30);
      }*/
    
    while(1) {
        
      
      
      
            
        
        test = xbee.getc();
        //pc.printf("%d \r\n",test);
        
    
       
       /*angle(D1M1, text_xbee[1]); 
       angle(D1M2, text_xbee[1]); 
       angle(D1M3, text_xbee[1]);*/
       
       angle(4, test);
       /*angle(D1M2, test);
       angle(D1M3, test);*/
       
       /*PCA_SERVO.set_pwm_duty(4, 0.5);
       
        wait_ms(20);
        
       PCA_SERVO.set_pwm_duty(4, 0.1);*/
    }
}