Moussa Oudjama
/
XBEE_RECEIVER
Recevoir une donnée
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);*/ } }