int motorPin1 = 2; int motorPin2 = 3; int motorPin3 = 4; int motorPin4 = 5; int spinDelay = 25; int spinAmount = 220; int motorState = 0; boolean motorDirection = true; int redLight = 6; int greenLight = 8; int buttonPin = 12; // the pin that the pushbutton is attached to int buttonState = 0; // current state of the button void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(redLight, OUTPUT); pinMode(greenLight, OUTPUT); pinMode(buttonPin, INPUT); Serial.begin(9600); digitalWrite(greenLight, HIGH); digitalWrite(redLight, LOW); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { buttonPushed(); } } void buttonPushed() { digitalWrite(greenLight, LOW); digitalWrite(redLight, HIGH); for (int i = 0; i < spinAmount; i++) { spinMotor(); delay(spinDelay); } motorDirection = !motorDirection; // reset state: motor pins low to conserve battery, green light on, red light off digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); digitalWrite(greenLight, HIGH); digitalWrite(redLight, LOW); } void spinMotor() { if (motorDirection) { motorState++; } else { motorState--; } if (motorState <= 1) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); if (!motorDirection) { motorState = 9; } } if (motorState == 2) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } if (motorState == 3) { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); } if (motorState == 4) { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } if (motorState == 5) { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); } if (motorState == 6) { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); } if (motorState == 7) { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); } if (motorState >= 8) { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); if (motorDirection) { motorState = 0; } } }