Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. #include <Servo.h>
  2.  
  3. #define DIR_PIN 2
  4. #define STEP_PIN 3
  5.  
  6. const int button = 48; // un bouton sur la broche 48
  7. const int led = 46;
  8.  
  9. Servo monServomoteur;
  10. float actualPos=0;
  11.  
  12. void setup() {
  13. monServomoteur.attach(8);
  14. pinMode(button, INPUT_PULLUP);
  15. pinMode(led, OUTPUT);
  16. pinMode(DIR_PIN, OUTPUT);
  17. pinMode(STEP_PIN, OUTPUT);
  18.  
  19. digitalWrite(led, HIGH);
  20. while(digitalRead(button) == LOW){
  21. rotate(-5, .5);
  22. delay(50);
  23. }
  24. digitalWrite(led,LOW);
  25. rotate(1200, .08);
  26. actualPos = 0;
  27. digitalWrite(led,HIGH);
  28. delay(2000);
  29. }
  30.  
  31. void rotate(int steps, float speed){
  32. int dir = (steps > 0)? HIGH:LOW;
  33. steps = abs(steps);
  34.  
  35. digitalWrite(DIR_PIN,dir);
  36.  
  37. float usDelay = (1/speed) * 70;
  38.  
  39. for(int i=0; i < steps; i++){
  40. digitalWrite(STEP_PIN, HIGH);
  41. delayMicroseconds(usDelay);
  42. digitalWrite(STEP_PIN, LOW);
  43. delayMicroseconds(usDelay);
  44. }
  45. }
  46.  
  47.  
  48. void rotateDeg(float deg, float speed){
  49.  
  50. int dir = (deg > 0)? HIGH:LOW;
  51. int rotateDir = (deg > 0)? 1:-1;
  52. digitalWrite(DIR_PIN,dir);
  53.  
  54. int steps = abs(deg)*(2/0.225);
  55. float usDelay = (1/speed) * 70;
  56. for(int i=0; i < steps; i++){
  57. actualPos += rotateDir;
  58. if(actualPos == 1150){
  59. delay(500);
  60. digitalWrite(led,LOW);
  61. rotate(2*(0-actualPos), speed);
  62. actualPos = -1149;
  63. digitalWrite(DIR_PIN,dir);
  64. digitalWrite(led,HIGH);
  65. delay(300);
  66. }
  67. if(actualPos == -1150){
  68. delay(500);
  69. digitalWrite(led,LOW);
  70. rotate(2*(0-actualPos), speed);
  71. actualPos = 1149;
  72. digitalWrite(DIR_PIN,dir);
  73. digitalWrite(led,HIGH);
  74. delay(300);
  75. }
  76. digitalWrite(STEP_PIN, HIGH);
  77. delayMicroseconds(usDelay);
  78. digitalWrite(STEP_PIN, LOW);
  79. delayMicroseconds(usDelay);
  80. }
  81. }
  82.  
  83.  
  84. int position;
  85. void rotateServo(float angleBase, float angleFin){
  86. if(angleBase <= angleFin){
  87. for (position = angleBase; position <= angleFin; position++){
  88. monServomoteur.write(position);
  89. }
  90. }
  91. if(angleBase > angleFin){
  92. for (position = angleBase; position <= angleFin; position--){
  93. monServomoteur.write(position);
  94. }
  95. }
  96. }
  97.  
  98.  
  99. void loop(){
  100. // Fait bouger le bras de 0° à 180°
  101. //rotateServo(0,180);
  102. //for(int position = 0; position < 180; position++){
  103. // monServomoteur.write(position);
  104. // }
  105.  
  106.  
  107. if(digitalRead(button) == HIGH) // test si le bouton a un niveau logique HAUT
  108. {
  109. digitalWrite(led, LOW); //le bouton est relâché, la LED est allumée
  110. }
  111. else // test si le bouton a un niveau logique différent de HAUT (donc BAS)
  112. {
  113. digitalWrite(led, HIGH); //la LED reste éteinte
  114. }
  115. delay(50);
  116.  
  117.  
  118. rotateDeg(-40, .2);
  119. delay(500);
  120. rotateDeg(10, .2);
  121. delay(500);
  122. //rotateDeg(400, .2);
  123. //delay(1000);
  124. //rotateDeg(-180, .2);
  125. //delay(1000);
  126.  
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement