- MTADRL293D 馬達控制板
- HC-05 藍芽模組
做法:
- 參考這裡將HC-05 藍芽模組設定好,接上VCC/GND,並將HC-05的TX/RX接到Leonardo的RX/TX
- 將MTADRL293D插上Leonardo
- 將MTADRL293D的
M1/M4(在這張版子上這兩顆馬達吃BATT的電,另外兩顆吃5V)接到車子左右兩顆馬達的正負極 - MTADRL293D接上電池
車身/履帶/減速機: 田宮 工作樂系列
範例程式碼:
const int DS = 8;
const int OE = 7;
const int SHCP = 4;
const int STCP = 12;
void setup(){
Serial.begin(115200);
while (!Serial){
;
}
delay(1000);
Serial.println("=== setup() ===");
pinMode(DS, OUTPUT);
pinMode(OE, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
digitalWrite(DS, LOW);
digitalWrite(OE, HIGH); //Q0~Q7 維持高阻抗
digitalWrite(SHCP, LOW);
digitalWrite(STCP, LOW);
}
void loop(){
Serial.println("=== loop() ===");
delay(1000);
//serial data input into serial register
//Q0~Q7: 00001111
Serial.println("##serial data input into serial register");
digitalWrite(DS, HIGH);//Q7
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, HIGH);//Q6
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, HIGH);//Q5
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, HIGH);//Q4
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, LOW);//Q3
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, LOW);//Q2
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, LOW);//Q1
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
digitalWrite(DS, LOW);//Q0
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
delayMicroseconds(1);
delay(1000);
//serial register -> storage register
Serial.println("##serial register -> storage register");
digitalWrite(STCP, HIGH);
delay(10);
digitalWrite(STCP, LOW);
delay(10);
delay(1000);
//storage register -> Q0~Q7
Serial.println("##storage register -> Q0~Q7");
digitalWrite(OE, LOW);
delay(1000);
Serial.println("##finish");
while(true){
;
}
}
#include "MTADRL293D.h"
MTADRL293D l293d;
void setup(){
Serial.begin(115200);
while (!Serial){
;
}
delay(5000);
Serial.println("=== loop() ===");
l293d.enableDbg(true);
l293d.begin();
l293d.setMotorDir(MTADRL293D_M1, MTADRL293D_DIR_POS);
l293d.setMotorDir(MTADRL293D_M2, MTADRL293D_DIR_POS);
l293d.setMotorDir(MTADRL293D_M3, MTADRL293D_DIR_POS);
l293d.setMotorDir(MTADRL293D_M4, MTADRL293D_DIR_POS);
l293d.setMinMotorSpeed(MTADRL293D_M1, 100);
l293d.setMinMotorSpeed(MTADRL293D_M2, 100);
l293d.setMinMotorSpeed(MTADRL293D_M3, 100);
l293d.setMinMotorSpeed(MTADRL293D_M4, 100);
l293d.setMotorSpeed(MTADRL293D_M1, 0);
l293d.setMotorSpeed(MTADRL293D_M2, 0);
l293d.setMotorSpeed(MTADRL293D_M3, 0);
l293d.setMotorSpeed(MTADRL293D_M4, 0);
}
void loop(){
Serial.println("=== loop() ===");
Serial.println("=== m1 pos 100");
l293d.setMotorDir(MTADRL293D_M1, MTADRL293D_DIR_POS);
l293d.setMotorSpeed(MTADRL293D_M1, 100);
delay(3000);
Serial.println("=== m1 0");
l293d.setMotorSpeed(MTADRL293D_M1, 0);
delay(1000);
Serial.println("=== m1 neg 100");
l293d.setMotorDir(MTADRL293D_M1, MTADRL293D_DIR_NEG);
l293d.setMotorSpeed(MTADRL293D_M1, 100);
delay(3000);
Serial.println("=== m1 0");
l293d.setMotorSpeed(MTADRL293D_M1, 0);
delay(1000);
Serial.println("=== m3 pos 100");
l293d.setMotorDir(MTADRL293D_M3, MTADRL293D_DIR_POS);
l293d.setMotorSpeed(MTADRL293D_M3, 100);
delay(3000);
Serial.println("=== m3 0");
l293d.setMotorSpeed(MTADRL293D_M3, 0);
delay(1000);
Serial.println("=== m3 neg 100");
l293d.setMotorDir(MTADRL293D_M3, MTADRL293D_DIR_NEG);
l293d.setMotorSpeed(MTADRL293D_M3, 100);
delay(3000);
Serial.println("=== m3 0");
l293d.setMotorSpeed(MTADRL293D_M3, 0);
delay(1000);
}