Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.77 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2.  
  3. /*--------------------PROTOCOLE----------------------------*/
  4. #define SET_TARGET_BYTE 0x04   // represents Pololu protocol set target command
  5. #define DEVICE_NUM 0x0C     // default device number for Pololu protocol
  6. #define PROTOCOL_BYTE 0xAA    // Pololu protocol identifier (0xAA)
  7. #define POLOLU_BIT_MASK 0x7F  
  8. #define SPEED_BYTE 7
  9. #define GETMOVING_STATE 0x13
  10. /*--------------------Mini-Maestro 12----------------------*/
  11. #define rxPin 3  // pin 3 TX (pas utilisé)
  12. #define txPin 4  // pin 4 RX
  13.  
  14. SoftwareSerial liaisonSerie(rxPin, txPin);
  15.  
  16. // void deplaceServo(unsigned char servo, unsigned int target);
  17. // void Set_Speed(unsigned char servo, unsigned int vitesse);
  18.  
  19. int pattes[4][3] = {
  20.   {2, 1, 0},
  21.   {5, 4, 3},
  22.   {8, 7, 6},
  23.   {11, 10, 9}
  24. };
  25.  
  26. const int base = 0;   // CHEVILLE   =   BASE      = 0
  27. const int milieu = 1; // HANCHE     =   MILIEU    = 1
  28. const int bout = 2;   // TIBIAS     =   BOUT      = 2
  29.  
  30. void setup()
  31. {
  32.  liaisonSerie.begin(9600);
  33.  Serial.begin(9600);
  34. }
  35.  
  36. void loop()
  37. {
  38.   char inChar;
  39.   while (Serial.available() > 0) {
  40.     inChar = Serial.read();
  41.     Serial.println(inChar);
  42.   }
  43.   switch(inChar) {
  44.     case 'a':
  45.       lever(0);
  46.       lever(1);
  47.       lever(2);
  48.       lever(3);
  49.       break;
  50.     case 'b':
  51.       baisser(0);
  52.       baisser(1);
  53.       baisser(2);
  54.       baisser(3);
  55.       break;
  56.   }
  57. }
  58.  
  59. void tourner(int patte, int angle) {
  60.   setAngle(pattes[patte][base], angle, 40);
  61. }
  62.  
  63. void lever(int patte) {
  64.   setAngle(pattes[patte][milieu], 0, 40);
  65.   setAngle(pattes[patte][bout], 55, 40);
  66. }
  67.  
  68. void baisser(int patte) {
  69.   
  70.   setAngle(pattes[patte][milieu], 180, 20);
  71.   setAngle(pattes[patte][bout], 55, 20);
  72. }
  73.  
  74. /************************************************/
  75. /*  Déplace le servo moteur. servo (de 0 à 11)  */
  76. /*  angle (0 à 180) vitesse (1 à 127)           */
  77. /************************************************/
  78. void setAngle(unsigned char servo, unsigned int angle, unsigned int vitesse)
  79. {
  80.     //On modifie les paramètre suivant les caractéristique de son servomoteur. 
  81.     // de 0 a 180 degree. 992ms a 2000 PWM.
  82.     angle = (map(angle, 0, 180, 992, 2000) * 4);
  83.  
  84.     // VITESSE
  85.     byte command[] = 
  86.     { PROTOCOL_BYTE, DEVICE_NUM, SPEED_BYTE, servo, vitesse & POLOLU_BIT_MASK, (vitesse >> 7) & POLOLU_BIT_MASK};
  87.     for(int i = 0; i < 6; i++)
  88.     {
  89.       liaisonSerie.write(command[i]);
  90.     }
  91.     
  92.     // ANGLE
  93.     byte command2[] = 
  94.     { PROTOCOL_BYTE, DEVICE_NUM, SET_TARGET_BYTE,
  95.       servo, angle & POLOLU_BIT_MASK, (angle >> 7) & POLOLU_BIT_MASK
  96.     };
  97.     for(int i = 0; i < 6; i++)
  98.     {
  99.       liaisonSerie.write(command2[i]);
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement