I am trying to add a delay between two motors operating i.e if one motor is operating wait one second then start the next and vice versa, I am using an H Bridge to change the direction of the motors..
const int switchPin = 2; // switch input
const int motor1Pin = 3; // H-bridge leg 1 (pin 2, 1A)
const int motor2Pin = 4; // H-bridge leg 2 (pin 7, 2A)
const int enablePin = 9; // H-bridge enable pin
const int motor3Pin = 5; //H-bridge leg 1
const int motor4Pin = 6; // H-Bridge leg 2
const int enablePin1 = 8;
int enaablePin1 = LOW;
long previousmillis = 0;
long interval = 1000;
void setup() {
// set the switch as an input:
pinMode(switchPin, INPUT);
// set all the other pins you're using as outputs:
pinMode(motor1Pin, OUTPUT);
pinMode(motor2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode (motor3Pin, OUTPUT);
pinMode(motor4Pin, OUTPUT);
// set enablePin high so that motor can turn on:
digitalWrite(enablePin, HIGH);
}
void loop() {
unsigned long currentmillis = millis();
if(currentmillis - previousmillis > interval) {
previousmillis = currentmillis;
if (enablePin1 == LOW);
else
interval;
digitalWrite(enablePin1, HIGH);
}
// if the switch is high, motor will turn on one direction:
if (digitalRead(switchPin) == HIGH) {
digitalWrite(motor1Pin, LOW); // set leg 1 of the H-bridge low
digitalWrite(motor2Pin, HIGH); // set leg 2 of the H-bridge high
digitalWrite(motor3Pin, LOW);
digitalWrite(motor4Pin, HIGH);
}
// if the switch is low, motor will turn in the other direction:
else {
digitalWrite(motor1Pin, HIGH); // set leg 1 of the H-bridge high
digitalWrite(motor2Pin, LOW); // set leg 2 of the H-bridge low
digitalWrite(motor3Pin, HIGH);
digitalWrite(motor4Pin, LOW);
}
}
I have tried adapting the blink without delay code in Arduino examples with the h-bridge code I am using which is as follows
[const int switchPin = 2; // switch input
const int motor1Pin = 3; // H-bridge leg 1 (pin 2, 1A)
const int motor2Pin = 4; // H-bridge leg 2 (pin 7, 2A)
const int enablePin = 9; // H-bridge enable pin
const int motor3Pin = 5; //H-bridge leg 1
const int motor4Pin = 6; // H-Bridge leg 2
const int enablePin1 = 8;
void setup() {
// set the switch as an input:
pinMode(switchPin, INPUT);
// set all the other pins you're using as outputs:
pinMode(motor1Pin, OUTPUT);
pinMode(motor2Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode (motor3Pin, OUTPUT);
pinMode(motor4Pin, OUTPUT);
pinMode(enablePin1, OUTPUT);
// set enablePin high so that motor can turn on:
digitalWrite(enablePin, HIGH);
digitalWrite(enablePin1, HIGH);
}
void loop() {
// if the switch is high, motor will turn on one direction:
if (digitalRead(switchPin) == HIGH) {
digitalWrite(motor1Pin, LOW); // set leg 1 of the H-bridge low
digitalWrite(motor2Pin, HIGH); // set leg 2 of the H-bridge high
digitalWrite(motor3Pin, LOW);
digitalWrite(motor4Pin, HIGH);
}
// if the switch is low, motor will turn in the other direction:
else {
digitalWrite(motor1Pin, HIGH); // set leg 1 of the H-bridge high
digitalWrite(motor2Pin, LOW); // set leg 2 of the H-bridge low
digitalWrite(motor3Pin, HIGH);
digitalWrite(motor4Pin, LOW);
}
}/code]
well to be honest I am not too sure? I tend to learn by trail and error and if I cant seem to work something out I ask here... Then I learn something new from the advice I get here..
You have code that runs two motors at the same time when the switch is pressed, in one direction, and in the other direction when the switch is not pressed. If you want one motor to start after the other, delay() is the simplest.
If you want to avoid delay, you need to think about a state machine. You have 4 states - one motor running forward, two motors running forward, one motor running backwards, and two motors running backwards. Depending on the state of the switch, you transition to one of two states. Depending on how long it has been since the last transition, you might need to transition to one of the other two states.
Finally, depending on the state, you activate certain motors certain ways.
I tried that earlier and couldnt get it to work the way I wanted? have tried it again and now its doing what I want? perhaps I put the delay command in the wrong place last time? Thanks...