Robofun 機器人論壇

標題: 使用joystick控制兩顆直流馬達 [打印本頁]

作者: 純屬路過    時間: 2012-4-4 23:21
標題: 使用joystick控制兩顆直流馬達
請問...如果想要用一個joystick來控制兩顆直流馬達的動作
讓一台玩具車前進、後退、前左轉、前右轉、後左轉、後右轉等

目前我前近跟後退這邊可以說是成功了...
但是轉彎方面老是想不通...
int JXin = 0;         // XMotorPower input
int JYin = 1;         // YMotorPower input

int XMotor_OutPin = 5;   // Xout
int XMOTAspeed = 3;
int YMotor_OutPin = 6;   // Yout
int YMOTAspeed = 4;


int JX_Value = 0;       // Xprint
int JY_Value = 0;       // Yprint
int XMotor_Value = 0;    //FB
int YMotor_Value = 0;

int JX = 0;




int Xspeed;
int Yspeed;

int dirX ;
int dirY ;


void setup()
{
  Serial.begin(9600);
  pinMode(XMotor_OutPin, OUTPUT);
  pinMode(XMOTAspeed, OUTPUT);
  
  pinMode(YMotor_OutPin, OUTPUT);
  pinMode(YMOTAspeed, OUTPUT);
  
  Yspeed = 0;
  Xspeed = 0;
  dirX = 1;
  dirY = 1;
}
void MOTORDRIVE(int Xspeed , int dirX , int Yspeed , int dirY)
{
   analogWrite(XMOTAspeed,Xspeed);
   analogWrite(YMOTAspeed,Yspeed);
   if(dirX == 0 , dirY == 0 )
   {
   digitalWrite(XMOTAspeed,LOW);
   digitalWrite(YMOTAspeed,LOW);
   }
   else
   {
   digitalWrite(XMOTAspeed, HIGH);
   digitalWrite(YMOTAspeed, HIGH);
   }
  if(dirX == 1, dirY == 0 )
   {
   digitalWrite(XMOTAspeed,HIGH);
   digitalWrite(YMOTAspeed,LOW);
   }
   else
   {
   digitalWrite(XMOTAspeed, LOW);
   digitalWrite(YMOTAspeed, HIGH);
   if(dirX == 0 , dirY == 1 )
   {
   digitalWrite(XMOTAspeed,LOW);
   digitalWrite(YMOTAspeed,HIGH);
   }
   else
   {
   digitalWrite(XMOTAspeed, HIGH);
   digitalWrite(YMOTAspeed, LOW);
}
   }
}

void loop()
{
   //讀取滑桿式可變電阻的電壓值  範圍:0 - 1023
  int JX_Value = analogRead(JXin);//依據不同的電壓值-起動馬達的各種動作
  int JY_Value = analogRead(JXin);
  
  MOTORDRIVE(Xspeed , dirX, Yspeed , dirY);
  if(JX_Value<500)
   {
    dirX = 0;
    dirY = 0;
    XMotor_Value  =  map(JX_Value, 0, 500 , 250, 0) ;
    YMotor_Value  =  map(JY_Value, 0, 500 , 250, 0) ;
   }
    if(JX_Value>=500 && JX_Value <=520)
   {
    dirX =1;
    dirY =1;
    XMotor_Value = 0;
    YMotor_Value = 0;
   }
  
if(JX_Value>521)
   {
     dirX = 1;
     dirY = 1;
    XMotor_Value  = map(JX_Value, 521, 1023, 0, 250);
    YMotor_Value  = map(JY_Value, 521, 1023, 0, 250);   
   }   
             analogWrite(XMotor_OutPin, XMotor_Value);             // change the analog out value:         
             analogWrite(YMotor_OutPin, YMotor_Value);
   
   Serial.print("XMotor = " );
   Serial.print(XMotor_Value );
   Serial.print("\t  YMotor = " );   
   Serial.println(YMotor_Value );
}
作者: Curtiss    時間: 2012-4-5 21:46
在 MOTORDRIVE 中的 if 的語法有些怪怪的。兩個判斷條件應該是以 && 或 || 來連接。
另外,判斷各種 dirX 及 dirY 組合的 if ...else... 敘述,應該改為使用 if ... else if ... else 敘述,會比較容易完成判斷。
作者: 純屬路過    時間: 2012-4-7 17:57
嗯...我的問題現階段有解決了
之前一直把X軸跟Y軸=兩顆馬達這個想法綁住
目前是設定X軸坐為動力,然後Y軸作為限制

這樣子就能夠出現前進、後退、前左轉、前右轉、後左轉、後右轉等數值了

感謝樓上的指正
作者: dream82823    時間: 2014-7-17 12:26
請問可以分享一下修改過後的程式嘛~? 謝謝




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2