Advertisement
Guest User

Untitled

a guest
Mar 5th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. //To control the rover
  2. const int E1 = 6; //M1 Speed Control
  3. const int E2 = 5; //M2 Speed Control
  4. const int M1 = 8; //M1 Direction Control
  5. const int M2 = 7; //M2 Direction Control
  6.  
  7. //LED
  8. int loopPin = 12;
  9.  
  10. //Interrupt Pin
  11. int interruptPin = 2;
  12.  
  13. //Global Variables:
  14. const int leftspeed = 255;
  15. const int rightspeed = 255;
  16. bool inService = false;
  17. const char reply = '1';
  18.  
  19.  
  20. void setup() {
  21. // put your setup code here, to run once:
  22. Serial.begin(9600);
  23.  
  24.  
  25. //Declare Rover Motor Pins
  26. int i;
  27. for(i=5;i<=8;i++)
  28. {
  29. pinMode(i, OUTPUT);
  30. }
  31.  
  32. // Declare LED pin used to signal that main loop is alive
  33. pinMode(loopPin, OUTPUT);
  34. digitalWrite(loopPin, LOW);
  35.  
  36. // Using interrupt 0 on digital pin 2.
  37. pinMode(interruptPin, INPUT);
  38. digitalWrite(interruptPin, LOW);
  39. attachInterrupt(0, serialInterrupt, CHANGE);
  40.  
  41. }
  42.  
  43.  
  44. void loop() {
  45. // put your main code here, to run repeatedly:
  46. digitalWrite(loopPin, HIGH);
  47. }
  48.  
  49.  
  50. void serialInterrupt()
  51. {
  52. // Already in service? Do nothing.
  53. if (inService) return;
  54.  
  55. // If not in Service, Flag.
  56. inService = true;
  57.  
  58. // Reenable interrupts to Receive Data and Use Delay()
  59. interrupts();
  60.  
  61. // stop any current movement
  62. stop();
  63.  
  64. //Show inservice
  65. digitalWrite(loopPin, LOW);
  66.  
  67. // Allow serial to read
  68. while(!Serial.available()){}
  69.  
  70. //Read Data
  71. char data = Serial.read();
  72.  
  73. //Make Decision on Received Data
  74. switch(data)
  75. {
  76. case 'w'://Move Forward
  77. forward (leftspeed,rightspeed);
  78. //range(cm); if (cm <= 5){exit(1);}
  79. break;
  80. case 'a'://Turn Left
  81. left (leftspeed,rightspeed);
  82. // range(cm); if (cm <= 5){exit(1);}
  83. break;
  84. case 'd'://Turn Right
  85. right (leftspeed,rightspeed);
  86. //range(cm); if (cm <= 5){exit(1);}
  87. break;
  88. default:
  89. stop();
  90. // range(cm); if (cm <= 5){exit(1);}
  91. break;
  92. }
  93.  
  94. // Interrupt Routine Finished
  95. //Reply to Pi
  96. Serial.write(reply);
  97. Serial.flush();
  98.  
  99. //Allow New Interrupt
  100. inService = false;
  101. }
  102.  
  103. //Rover Control Functions
  104. void stop(void) //Stop
  105. {
  106. digitalWrite(E1,LOW);
  107. digitalWrite(E2,LOW);
  108. }
  109.  
  110. void forward(char a,char b)
  111. {
  112. analogWrite (E1,a);
  113. digitalWrite(M1,LOW);
  114. analogWrite (E2,b);
  115. digitalWrite(M2,LOW);
  116. delay(200);
  117. stop();
  118. delay(50);
  119. }
  120.  
  121. void left (char a,char b)
  122. {
  123. analogWrite (E1,a);
  124. digitalWrite(M1,HIGH);
  125. analogWrite (E2,b);
  126. digitalWrite(M2,LOW);
  127. delay(200);
  128. stop();
  129. delay(50);
  130. }
  131. void right (char a,char b)
  132. {
  133. analogWrite (E1,a);
  134. digitalWrite(M1,LOW);
  135. analogWrite (E2,b);
  136. digitalWrite(M2,HIGH);
  137. delay(200);
  138. stop();
  139. delay(50);
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement