2020年1月21日火曜日

Arduino Challenge03

Control 2 DC motors using JoyStick

Control 2 DC motors using JoyStick



/*
ChallengeMotor5
Control 2 DC motors using JoyStick And Volume
2019/12/22 Start
 */

int MotorPinA=12;
int MotorSpeedPinA=10;
int MotorBrakePinA=9;

int MotorPinB=13;
int MotorSpeedPinB=11;
int MotorBrakePinB=8;

int MotorSpeedA=255;
int MotorSpeedB=255;

int SwitchPin =2 ; // digital pin connected to switch output
int joystick_x = A0 ; // analog pin connected to X output
int joystick_y = A1 ; // analog pin connetcte to Y outpu
int pos_x=0;
int pos_y=0;
int btState=0;

void setup()
{
  // motor A pin assignment
  pinMode(MotorPinA,OUTPUT);
  pinMode(MotorSpeedPinA,OUTPUT);
  pinMode(MotorBrakePinA,OUTPUT);
  // motor B pin assignment
  pinMode(MotorPinB,OUTPUT);
  pinMode(MotorSpeedPinB,OUTPUT);
  pinMode(MotorBrakePinB,OUTPUT);
  // joystick pin assignment
  pinMode(SwitchPin,INPUT);
  pinMode(joystick_x,INPUT);
  pinMode(joystick_y,INPUT); 
}

//PushButton Forward
void MotorForward(void)
  {
  digitalWrite(MotorPinA,LOW);
  digitalWrite(MotorBrakePinA,LOW);
  analogWrite(MotorSpeedPinA,MotorSpeedA);
  digitalWrite(MotorPinB,HIGH);
  digitalWrite(MotorBrakePinB,LOW);
  analogWrite(MotorSpeedPinB,MotorSpeedB);
  }

//PushButton Back
void MotorBack(void)
  {
  digitalWrite(MotorPinA,HIGH);
  digitalWrite(MotorBrakePinA,LOW);
  analogWrite(MotorSpeedPinA,MotorSpeedA);
  digitalWrite(MotorPinB,LOW);
  digitalWrite(MotorBrakePinB,LOW);
  analogWrite(MotorSpeedPinB,MotorSpeedB);
  }

//PushButton TurnR
void MotorTurnR(void)
  {
  digitalWrite(MotorPinA,HIGH);
  digitalWrite(MotorBrakePinA,LOW);
  analogWrite(MotorSpeedPinA,MotorSpeedA);
  digitalWrite(MotorPinB,HIGH);
  digitalWrite(MotorBrakePinB,LOW);
  analogWrite(MotorSpeedPinB,MotorSpeedB);
  }

//PushButton TurnL
void MotorTurnL(void)
  {
  digitalWrite(MotorPinA,LOW);
  digitalWrite(MotorBrakePinA,LOW);
  analogWrite(MotorSpeedPinA,MotorSpeedA);
  digitalWrite(MotorPinB,LOW);
  digitalWrite(MotorBrakePinB,LOW);
  analogWrite(MotorSpeedPinB,MotorSpeedB);
  }

void MotorStop(void)
  {
    digitalWrite(MotorBrakePinA,HIGH);
    digitalWrite(MotorBrakePinB,HIGH);
    analogWrite(MotorSpeedPinA,0);
    analogWrite(MotorSpeedPinB,0);
  }

void loop()
{
  btState=digitalRead(SwitchPin);
  if(btState==HIGH)
  {
    MotorStop();
  }

  pos_x=analogRead(joystick_x);
  pos_y=analogRead(joystick_y);

  if(pos_y<400)
  {
    MotorForward();
  }

  else if (pos_y>600)
  {
    MotorBack();
  }

  else if (pos_x>600)
  {
    MotorTurnR();
  }

  else if (pos_x<400)
  {
    MotorTurnL();
  }

  else if ((pos_y>400)&&(pos_y<600))
  {
    MotorStop();
  }






}

0 件のコメント:

コメントを投稿