Recevoir une donnée

Dependencies:   mbed

Revision:
0:f82efb692e3b
--- /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);*/
+    }
+}