Arduino L293D电机驱动模块的库下载了好几个,学不会,研究了一下74HC595和L293D的连接方式,DIY了一个。PWM没写,旋转方向不对的话,调换电机两根接线。


#define RCK 12
#define SCK 4
#define DS 8
#define MR 2
#define OE 7
#define M1PWM 11
#define M2PWM 3
#define M2FORWARD 0X02
#define M2BACKWARD 0X10
#define M1FORWARD 0X04
#define M1BACKWARD 0X08
#define M3FORWARD 0X80
#define M3BACKWARD 0X20
#define M4FORWARD 0X40
#define M4BACKWARD 0X01
#define M4STOP 0XBD
#define M3STOP 0X5F
#define M2STOP 0XEC
#define M1STOP 0XE2
#define GO '1'
#define BACK '2'
#define LEFT '3'
#define RIGHT '4'
#define STOP '0'
unsigned char status;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(RCK,OUTPUT);
  pinMode(SCK,OUTPUT);
  pinMode(DS,OUTPUT);
  pinMode(MR,OUTPUT);
  pinMode(OE,OUTPUT);
  digitalWrite(SCK,LOW);
  digitalWrite(RCK,LOW);
  digitalWrite(MR,HIGH);
  digitalWrite(OE,LOW);
  Serial.begin(115200);
}

void sendByte(unsigned char b)
{
  digitalWrite(RCK,LOW);
  for(int i=0;i<8;i++){
    digitalWrite(SCK,LOW);


    digitalWrite(DS,b&(0x80>>i));
  
    digitalWrite(SCK,HIGH);
    
  }
  
  digitalWrite(RCK,HIGH);
  
  
}

void MotorCtrl(char w)
{
  
  switch(w){
    case GO:
      status=M1FORWARD | M2FORWARD;
      Serial.println("forward");
      break;
    case BACK:
      status=M1BACKWARD | M2BACKWARD;
      Serial.println("backward");
      break;
    case LEFT:
       status=M1BACKWARD | M2FORWARD;
       Serial.println("turn left");
       break;
    case RIGHT:
        status=M2BACKWARD | M1FORWARD;
        Serial.println("turn right");
        break;
    case STOP:
        status=status & M1STOP & M2STOP;
        break;
  }
  sendByte(status);
}
void loop() {
  // put your main code here, to run repeatedly:
  char c;
  if(Serial.available()>0){
    c=Serial.read();
    MotorCtrl(c);
  }
  
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐