Advertisement
Guest User

MIngi arduino pask

a guest
Mar 25th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 KB | None | 0 0
  1. #include <StackArray.h>
  2.  
  3. #include <Arduino.h>
  4. #include <Wire.h>
  5. #include <SoftwareSerial.h>
  6.  
  7. #include <MeAuriga.h>
  8.  
  9. //Encoder Motor
  10. MeEncoderOnBoard Encoder_1(SLOT1);
  11. MeEncoderOnBoard Encoder_2(SLOT2);
  12.  
  13. void isr_process_encoder1(void)
  14. {
  15. if(digitalRead(Encoder_1.getPortB()) == 0){
  16. Encoder_1.pulsePosMinus();
  17. }else{
  18. Encoder_1.pulsePosPlus();
  19. }
  20. }
  21.  
  22. void isr_process_encoder2(void)
  23. {
  24. if(digitalRead(Encoder_2.getPortB()) == 0){
  25. Encoder_2.pulsePosMinus();
  26. }else{
  27. Encoder_2.pulsePosPlus();
  28. }
  29. }
  30.  
  31. void move(int direction, int speed)
  32. {
  33. int leftSpeed = 0;
  34. int rightSpeed = 0;
  35. if(direction == 1){
  36. leftSpeed = -speed;
  37. rightSpeed = speed;
  38. }else if(direction == 2){
  39. leftSpeed = speed;
  40. rightSpeed = -speed;
  41. }else if(direction == 3){
  42. leftSpeed = -speed;
  43. rightSpeed = -speed;
  44. }else if(direction == 4){
  45. leftSpeed = speed;
  46. rightSpeed = speed;
  47. }
  48. Encoder_1.setTarPWM(leftSpeed);
  49. Encoder_2.setTarPWM(rightSpeed);
  50. }
  51. void moveDegrees(int direction,long degrees, int speed_temp)
  52. {
  53. speed_temp = abs(speed_temp);
  54. if(direction == 1)
  55. {
  56. Encoder_1.move(-degrees,(float)speed_temp);
  57. Encoder_2.move(degrees,(float)speed_temp);
  58. }
  59. else if(direction == 2)
  60. {
  61. Encoder_1.move(degrees,(float)speed_temp);
  62. Encoder_2.move(-degrees,(float)speed_temp);
  63. }
  64. else if(direction == 3)
  65. {
  66. Encoder_1.move(-degrees,(float)speed_temp);
  67. Encoder_2.move(-degrees,(float)speed_temp);
  68. }
  69. else if(direction == 4)
  70. {
  71. Encoder_1.move(degrees,(float)speed_temp);
  72. Encoder_2.move(degrees,(float)speed_temp);
  73. }
  74. }
  75.  
  76. double angle_rad = PI/180.0;
  77. double angle_deg = 180.0/PI;
  78. void turnRight();
  79. double dir;
  80. MeGyro gyro_0(0, 0x69);
  81. void turnLeft();
  82. void checkSIdes();
  83. MeUltrasonicSensor ultrasonic_10(10);
  84.  
  85.  
  86. void turnRight()
  87. {
  88. if(((dir)==(0))){
  89. while(!(((gyro_0.getAngle(3)) < (95)) && ((85) < (gyro_0.getAngle(3)))))
  90. {
  91. _loop();
  92. move(4,125);
  93. }
  94. dir = 1;
  95. }else{
  96. if(((dir)==(1))){
  97. while(!(((gyro_0.getAngle(3)) < (-175)) || ((175) < (gyro_0.getAngle(3)))))
  98. {
  99. _loop();
  100. move(4,125);
  101. }
  102. dir = 2;
  103. }else{
  104. if(((dir)==(2))){
  105. while(!(((gyro_0.getAngle(3)) < (-85)) && ((-95) < (gyro_0.getAngle(3)))))
  106. {
  107. _loop();
  108. move(4,125);
  109. }
  110. dir = 3;
  111. }else{
  112. while(!(((gyro_0.getAngle(3)) < (5)) && ((-5) < (gyro_0.getAngle(3)))))
  113. {
  114. _loop();
  115. move(4,125);
  116. }
  117. dir = 0;
  118. }
  119. }
  120. }
  121.  
  122. }
  123.  
  124. void turnLeft()
  125. {
  126. if(((dir)==(0))){
  127. while(!(((gyro_0.getAngle(3)) < (-65)) && ((-95) < (gyro_0.getAngle(3)))))
  128. {
  129. _loop();
  130. move(3,100);
  131. }
  132. dir = 3;
  133. }else{
  134. if(((dir)==(1))){
  135. while(!(((gyro_0.getAngle(3)) < (15)) && ((-5) < (gyro_0.getAngle(3)))))
  136. {
  137. _loop();
  138. move(3,100);
  139. }
  140. dir = 0;
  141. }else{
  142. if(((dir)==(3))){
  143. while(!(((gyro_0.getAngle(3)) < (-165)) || ((170) < (gyro_0.getAngle(3)))))
  144. {
  145. _loop();
  146. move(3,100);
  147. }
  148. dir = 2;
  149. }else{
  150. while(!(((gyro_0.getAngle(3)) < (105)) && ((80) < (gyro_0.getAngle(3)))))
  151. {
  152. _loop();
  153. move(3,100);
  154. }
  155. dir = 1;
  156. }
  157. }
  158. }
  159.  
  160. }
  161.  
  162. void checkSIdes()
  163. {
  164. turnRight();
  165.  
  166. if((ultrasonic_10.distanceCm()) < (15)){
  167. turnLeft();
  168. turnLeft();
  169. }
  170.  
  171. }
  172.  
  173.  
  174. void setup(){
  175. gyro_0.begin();
  176. attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING);
  177. attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING);
  178. //Set Pwm 8KHz
  179. TCCR1A = _BV(WGM10);
  180. TCCR1B = _BV(CS11) | _BV(WGM12);
  181. TCCR2A = _BV(WGM21) | _BV(WGM20);
  182. TCCR2B = _BV(CS21);
  183.  
  184. dir = 0;
  185.  
  186. }
  187.  
  188. void loop(){
  189.  
  190. if((ultrasonic_10.distanceCm()) < (20)){
  191. checkSIdes();
  192. }else{
  193. move(1,100);
  194. }
  195.  
  196. _loop();
  197. }
  198.  
  199. void _delay(float seconds){
  200. long endTime = millis() + seconds * 1000;
  201. while(millis() < endTime)_loop();
  202. }
  203.  
  204. void _loop(){
  205. gyro_0.update();
  206.  
  207. Encoder_1.loop();
  208. Encoder_2.loop();
  209.  
  210.  
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement