6677

Untitled

Jan 4th, 2014
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.04 KB | None | 0 0
  1. /*
  2. 11011110010101000100111110111111-STOP-3730067391
  3. 10111010001011111000111100100100-UP-3123679012
  4. 10001001000100100001101010111101-Down-2299665085
  5. 10101101101100001001101000001001-Left-2914032137
  6. 00010101100100100000111100101110-Right-361893678
  7.  
  8. 00010010001001101110010010000010-UPLEFT-304538754
  9. 11011001010001010010111101101011-UPRIGHT-3645189995
  10. 00001010111011100110010100111011-DOWNLEFT-183395643
  11. 01011000010100011111010111101001-DOWNRIGHT-1481766377
  12.  
  13. 10111000011010110001001011110111-HIGHSTOP-3094024951
  14. 01010011011011111000110110100100-HIGHUP-1399819684
  15. 00010101000011001111001000000011-HIGHDOWN-353169923
  16. 11100010111111011001110101000011-HIGHLEFT-3808271683
  17. 10100001100011001110011001110000-HIGHRIGHT-2710365808
  18.  
  19. 11111010110000001010011100000000-HIGHUPLEFT-4206929664
  20. 00100100011010010100000111110101-HIGHUPRIGHT-610877941
  21. 01101101101110111101100010100111-HIGHDOWNLEFT-1841027239
  22. 10111111000100011111011101101001-HIGHDOWNRIGHT-3205625705
  23.  */
  24.  
  25. #include <IRremote.h>
  26.  
  27. int RECV_PIN = 11;
  28. int ledPin = 13;
  29.  
  30. IRrecv irrecv(RECV_PIN);
  31.  
  32. decode_results irData;
  33. int result;
  34.  
  35. int speedHIGH = 128;//-------------------------------
  36. int speedLOW = 32;//-------------------------------
  37.  
  38. int leftDir=5;
  39. int leftPWM=9;
  40. int rightDir=4;
  41. int rightPWM=10;
  42.  
  43. int leftAmpPin = A0;
  44. int rightAmpPin = A1;
  45. int leftAmpReading;
  46. int rightAmpReading;
  47. float leftAmps;
  48. float rightAmps;
  49. float conversionFactor;
  50.  
  51. int forward = 1;
  52. int backward = 0;
  53.  
  54. int leftEncoderPin = 3;
  55. int rightEncoderPin = 2;
  56. unsigned long lPulse;
  57. unsigned long rPulse;
  58. unsigned long lTime;
  59. unsigned long rTime;
  60. unsigned long lCount = 0;
  61. unsigned long rCount = 0;
  62. unsigned long lCountLast = 0;
  63. unsigned long rCountLast = 0;
  64.  
  65. int lPWM, rPWM, lSpeed, rSpeed;
  66. unsigned long maxspeed = 520;//520 according to OB1
  67. unsigned long actual;
  68.  
  69. void setup()
  70. {
  71.   Serial.begin(9600);
  72.   irrecv.enableIRIn(); // Start the receiver
  73.  
  74.   analogReference(DEFAULT);
  75.  
  76.   conversionFactor = 5.0/1023.0;
  77.  
  78.   pinMode(leftDir, OUTPUT);
  79.   pinMode(leftPWM, OUTPUT);
  80.   pinMode(rightDir, OUTPUT);
  81.   pinMode(rightPWM, OUTPUT);
  82.  
  83.   attachInterrupt(0, leftEncoderChange, CHANGE);
  84.   attachInterrupt(1, rightEncoderChange, CHANGE);
  85. }
  86.  
  87. void loop() {
  88.   if (irrecv.decode(&irData)) {
  89.     result = irData.value;
  90.     //Serial.println(irData.value);
  91.    
  92.     switch(result) {
  93.       case 3123679012:
  94.         leftMotor(forward, speedLOW);
  95.         rightMotor(forward, speedLOW);
  96.         led(0);
  97.         //slow forwards
  98.         break;
  99.       case 2299665085:
  100.         leftMotor(backward, speedLOW);
  101.         rightMotor(backward, speedLOW);
  102.         led(0);
  103.         //backwards
  104.         //slow
  105.         break;
  106.       case 2914032137:
  107.         leftMotor(backward, speedLOW);
  108.         rightMotor(forward, speedLOW);
  109.         led(0);
  110.         //left
  111.         //slow
  112.         break;
  113.       case 361893678:
  114.         leftMotor(forward, speedLOW);
  115.         rightMotor(backward, speedLOW);
  116.         led(0);
  117.         //right
  118.         //slow
  119.         break;
  120.       case 304538754:
  121.         //forward-left slow
  122.         leftMotor(forward, 0);
  123.         rightMotor(forward, speedLOW);
  124.         break;
  125.       case 3645189995:
  126.         //forward-right slow
  127.         leftMotor(forward, speedLOW);
  128.         led(0);
  129.         rightMotor(forward, 0);
  130.         break;
  131.       case 183395643:
  132.         //backward left slow
  133.         leftMotor(backward, speedLOW);
  134.         rightMotor(backward, 0);
  135.         led(0);
  136.         break;
  137.       case 1481766377:
  138.         //backward right slow
  139.         leftMotor(backward, 0);
  140.         rightMotor(backward, speedLOW);
  141.         led(0);
  142.         break;
  143.        
  144.       case 1399819684:
  145.         //forward fast
  146.         leftMotor(forward, speedHIGH);
  147.         rightMotor(forward, speedHIGH);
  148.         led(1);
  149.         break;
  150.       case 353169923:
  151.         //backward fast
  152.         leftMotor(backward, speedHIGH);
  153.         rightMotor(backward, speedHIGH);
  154.         led(1);
  155.         break;
  156.       case 3808271683:
  157.         //left fast
  158.         leftMotor(backward, speedHIGH);
  159.         rightMotor(forward, speedHIGH);
  160.         led(1);
  161.         break;
  162.       case 2710365808:
  163.         //right fast
  164.         leftMotor(forward, speedHIGH);
  165.         rightMotor(backward, speedHIGH);
  166.         led(1);
  167.         break;
  168.        
  169.       case 4206929664:
  170.         //highspeed forwards left
  171.         leftMotor(forward, speedLOW);
  172.         rightMotor(forward, speedHIGH);
  173.         led(1);
  174.         break;
  175.       case 610877941:
  176.         //highspeed forwards right
  177.         leftMotor(forward, speedHIGH);
  178.         rightMotor(forward, speedLOW);
  179.         led(1);
  180.         break;
  181.       case 1841027239:
  182.         //high back left
  183.         leftMotor(backward, speedLOW);
  184.         rightMotor(backward, speedHIGH);
  185.         led(1);
  186.         break;
  187.       case 3205625705:
  188.         //high back right
  189.         leftMotor(backward, speedLOW);
  190.         rightMotor(backward, speedHIGH);
  191.         led(1);
  192.         break;
  193.        
  194.        
  195.       case 3730067391:
  196.         leftMotor(forward, 0);
  197.         rightMotor(forward, 0);
  198.        
  199.       case 3094024951:
  200.         leftMotor(forward, 0);
  201.         rightMotor(forward, 0);
  202.        
  203.        
  204.       default:
  205.         //stop
  206.        
  207.         break;
  208.     }
  209.     leftAmpReading = analogRead(leftAmpPin);
  210.     leftAmps = leftAmpReading * conversionFactor;
  211.     rightAmpReading = analogRead(rightAmpPin);
  212.     rightAmps = rightAmpReading * conversionFactor;
  213.    
  214.     Serial.print("Left:  ");
  215.     Serial.print(leftAmps);
  216.     Serial.print("A ");
  217.     Serial.println(lCount);
  218.     Serial.print("Right: ");
  219.     Serial.print(rightAmps);
  220.     Serial.print("A ");
  221.     Serial.println(rCount);
  222.    
  223.     irrecv.resume(); // Receive the next value
  224.   }
  225.   else {
  226.     //stop
  227.    
  228.   }
  229.  
  230.   //===================================== Motor Speed Control ============================
  231.   if (micros()-lTime > 50000ul && lSpeed != 0) lPWM += 4;
  232.   if (micros()-rTime > 50000ul && rSpeed != 0) rPWM += 4;
  233.  
  234.   actual = 20000/(abs(lSpeed)*maxspeed/255);
  235.   if (actual>lPulse && lPWM>0) lPWM--;
  236.   if (actual<lPulse && lPWM<2549) lPWM++;
  237.  
  238.   actual = 20000/(abs(rSpeed)*maxspeed/255);
  239.   if (actual>rPulse && rPWM>0) rPWM--;
  240.   if (actual<rPulse && rPWM<2549) rPWM++;
  241.  
  242.   if (lSpeed > 0) {
  243.   analogWrite(leftPWM, lPWM);
  244.   }
  245.   else {
  246.     analogWrite(leftPWM, 0);
  247.   }
  248.   if (rSpeed > 0) {
  249.     analogWrite(rightPWM, rPWM);
  250.   }
  251.   else {
  252.     analogWrite(rightPWM, 0);
  253.   }
  254. }
  255.  
  256. void leftMotor(int motorDirection, int motorPWM){
  257.   digitalWrite(leftDir, motorDirection);
  258.   //analogWrite(leftPWM, motorPWM);
  259.   motorPWM = map(motorPWM, 0, 255, 0, maxspeed);
  260.   lSpeed = motorPWM;
  261. }
  262. void rightMotor(int motorDirection, int motorPWM){
  263.   digitalWrite(rightDir, motorDirection);
  264.   //analogWrite(rightPWM, motorPWM);
  265.   motorPWM = map(motorPWM, 0, 255, 0, maxspeed);
  266.   rSpeed = motorPWM;
  267. }
  268.  
  269. void led(int state) {
  270.   digitalWrite(ledPin, state);
  271. }
  272.  
  273. void leftEncoderChange() {
  274.   lPulse = int((micros() - lTime)/50);
  275.   lTime = micros();
  276.   lCount++;
  277. }
  278. void rightEncoderChange() {
  279.   rPulse = int((micros() - rTime)/50);
  280.   rTime = micros();
  281.   rCount++;
  282. }
Advertisement
Add Comment
Please, Sign In to add comment