here is the code that worked...then I added a reset button, switched the servo for a second stepper...
#include <Servo.h>
#include <Stepper.h>
const int BLACK_BUTTON_PIN = A2;
const int RED_BUTTON_PIN = A3;
const int UP_DOWN_MOTOR_PIN = 10;
const int DRIVE_MOTOR_PIN_1 = 2;
const int DRIVE_MOTOR_PIN_2 = 3;
const int DRIVE_MOTOR_PIN_3 = 4;
const int DRIVE_MOTOR_PIN_4 = 5;
Servo upDownMotor;
int blackButtonValue = 0;
int redButtonValue = 0;
int motorPosition = 0;
;
int redDirection = 0;
void setup() {
pinMode(BLACK_BUTTON_PIN, INPUT);
pinMode(RED_BUTTON_PIN, INPUT);
pinMode(DRIVE_MOTOR_PIN_1, OUTPUT);
pinMode(DRIVE_MOTOR_PIN_2, OUTPUT);
pinMode(DRIVE_MOTOR_PIN_3, OUTPUT);
pinMode(DRIVE_MOTOR_PIN_4, OUTPUT);
upDownMotor.attach(UP_DOWN_MOTOR_PIN);
redDirection = -1; // -1 means red button goes back, 1 means red button goes forward
analogReference(DEFAULT);
delay(500);
}
void loop() {
// check black button first - value will be 0 - 1023
blackButtonValue = analogRead(BLACK_BUTTON_PIN);
// max is 1023, we'll respond to anything greater than 1000
if (blackButtonValue > 1000)
{
// black button means move the motor down one cam and go forward
// increment the motor position
motorPosition += 28;
// move the drive gear down
upDownMotor.write(motorPosition);
delay(15);
// turn the page forward
for (int i = 0; i < 256; i++)
{
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
}
// red button press after black button press
// should go backward no matter what
redDirection = -1;
}
// now check red button - value will be 0 - 1023
redButtonValue = analogRead(RED_BUTTON_PIN);
// max is 1023, we'll respond to anything greater than 1000
if (redButtonValue > 1000)
{
// red button means go one page in the opposite direction of
// the last direction you went in, whatever that was
if (redDirection > 0)
{
for (int i = 0; i < 256; i++)
{
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
}
}
else
{
for (int i = 0; i < 256; i++)
{
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, LOW);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, LOW);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, HIGH);
delay(2);
digitalWrite(DRIVE_MOTOR_PIN_1, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_2, HIGH);
digitalWrite(DRIVE_MOTOR_PIN_3, LOW);
digitalWrite(DRIVE_MOTOR_PIN_4, LOW);
delay(2);
}
}
// reverse red button motor direction to prepare
// for a subsequent red button press
if (redDirection > 0)
{
redDirection = -1;
}
else
{
redDirection = 1;
}
}
}