Advertisement
KRITSADA

Open CM 9.04 Robot Line Tracking

Dec 6th, 2016
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. Dynamixel AX12(1);
  2. int L,R,CR=2800,CL=2800;
  3. void setup(){
  4.   InitAX12();
  5.   InitIR();
  6. }
  7.  
  8. void loop(){
  9.   L=ADC(1);R=ADC(4);
  10.   if(L>CL&&R>CR){
  11.     fd(800);
  12.   }
  13.   else if(L<CL&&R>CR){
  14.     sl(800);
  15.   }
  16.   else if(L>CL&&R<CR){
  17.     sr(800);
  18.   }
  19.   else if(L<CL&&R<CR){
  20.     fd(800);
  21.   }
  22.  
  23. }
  24.  
  25. void InitAX12(){
  26. // Dynamixel 2.0 Protocol -> 0: 9600, 1: 57600, 2: 115200, 3: 1Mbps
  27.   AX12.begin(3);
  28. // Disable CCW Angle Limit(L) to use wheel mode
  29.   AX12.writeWord(1,8,0);
  30.   AX12.writeWord(2,8,0);
  31.   AX12.writeWord(3,8,0);
  32.   AX12.writeWord(4,8,0);
  33.   AX12.jointMode(5);
  34. }
  35. void fd(int speed){
  36.   AX12.writeWord(1,32,speed);
  37.   AX12.writeWord(2,32,speed);
  38.   AX12.writeWord(3,32,speed|0x400);
  39.   AX12.writeWord(4,32,speed|0x400);
  40. }
  41. void bk(int speed){
  42.   AX12.writeWord(1,32,speed|0x400);
  43.   AX12.writeWord(2,32,speed|0x400);
  44.   AX12.writeWord(3,32,speed);
  45.   AX12.writeWord(4,32,speed);
  46. }
  47. void sl(int speed){
  48.   AX12.writeWord(1,32,speed);
  49.   AX12.writeWord(2,32,speed);
  50.   AX12.writeWord(3,32,speed);
  51.   AX12.writeWord(4,32,speed);
  52. }
  53. void sr(int speed){
  54.   AX12.writeWord(1,32,speed|0x400);
  55.   AX12.writeWord(2,32,speed|0x400);
  56.   AX12.writeWord(3,32,speed|0x400);
  57.   AX12.writeWord(4,32,speed|0x400);
  58. }
  59.  
  60. int ADC(unsigned char CH){
  61.   int A;
  62.   if(CH==1){
  63.     digitalWrite(7,1);delayMicroseconds(15);
  64.     A=analogRead(2);
  65.     digitalWrite(7,0);
  66.     return A;
  67.   }
  68.   else{
  69.     digitalWrite(13,1);delayMicroseconds(15);
  70.     A=analogRead(1);
  71.     digitalWrite(13,0);
  72.     return A;
  73.   }
  74. }
  75.  
  76. void InitIR(){
  77.   pinMode(2, INPUT_ANALOG); // set pin 0 as analog input
  78.   pinMode(1, INPUT_ANALOG); // set pin 0 as analog input
  79.   pinMode(6,OUTPUT);
  80.   pinMode(7,OUTPUT);
  81.   pinMode(12,OUTPUT);
  82.   pinMode(13,OUTPUT);
  83.   digitalWrite(12,0);
  84.   digitalWrite(13,0);
  85.   digitalWrite(6,0);
  86.   digitalWrite(7,0);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement