Moussa Oudjama
/
XBEE_RECEIVER
Recevoir une donnée
Diff: main.cpp
- Revision:
- 0:f82efb692e3b
diff -r 000000000000 -r f82efb692e3b main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jun 14 07:04:14 2018 +0000 @@ -0,0 +1,148 @@ +#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);*/ + } +}