/* O scale model railroad - Tornado Animation Project * * A toggle switch is used to connect 5 volt power from L298N module to the Arduino. * This is important since we cannot apply 5 volts when USB cable is connected to computer * This routine uses a Green LED when the Toggle switch is turned to ON position. * While Toggle switch turned OFF, Yellow LED stays ON * * This program controls a Tornado rotation for movement * * The latest reviusion Aug 6, 2017 incorporates a latching relay circuit. This allows the animation * to start with a momentary switch to latch the 12 vdc main power source at the H bridge supply wire. * As long as Pin 4 stays high the animation routine stays on. Turning this pin low shuts down the system. * * An output on Pin 12 sends signal to relay to turn on "MOVEMENT" arduino module * * DWBolt July 25, 2017 -- revised Aug 27, 2017 */ const int ledPinyellow = 13; // set pin 10 as yellow led for no 5 volt power const int ledPingreen = 11; // set pin 11 as green led when 5 volts applied from L298N module const int SwitchPin1 = 2; // set pin 2 as 5 volt when switch turned on int switch_state = 0; int MotorSpeed1; int val; // Power Control const int main_power = 4; // set pin 4 high to maintain power to the animation sequence const int Power_Led = 5; // set pin 5 as output for Green Power LED // Movement Arduino Power Control const int movement_power = 12; // set Pin 12 as output control to Movement Arduino Controller Relay // Tornado Rotation Motor A int enA = 9; int in1 = 8; int in2 = 7; void setup() { pinMode(main_power, OUTPUT); // sets Arduino board pin to be output to Main 12vdc Power relay digitalWrite(main_power, HIGH); // Turn ON Control Power 12 vdc (set to LOW shuts down the system) delay(2000); // give 2 seconds for relay to pickup digitalWrite(Power_Led, LOW); // Turn on Green POWER Led pinMode(ledPinyellow, OUTPUT); // set led as output pinMode(ledPingreen, OUTPUT); // set led as output pinMode(SwitchPin1, INPUT); // set switch as input // Set all the motor control pins to outputs on Arduino board pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); // Set Movement Controller output pin to OUTPUT pinMode(movement_power, OUTPUT); // sets Arduino board pin to be output to Movement Controller relay // Testing if 5 volt power switch turned ON only used when computer disconnected // WARNING!!! Do NOT turn on power switch when USB cable connected to computer switch_state = digitalRead(SwitchPin1); // reads voltage high when switch is on if (switch_state == LOW) { // is the 5 volt power switch turned off? digitalWrite(ledPingreen, LOW); // turn off green LED when switch OFF digitalWrite(ledPinyellow,HIGH); // turn ON yellow led delay(500); } else { // turn LED OFF: digitalWrite(ledPinyellow, LOW); } if (switch_state == HIGH) { // is the 5 volt power switch turned ON? digitalWrite(ledPingreen, HIGH); // turn ON green LED when switch ON digitalWrite(ledPinyellow,LOW); // turn OFF yellow led delay(500); } else { // turn LED ON: digitalWrite(ledPinyellow, HIGH); } } // END SETUP void loop() { // Set Motor A clockwise digitalWrite(in1, HIGH); digitalWrite(in2, LOW); MotorSpeed1 = 250; analogWrite(enA, MotorSpeed1); // starts motor to turn // Turn on "MOVEMENT" ARDUINO CONTROLLER delay(2000); // Wait 2 seconds before starting Movement Arduino Board digitalWrite(movement_power, HIGH); // Turn on Movement Arduino Board // Check for animation completion and then shut down system val = analogRead(A0); if (val == 0) { delay(2000); // wait 2 seconds digitalWrite(main_power, LOW); // Turn OFF SYSTEM 12 vdc POWER } } // END OF VOID LOOP