Arduino L293D电机驱动模块四轮驱动程序
·
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);
}
}
更多推荐
所有评论(0)