Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3732|回復: 3
打印 上一主題 下一主題

使用joystick控制兩顆直流馬達

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-4-4 23:21:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問...如果想要用一個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 );
}
2#
發表於 2012-4-5 21:46:28 | 只看該作者
在 MOTORDRIVE 中的 if 的語法有些怪怪的。兩個判斷條件應該是以 && 或 || 來連接。
另外,判斷各種 dirX 及 dirY 組合的 if ...else... 敘述,應該改為使用 if ... else if ... else 敘述,會比較容易完成判斷。
3#
 樓主| 發表於 2012-4-7 17:57:51 | 只看該作者
嗯...我的問題現階段有解決了
之前一直把X軸跟Y軸=兩顆馬達這個想法綁住
目前是設定X軸坐為動力,然後Y軸作為限制

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

感謝樓上的指正
4#
發表於 2014-7-17 12:26:42 | 只看該作者
請問可以分享一下修改過後的程式嘛~? 謝謝
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-9-30 15:19 , Processed in 0.444834 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表