// test script // Drive a Motor controller L298N //IN1 IN2 : TTL Compatible Inputs of the Bridge A //In3 In4 :TTL Compatible Inputs of the Bridge B. //ENA ENB:TTL Compatible Enable Input: the L state disables the //bridge A(enable A) and/or the bridge B (enable B). #define ENA 8 #define IN1 9 #define IN2 10 #define IN3 11 #define IN4 12 #define ENB 13 void setup() { // put your setup code here, to run once: pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENB, OUTPUT); digitalWrite(ENA, HIGH); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(ENB, HIGH); } void loop() { // put your main code here, to run repeatedly: engage(); for (int i = 0 ; i < 50; i++ ) { //waveDriveOneFaseOn(); //waveDriveTwoFaseOn(); halfStep(); } delay(10); disengage(); delay(2000); } void engage() { digitalWrite(ENA, HIGH); digitalWrite(ENB, HIGH); } void disengage() { digitalWrite(ENA, LOW); digitalWrite(ENB, LOW); } void waveDriveTwoFaseOn() { //State sequence and output waveforms for the two phase on sequence // only four steps for one turn // 0101 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); delayMicroseconds(1000); //1001 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); delayMicroseconds(1000); //1010 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); delayMicroseconds(1000); //0110 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); delayMicroseconds(1000); } void halfStep() { //101011 digitalWrite(ENA, HIGH); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //000011 digitalWrite(ENA, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); digitalWrite(ENB, HIGH); //110011 digitalWrite(ENA, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //110000 digitalWrite(ENA, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(ENB, LOW); delayMicroseconds(1000); //110101 digitalWrite(ENA, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //000101 digitalWrite(ENA, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //101101 digitalWrite(ENA, HIGH); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //101000 digitalWrite(ENA, HIGH); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(ENB, LOW); delayMicroseconds(1000); } void waveDriveOneFaseOn() { //000011 digitalWrite(ENA, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //110000 digitalWrite(ENA, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(ENB, LOW); delayMicroseconds(1000); //000101 digitalWrite(ENA, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); digitalWrite(ENB, HIGH); delayMicroseconds(1000); //101000 digitalWrite(ENA, HIGH); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(ENB, LOW); delayMicroseconds(1000); }