Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.06 KB | None | 0 0
  1. /*
  2. Les servo sont tel que si leur position 0° se trouve sur le coté "haut", ils peuvent effectuer une rotation vers la position bas par la droite
  3.  
  4. Quel que soit le mouvement effectué, la position finale du système doit être:
  5. -les deux servo ont la même position, 0 ou 180°
  6. -le servo1 a sa position 180° vers le haut
  7. -le servo2 a sa position 180° vers le bas
  8.  
  9.  
  10. Les mouvements possibles sont relatifs au sens du servo1 : l'avant est le sens où pointe la position 180° du servo1, avant ne signifie donc pas forcément le haut
  11.  
  12. Il faudra donc faire la relation entre le sens d'un déplacement dans l'absolu (haut/bas/droite/gauche) et relatif(avant/arrière/90° sur la droite ou la gauche)
  13. avec un gyroscope.
  14.  
  15. */
  16.  
  17. #include <Servo.h>
  18.  
  19. Servo servo1;  
  20. Servo servo2;
  21. int eaimant1 = 8;     //pins des eaimants et servos
  22. int eaimant2 = 9;
  23. int ser1pos = 5;  
  24. int ser2pos = 6;
  25.  
  26. int pos1 = 0;    // position des servo
  27.  
  28. int serAv = 1;   //servo le plus en avant relativement à "l'avant" défini par la position 180° du servo1
  29.  
  30. int delai = 5;
  31.  
  32. int servoMobile = 0; //servo mobiles et immobiles pour les rotations de 90°
  33. int servoImmo = 0;
  34.  
  35. void setup() {
  36.   servo1.attach(ser1pos);  // attaches the servo on pin 9 to the servo object
  37.   servo2.attach(ser2pos);
  38.   pinMode(eaimant1, OUTPUT);
  39.   pinMode(eaimant2, OUTPUT);
  40.  
  41.   servo1.write(0);
  42.   servo2.write(0);
  43. }
  44.  
  45. void loop() {
  46.   digitalWrite(eaimant1, HIGH);
  47.   digitalWrite(eaimant2, HIGH);
  48.  
  49. //déplacement en ligne droite:
  50.  
  51.   if (serAv == 1) digitalWrite(eaimant2, LOW);
  52.   if (serAv == 2) digitalWrite(eaimant1, LOW);
  53.   delay(delai);
  54.  
  55.   pos1 = servo1.read();           //détermine la position d'un servo, qui est la même que l'autre
  56.   for (pos = pos1; pos <= (180-pos1); pos += 5) //si le servo est à 180° il tourne vers 0°, sinon l'inverse
  57.   {
  58.     servo1.write(pos);            //les servo prennent la variable pos
  59.     servo2.write(pos);              
  60.     delay(15);                       // délai standard
  61.   }
  62.  
  63.   serAv = (3-serAv); //passe de 1 à 2 ou de 2 à 1;
  64.   digitalWrite(eaimant1, HIGH);
  65.   digitalWrite(eaimant2, HIGH);
  66.   delay(delai);
  67. //fin ligne droite
  68.  
  69. //déplacement arrière:  
  70.  
  71.   if (serAv == 1) digitalWrite(eaimant1, LOW);
  72.   if (serAv == 2) digitalWrite(eaimant2, LOW);
  73.   delay(delai);
  74.  
  75.   pos1 = servo1.read();
  76.   for (pos = pos1; pos <= (180-pos1); pos += 5)  //si le servo est à 180° il tourne vers 0°, sinon l'inverse
  77.   {
  78.     servo1.write(pos);
  79.     servo2.write(pos);            
  80.     delay(15);          
  81.   }  
  82.  
  83.   serAv = (3-serAv); //passe de 1 à 2 ou de 2 à 1;
  84.   digitalWrite(eaimant1, HIGH);
  85.   digitalWrite(eaimant2, HIGH);
  86.   delay(delai);
  87. //fin arrière  
  88.  
  89. //rotations 90°
  90.  
  91.   //du serAv sur la gauche
  92.  
  93.     if (serAv == 1)
  94.     {
  95.       digitalWrite(eaimant2, LOW);
  96.       delay(delai);
  97.      
  98.       for (pos = 0; pos <= 90; pos +=5)
  99.       {
  100.         servo1.write(pos);
  101.         delay(15);
  102.       }
  103.      
  104.       digitalWrite(eaimant2, HIGH);
  105.       delay(delai);
  106.       digitalWrite(eaimant1, LOW);
  107.       delay(delai);
  108.      
  109.       for (pos = 90; pos >= 0; pos -=5)
  110.      {
  111.        servo1.write(pos);
  112.        delay(15);
  113.       }
  114.      
  115.       digitalWrite(eaimant1, HIGH);
  116.       delay(delai);
  117.     }
  118.     else if (serAv == 2)
  119.     {
  120.       digitalWrite(eaimant2, LOW);
  121.       delay(delai);
  122.      
  123.       for (pos = 180; pos >= 90; pos -=5)
  124.       {
  125.         servo2.write(pos);
  126.         delay(15);
  127.       }
  128.      
  129.       digitalWrite(eaimant2, HIGH);
  130.       delay(delai);
  131.       digitalWrite(eaimant1, LOW);
  132.       delay(delai);
  133.      
  134.       for (pos = 90; pos <= 180; pos +=5)
  135.       {
  136.        servo2.write(pos);
  137.        delay(15);
  138.       }
  139.      
  140.       digitalWrite(eaimant1, HIGH);
  141.       delay(delai);
  142.     }
  143.   //fin serAv vers la gauche
  144.  
  145.   //serAv vers la droite
  146.     if (serAv == 1)
  147.     {
  148.       digitalWrite(eaimant1, LOW);
  149.       delay(delai);
  150.      
  151.       for (pos = 0; pos <= 90; pos +=5)
  152.       {
  153.         servo1.write(pos);
  154.         delay(15);
  155.       }
  156.      
  157.       digitalWrite(eaimant1, HIGH);
  158.       delay(delai);
  159.       digitalWrite(eaimant2, LOW);
  160.       delay(delai);
  161.      
  162.       for (pos = 90; pos >= 0; pos -=5)
  163.       {
  164.        servo1.write(pos);
  165.        delay(15);
  166.       }
  167.      
  168.       digitalWrite(eaimant2, HIGH);
  169.       delay(delai);
  170.     }
  171.     else if(serAv == 2)
  172.     {
  173.       digitalWrite(eaimant1, LOW);
  174.       delay(delai);
  175.      
  176.       for (pos = 180; pos >= 90; pos -=5)
  177.       {
  178.         servo2.write(pos);
  179.         delay(15);
  180.       }
  181.      
  182.       digitalWrite(eaimant1, HIGH);
  183.       delay(delai);
  184.       digitalWrite(eaimant2, LOW);
  185.       delay(delai);
  186.      
  187.       for (pos = 90; pos <= 180; pos +=5)
  188.       {
  189.        servo2.write(pos);
  190.        delay(15);
  191.       }
  192.      
  193.       digitalWrite(eaimant1, HIGH);
  194.       delay(delai);
  195.     }
  196.   //fin serAv droite
  197.  
  198.   //servo arrière vers la gauche
  199.     if (serAv == 1)
  200.     {
  201.       digitalWrite(eaimant2, LOW);
  202.       delay(delai);
  203.      
  204.       for (pos = 0; pos <= 90; pos +=5)
  205.       {
  206.         servo2.write(pos);
  207.         delay(15);
  208.       }
  209.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement