Guest User

Untitled

a guest
Jan 6th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1. #include <STTODRobot.h>
  2. STTODRobot myOmni = STTODRobot();
  3.  
  4. bool chay = true;
  5. bool nhanline = true;
  6.  
  7. int ss[16] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15};
  8. double irAngle[16] = {0, 22.5, 45, 67.5, 90, 112.5, 135, 157.5, 190, 202.5, 225, 247.5, 290, 292.5, 315 , 337.5 };
  9.  
  10. int minSensorVal[] = {1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023};
  11. int maxSensorVal[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  12. int sensorVal[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  13.  
  14. //---------------------chan dieu khienr động cơ------------------------//
  15. int IN1 = 22;
  16. int IN2 = 23;
  17. int IN3 = 24;
  18. int IN4 = 25;
  19. int IN5 = 26;
  20. int IN6 = 27;
  21. int EN1 = 5;
  22. int EN2 = 6;
  23. int EN3 = 7;
  24.  
  25. const int irThreshold = 400;
  26. const int angleRange = 60; // degrees
  27. const int delayDuration = 5;
  28. int angle = 0;
  29. double newAngle = 0;
  30. int count = 0;
  31.  
  32. void setup() {
  33. myOmni.init(IN1, IN2, EN1, IN3, IN4, EN2, IN5, IN6, EN3);
  34. pinMode(IN1, OUTPUT);
  35. pinMode(IN2, OUTPUT);
  36. pinMode(IN3, OUTPUT);
  37. pinMode(IN4, OUTPUT);
  38. pinMode(IN5, OUTPUT);
  39. pinMode(IN6, OUTPUT);
  40. pinMode(EN1, OUTPUT);
  41. pinMode(EN2, OUTPUT);
  42. pinMode(EN3, OUTPUT);
  43.  
  44. //Rotate Omni: true (clockwise), false (anti-clockwise)
  45. myOmni.rotate_omni(true, 150);
  46. //Code Mutiple Calibration =))
  47. while (millis() < 2000) {
  48. for(int i = 0; i < 16; i++){
  49. sensorVal[i] = analogRead(ss[i]);
  50. if (sensorVal[i] < minSensorVal[i]) { minSensorVal[i] = sensorVal[i];}
  51. if (sensorVal[i] > maxSensorVal[i]) { maxSensorVal[i] = sensorVal[i];}
  52. }
  53. }
  54. myOmni.stop_omni();
  55. delay(2000);
  56. myOmni.move_omni(0, 150);
  57. }
  58.  
  59. void loop() {
  60. for(int i = 0; i < 16; i++){
  61. sensorVal[i] = analogRead(ss[i]);
  62. sensorVal[i] = map(sensorVal[i], minSensorVal[i], maxSensorVal[i], 0, 1023);
  63. sensorVal[i] = constrain(sensorVal[i], 0, 1023);
  64. }
  65. if(chay) {
  66. find_angle();
  67. if(count != 0){
  68. newAngle = (int)(newAngle * 1.0 / count);
  69. if(newAngle < 0)
  70. newAngle += 360;
  71. angle = round(newAngle);
  72. myOmni.move_omni(angle, 150);
  73. delay(delayDuration);
  74. }
  75. else
  76. delay(delayDuration);
  77. count = 0;
  78. newAngle = 0;
  79. } else { myOmni.stop_omni();}
  80. }
  81.  
  82. void find_angle(void){
  83. //if(nhanline) {
  84. int minAngle = angle - angleRange;
  85. if(minAngle < 0)
  86. minAngle += 360;
  87. int maxAngle = angle + angleRange;
  88. if(maxAngle >= 360)
  89. maxAngle -= 360;
  90. int value;
  91. if(minAngle < maxAngle) {
  92. for(int i = 0; i < 16; i++) {
  93. if(irAngle[i] >= minAngle && irAngle[i] <= maxAngle) {
  94. value = sensorVal[i];
  95. if(value > irThreshold) {
  96. newAngle += irAngle[i];
  97. count++;
  98. }
  99. }
  100. }
  101. }
  102. else {
  103. for(int i = 0; i < 16; i++) {
  104. if(irAngle[i] >= minAngle || irAngle[i] <= maxAngle) {
  105. value = sensorVal[i];
  106. if(value > irThreshold) {
  107. if(irAngle[i] <= maxAngle)
  108. newAngle += irAngle[i];
  109. else
  110. newAngle += (irAngle[i] - 360);
  111. count++;
  112. }
  113. }
  114. }
  115. }
  116. //}
  117. nhanline = false;
  118. int slcbnd = 0;
  119. for(int i = 0; i < 16; i++) {
  120. if(sensorVal[i] > irThreshold) nhanline = true;
  121. }
  122. //if(!nhanline) {
  123. // newAngle += 90; if(newAngle >= 360) newAngle -=360;
  124. //}
  125. for(int i = 0; i < 16; i++) {
  126. if(sensorVal[i] > irThreshold) slcbnd++;
  127. }
  128. if(slcbnd >= 10) chay = false;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment