Hello!
I want to start off by saying i'm a total noob in way over my head.
I'm controlling (learning how) a clock I designed with 9x 28byj-48 - ULN2003 1x NEMA 17 with an Arduino MEGA.
I will someday use limit switches for each motor. I'm trying to simplify anything I can to continue testing the mechanical parts associated with the motors.
Long story short I would like to position each motor individually via serial to the correct starting position - Then start the program
Below is a program I found to control 1 motor. How hard will it be to modify this to control my 9 motors? I could not find an example with 2 motors otherwise I'd be able to hack it together. I also can't get negative values to work.
Feel free to recommend different styles or programs then what I have mentioned.
//define pin numbers
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int ang = 0;
//for the delay
int mils = 1;
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Read input from serial Monitor if available
if (Serial.available()) {
ang = Serial.parseInt();
Serial.println("Read " + String(ang) + " degrees");
rotate(ang);
}
}
void rotate(int angle)
{
int numberOfRounds = (int) angle * 1.42222; // angle*512/360
for (int i = 0; i < numberOfRounds; i++) {
//1000
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(mils);
//1100
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(mils);
//0100
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(mils);
//0110
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(mils);
//0011
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(mils);
//0010
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(mils);
//0001
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(mils);
//1001
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(mils);
}
// Switch off all phases
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
Thank you in advanced,
-Grant