TungstenVn

MotorControl_MiniRBC

Jul 3rd, 2019
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. void ProcessMotor() {
  2.  
  3.   int Motors[4] = {0};
  4. /*
  5.  *
  6.  * ANH ƠI, ĐOẠN NÀY DÙNG CODE NÀO ANH
  7.   Motors[0] = -Channels[0];
  8.   Motors[1] = Channels[0];
  9.   Motors[2] = -Channels[0];
  10.   Motors[3] = Channels[0];
  11.  
  12.   Motors[0] += -Channels[1];
  13.   Motors[1] += -Channels[1];
  14.   Motors[2] += Channels[1];
  15.   Motors[3] += Channels[1];
  16.  
  17.   Motors[0] += -Channels[2];
  18.   Motors[1] += -Channels[2];
  19.   Motors[2] += -Channels[2];
  20.   Motors[3] += -Channels[2];
  21.  
  22.  */
  23.   Motors[0] = Channels[0];
  24.   Motors[1] = Channels[0];
  25.   Motors[2] = Channels[0];
  26.   Motors[3] = Channels[0];
  27.  
  28.   Motors[0] += Channels[1];
  29.   Motors[1] -= Channels[1];
  30.   Motors[2] -= Channels[1];
  31.   Motors[3] += Channels[1];
  32.  
  33.   Motors[0] += Channels[2];
  34.   Motors[1] -= Channels[2];
  35.   Motors[2] += Channels[2];
  36.   Motors[3] -= Channels[2];
  37.  
  38.   SetSpeed(Motors);
  39. }
  40. int SetSpeed(int* motors) {
  41.   Constrains(motors);
  42.   for (int i=0; i<4; i++) {
  43.     if (motors[i]>=0) {
  44.       analogWrite(MotorInput[i], motors[i]);
  45.       analogWrite(MotorOutput[i], 0);
  46.     } else {
  47.       analogWrite(MotorInput[i], 255+motors[i]);
  48.       analogWrite(MotorOutput[i], 255);
  49.     }
  50.   }
  51. }
  52. void Constrains(int *motors) {
  53.   int TEMP_MAX_SPEED = 0;
  54.   if (millis() - sys_start < 400) {
  55.     TEMP_MAX_SPEED = (float)(MAX_SPEED * ((millis() - sys_start + 800)) / 1200);
  56.   } else {
  57.     TEMP_MAX_SPEED = MAX_SPEED;
  58.   }
  59.  
  60.   int TEMP_MIN_SPEED = -TEMP_MAX_SPEED;
  61.  
  62.   /*Gotta make sure every value is vaild*/
  63.   int temp = TEMP_MIN_SPEED;
  64.   for (int i=0; i<4; i++) {
  65.     if (motors[i]>temp) {
  66.       temp = motors[i];
  67.     }
  68.   }
  69.  
  70.   if (temp>TEMP_MAX_SPEED) {
  71.     float ratio = (float)TEMP_MAX_SPEED/temp;
  72.     for (int i=0; i<4; i++) {
  73.       motors[i]*=ratio;
  74.     }
  75.   }
  76.  
  77.   temp = TEMP_MAX_SPEED;
  78.   for (int i=0; i<4; i++) {
  79.     if (motors[i]<temp) {
  80.       temp = motors[i];
  81.     }
  82.   }
  83.  
  84.   if (temp<TEMP_MIN_SPEED) {
  85.     float ratio = (float)TEMP_MIN_SPEED/temp;
  86.     for (int i=0; i<4; i++) {
  87.       motors[i]*=ratio;
  88.     }
  89.   }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment