Guest User

Untitled

a guest
Jan 11th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. #include <WiFi.h>
  2. #include <WiFiUdp.h>
  3. #include <Wire.h>
  4.  
  5. #define MOTORLATCH 12
  6. #define MOTORCLK 4
  7. #define MOTORENABLE 7
  8. #define MOTORDATA 8
  9. #define MOTOR3_A 5
  10. #define MOTOR3_B 7
  11. #define MOTOR4_A 0
  12. #define MOTOR4_B 6
  13. #define MOTOR3_PWM 6
  14. #define MOTOR4_PWM 5
  15. #define FORWARD 1
  16. #define BACKWARD 2
  17. #define BRAKE 3
  18. #define RELEASE 4
  19. String message = "";
  20. bool isBlowingHorn = false;
  21. bool isBraking = false;
  22. bool isDrivingForward = false;
  23. bool isDrivingBackward = false;
  24. bool isTurningLeft = false;
  25. bool isTurningRight = false;
  26. int interval = 50;
  27. int extraSpeedPerInterval = 5;
  28. int slowDownPerInterval = 1;
  29. int currentSpeed3 = 0;
  30. int currentSpeed4 = 0;
  31. int maxSpeed3 = 255;
  32. int maxSpeed4 = 240;
  33. long lastMillis = 0;
  34. int outputSpeed3 = 0;
  35. int outputSpeed4 = 0;
  36.  
  37. void setup() {
  38. Wire.begin(8);
  39. Wire.onReceive(receiveEvent);
  40. Serial.begin(9600);
  41. }
  42.  
  43. void loop() {
  44. CalculateSpeed();
  45. ApplySpeed();
  46. String speed3 = "3:" + currentSpeed3;
  47. sendWireMessage(speed3);
  48. String speed4 = "4:" + currentSpeed4;
  49. sendWireMessage(speed4);
  50. }
  51.  
  52. void CalculateSpeed() {
  53. if (isDrivingForward && !isDrivingBackward) {
  54. if(millis() - lastMillis > interval) {
  55. if (currentSpeed3 < maxSpeed3)
  56. currentSpeed3 += (int) ((maxSpeed3 / 100) * extraSpeedPerInterval);
  57. if(currentSpeed4 < maxSpeed4)
  58. currentSpeed4 += (int) ((maxSpeed4 / 100) * extraSpeedPerInterval);
  59. }
  60. } else if (isDrivingBackward && !isDrivingForward) {
  61. if(millis() - lastMillis > interval) {
  62. if (currentSpeed3 > -maxSpeed3)
  63. currentSpeed3 -= (int) ((maxSpeed3 / 100) * extraSpeedPerInterval);
  64. if(currentSpeed4 > -maxSpeed4) {
  65. currentSpeed4 -= (int) ((maxSpeed4 / 100) * extraSpeedPerInterval);
  66. }
  67. }
  68. } else {
  69. if (currentSpeed3 > 0)
  70. currentSpeed3 -= (int) (maxSpeed3 / 100 * slowDownPerInterval);
  71. if (currentSpeed3 < 0)
  72. currentSpeed3 += (int) ((maxSpeed3 / 100) * slowDownPerInterval);
  73. if (currentSpeed4 > 0)
  74. currentSpeed4 -= (int) ((maxSpeed4 / 100) * slowDownPerInterval);
  75. if (currentSpeed4 < 0)
  76. currentSpeed4 += (int) ((maxSpeed4 / 100) * slowDownPerInterval);
  77. }
  78. if(isTurningRight && !isTurningLeft) {
  79. if(millis() - lastMillis > interval)
  80. outputSpeed4 = currentSpeed4 / 2;
  81. outputSpeed3 = currentSpeed3 ;
  82. } else if (isTurningLeft && !isTurningRight) {
  83. if(millis() - lastMillis > interval)
  84. outputSpeed3 = currentSpeed3 / 2 ;
  85. outputSpeed4 = currentSpeed4 ;
  86. } else{
  87. outputSpeed3 = currentSpeed3 ;
  88. outputSpeed4 = currentSpeed4 ;
  89. }
  90.  
  91. ApplySpeed();
  92. if(isBraking) {
  93. motor(3, BRAKE, 0);
  94. motor(4, BRAKE, 0);
  95. }
  96.  
  97. if(millis() - lastMillis > interval)
  98. lastMillis = millis();
  99. }
  100.  
  101. void ApplySpeed() {
  102. if (outputSpeed3 > 0 )
  103. motor(3, FORWARD, outputSpeed3);
  104. else if (outputSpeed3 < 0 )
  105. motor(3, BACKWARD, -outputSpeed3);
  106. else
  107. motor(3, RELEASE, 0);
  108. if (outputSpeed4 > 0 )
  109. motor(4, FORWARD, outputSpeed4);
  110. else if (outputSpeed4 < 0 )
  111. motor(4, BACKWARD, -outputSpeed4);
  112. else
  113. motor(4, RELEASE, 0);
  114. }
  115.  
  116. void sendWireMessage(String message) {
  117. Wire.beginTransmission(8);
  118. Wire.write('#');
  119. for(int i=0; i<message.length(); i++)
  120. Wire.write(message[i]);
  121. Wire.write('%');
  122. Wire.endTransmission();
  123. }
  124.  
  125. void receiveEvent() {
  126. while (Wire.available() > 0) {
  127. char readChar = Wire.read();
  128. Serial.println(readChar);
  129. switch (readChar) {
  130. case '#':
  131. message = "";
  132. break;
  133. case '%':
  134. ProcessReceivedMessage(message);
  135. break;
  136. default:
  137. message += readChar;
  138. }
  139. }
  140. }
  141.  
  142. void ProcessReceivedMessage(String message) {
  143. Serial.print("RECEIVED:");
  144. Serial.println(message);
  145. if(message.equals("DRIVE_FORWARD")) {
  146. isDrivingForward = true;
  147. } else if(message.equals("DRIVE_BACKWARD")) {
  148. isDrivingBackward = true;
  149. } else if(message.equals("STOP_DRIVING_FORWARD")) {
  150. isDrivingForward = false;
  151. } else if(message.equals("STOP_DRIVING_BACKWARD")) {
  152. isDrivingBackward = false;
  153. } else if(message.equals("TURN_LEFT")) {
  154. isTurningLeft = true;
  155. } else if(message.equals("TURN_RIGHT")) {
  156. isTurningRight = true;
  157. } else if(message.equals("STOP_TURNING_LEFT")) {
  158. isTurningLeft = false;
  159. } else if(message.equals("STOP_TURNING_RIGHT")) {
  160. isTurningRight = false;
  161. } else if(message.equals("START_BRAKING")) {
  162. isBraking = true;
  163. } else if(message.equals("STOP_BRAKING")) {
  164. isBraking = false;
  165. } else if(message.equals("BLOW_HORN")) {
  166. isBlowingHorn = true;
  167. } else if(message.equals("STOP_HORN")) {
  168. isBlowingHorn = false;
  169. } else if(message.equals("TOGGLE_LIGHTS")) {
  170. } else if(message.equals("REMOTE_CONTROL")) {
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment