Arduino Nano + L298N

//源文件
class Motor
{
public:
  Motor(int in1, int in2, int in3, int in4, int ena, int enb)
  {
    _pin1 = in1;
    _pin2 = in2;
    _pin3 = in3;
    _pin4 = in4;
    _pina = ena;
    _pinb = enb;
    pinMode(_pin1, OUTPUT);
    pinMode(_pin2, OUTPUT);
    pinMode(_pin3, OUTPUT);
    pinMode(_pin4, OUTPUT);
    //让控制端都为高电平,电机保持不动。
    digitalWrite(_pin1, HIGH);
    digitalWrite(_pin2, HIGH);
    digitalWrite(_pin3, HIGH);
    digitalWrite(_pin4, HIGH);
    //可能导致马达咔咔响
    //analogWrite(_pina, 100);
    //analogWrite(_pinb, 100);
  }
  ~Motor(){}
   
  void Forward()
  {
    _mRight(_pin1, _pin2);
    _mRight(_pin3, _pin4);
  }
  void Back()
  {
    _mLeft(_pin1, _pin2);
    _mLeft(_pin3, _pin4);
  }
  void Left()
  {
    _mStop(_pin1, _pin2);
    _mRight(_pin3, _pin4);
  }
  void Right()
  {
    _mLeft(_pin1, _pin2);
    _mStop(_pin3, _pin4);
  }
  void Stop()
  {
    _mStop(_pin1, _pin2);
    _mStop(_pin3, _pin4);  
  }
  void SetSpeed(int pinPWM, int value)
  {
    analogWrite(pinPWM, value);
  }
  void SetAllSpeed(int value)
  {
    SetSpeed(_pina, value);
    SetSpeed(_pinb, value);
  }
 
public:
  void _mRight(int pin1,int pin2)//当in1和in2中有一个接高位时,电机会向某一方向转动
  {
    digitalWrite(pin1,HIGH);
    digitalWrite(pin2,LOW);
  }
  void _mLeft(int pin1,int pin2)//同上
  {
    digitalWrite(pin1,LOW);
    digitalWrite(pin2,HIGH);
  }
  void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
  {
    digitalWrite(pin1,HIGH);
    digitalWrite(pin2,HIGH);
  }
public:  
  int _pin1;
  int _pin2;
  int _pin3;
  int _pin4;
  int _pina;
  int _pinb;
};

String dataIn = "";

// Arduino NANO
// in1:D3,
// in2:D4,
// in3:D7,
// in4:D8,
// enableA:D5,
// enableB:D6
Motor moto(3, 4, 7, 8, 5, 6);
 
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  /*
  //可能导致马达咔咔响
  moto.SetAllSpeed(32);
  while(Serial.available())
  {
    dataIn += char(Serial.read());
    delay(2);
  }
  if(dataIn.length()>0)
  {
    Serial.println(dataIn);
    if( dataIn.equals("forward") )
    {
      Serial.println("Forward");
      moto.Forward();
      delay(1500);
      moto.Stop();
    }
    else if( dataIn.equals("back") )
    {
      Serial.println("Back");
      moto.Back();
      delay(1500);
      moto.Stop();
    }
    else if( dataIn.equals("left") )
    {
      Serial.println("Left");
      moto.Left();
      delay(1500);
      moto.Stop();
    }
    else if( dataIn.equals("right") )
    {
      Serial.println("Right");
      moto.Right();
      delay(1500);
      moto.Stop();
    }
    else
    {
      Serial.println("Stop");
      moto.Stop();
      dataIn = "";
    }
    delay(500);
  }
  */
 
  //可能导致马达咔咔响
  //moto.SetAllSpeed(32);
  Serial.println("setSpeed");
  delay(1000);
  Serial.println("Forward");
  moto.Forward();
  delay(2000);
  Serial.println("Back");
  moto.Back();
  delay(2000);
  Serial.println("Left");
  moto.Left();
  delay(2000);
  Serial.println("Right");
  moto.Right();
  delay(2000);
 
}

 

添加新评论