//#include <Coal_Basin_Signals.h>#include <Coal_Basin_Servo.h>#include <Coal_Basin_LEDs.h>#include <LCD_1602.h>#include <Coal_Basin_Buttons.h>unsigned int routes;Coal_Basin_Buttons button1(4,5,6);Coal_Basin_Buttons button2(7,8,9);LCD_1602 LCD;Coal_Basin_LEDs led;Coal_Basin_Servo servo1(0,290,250); //250 -->right to Silos 290 -> left to Basin ;Coal_Basin_Servo servo2(1,325,445); //325 right to wharfs 445 left to remainder of basin); Coal_Basin_Servo servo3(7,375,335); //375 Right to Wharf 1, 335 left to wharf 2. //after 16 November 335,375);//350,285); //350,200);Coal_Basin_Servo servo4(3,270,370); //270 left to basin 370 right to sidings); Coal_Basin_Servo servo5(4,350,240); //350 right to siding 1. 240 left to siding 2);Coal_Basin_Servo servo6(5,400,125); //400 right to coal 1 125 to Coal 2); //500,200); //450,225);Coal_Basin_Servo servo7(6,170,310); //170 left to station 310 right to coal area); //30 NovCoal_Basin_Servo servo8(15,250,319); //250 tocattle yard 315 to station ); //300); //note changeCoal_Basin_Servo servo9(8,200,350); //200 straight thru 350 to turntable);Coal_Basin_Servo servo10(12,250,350); //250 straight to lower eastside 350 turn left to coal basin);Coal_Basin_Servo servo11(10,335,175); //400,400); //255,335); //225 straight thru to lower eastside 335 - right to lower eastside centre and or station);Coal_Basin_Servo servo12(11,385,295); // 385 Right (station) 295 "left" (straight thru) lower eastside Coal_Basin_Servo servo13(12,250,350);Coal_Basin_Servo servo14(13,250,350);Coal_Basin_Servo servo15(14,250,350);Coal_Basin_Servo servo16(15,250,350);//Coal_Basin_Servo servo;//Coal_Basin_Signals sig;void display_route(int routes){ if (routes & SILOS) LCD.message(0,"Silos"); if (routes & WHARF1) LCD.message(0,"Wharf 1"); if (routes & WHARF2) LCD.message(0,"Wharf 2"); if (routes & SIDING1) LCD.message(0,"Siding 1"); if (routes & SIDING2) LCD.message(0,"Siding 2"); if (routes & COAL1) LCD.message(0,"Coal 1"); if (routes & COAL2) LCD.message(0,"Coal 2"); if (routes & YARD) LCD.message(0,"Yard"); if (routes & STATION) LCD.message(0,"Station"); if (routes & TURNTABLE) { if ((routes & (BASIN-1)) == TURNTABLE) LCD.message(0,"Turntable"); else LCD.message(" + TurnT"); } if (routes & BASIN) LCD.message(1,"Coal Basin"); if (routes & EASTSIDE1) LCD.message(1,"Lower Eastside 1"); if (routes & EASTSIDE2) LCD.message(1,"Lower Eastside 2"); if (routes & EASTSIDESTA) LCD.message(1,"Eastside Station");}unsigned int route_logic(unsigned int req){ if (req >= BASIN) routes = (routes & (BASIN-1)) + req; else if (req <= YARD) routes= (routes & (TURNTABLE + BASIN + EASTSIDE1 + EASTSIDE2)) + req; else if (req == STATION) routes = (routes & (BASIN + EASTSIDE1 + EASTSIDE2 +EASTSIDESTA)) + STATION; else if (req == TURNTABLE) routes = (routes & (~STATION)) | TURNTABLE; else routes = 0; //should not occur return routes; }//void the_signals(unsigned int ser, int dir){// sig.control_signals(ser,dir);// delay(20); //don't over write //}void fire_servos(unsigned int routes){ if (routes & SILOS) { servo1.do_servo(RIGHT); } if (routes & WHARF1) { servo1.do_servo(LEFT); servo2.do_servo(RIGHT); servo3.do_servo(RIGHT);} if (routes & WHARF2) { servo1.do_servo(LEFT); servo2.do_servo(RIGHT); servo3.do_servo(LEFT);} if (routes & SIDING1) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(RIGHT); servo5.do_servo(RIGHT);} if (routes & SIDING2) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(RIGHT); servo5.do_servo(LEFT);} if (routes & COAL1) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(LEFT); servo6.do_servo(RIGHT); servo7.do_servo(LEFT);} if (routes & COAL2) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(LEFT); servo6.do_servo(LEFT); servo7.do_servo(LEFT);} if (routes & YARD) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(LEFT); servo7.do_servo(RIGHT); servo8.do_servo(RIGHT);} if (routes & STATION) { servo1.do_servo(LEFT); servo2.do_servo(LEFT); servo4.do_servo(LEFT); servo7.do_servo(RIGHT); servo8.do_servo(LEFT); servo9.do_servo(LEFT);} if (routes & TURNTABLE) {servo9.do_servo(RIGHT);} if (routes & BASIN) {servo10.do_servo(LEFT);} if (routes & EASTSIDE1) {servo10.do_servo(RIGHT);servo11.do_servo(LEFT);} if (routes & EASTSIDE2) {servo10.do_servo(RIGHT);servo11.do_servo(RIGHT); servo12.do_servo(LEFT);} if (routes & EASTSIDESTA) {servo10.do_servo(RIGHT);servo11.do_servo(RIGHT); servo12.do_servo(RIGHT);}}/*void change_signals(unsigned int routes){ if (routes & SILOS) {sig.control_signals(signal1,RIGHT);} if (routes & WHARF1) {sig.control_signals(signal1,LEFT);sig.control_signals(signal2,RIGHT); sig.control_signals(signal3,RIGHT);} if (routes & WHARF2) {sig.control_signals(signal1,LEFT); sig.control_signals(signal2,RIGHT); sig.control_signals(signal3,LEFT);} if (routes & SIDING1) {sig.control_signals(signal1,LEFT);sig.control_signals(signal2,LEFT); sig.control_signals(signal4,RIGHT);sig.control_signals(signal5,RIGHT);} if (routes & SIDING2) {sig.control_signals(signal1,LEFT); sig.control_signals(signal2,LEFT); sig.control_signals(signal4,RIGHT); sig.control_signals(signal5,LEFT);} if (routes & COAL1) { sig.control_signals(signal1,LEFT); sig.control_signals(signal2,LEFT); sig.control_signals(signal4,LEFT); sig.control_signals(signal6,RIGHT); sig.control_signals(signal7,RIGHT);} if (routes & COAL2) { sig.control_signals(signal1,LEFT); sig.control_signals(signal2,LEFT); sig.control_signals(signal4,LEFT);sig.control_signals(signal6,RIGHT);sig.control_signals(signal7,LEFT);} if (routes & YARD) { sig.control_signals(signal1,LEFT); sig.control_signals(signal2,LEFT); sig.control_signals(signal4,LEFT); sig.control_signals(signal6,LEFT); sig.control_signals(signal8,RIGHT);} if (routes & STATION) { sig.control_signals(1,LEFT); sig.control_signals(2,LEFT); sig.control_signals(4,LEFT); sig.control_signals(6,LEFT); sig.control_signals(8,LEFT); sig.control_signals(signal9,LEFT);} if (routes & TURNTABLE) {sig.control_signals(signal9,RIGHT);} if (routes & BASIN) {sig.control_signals(signal10,LEFT);} if (routes & EASTSIDE1) {sig.control_signals(signal10,RIGHT);sig.control_signals(signal11,LEFT);} if (routes & EASTSIDE2) {sig.control_signals(signal10,RIGHT);sig.control_signals(signal11,RIGHT); sig.control_signals(signal12,LEFT);} if (routes & EASTSIDESTA) {sig.control_signals(signal10,RIGHT);sig.control_signals(signal11,RIGHT); sig.control_signals(signal12,RIGHT);}}*/void action(unsigned int request){ routes = route_logic(request); led.control_signals(routes); display_route(routes); fire_servos(routes); // change_signals(routes);}void setup() { LCD.begin( ); LCD.message("---Coal Basin---","--Route Select--"); button1.begin( ); button2.begin( ); led.begin( ); servo1.begin( ); servo2.begin( ); servo3.begin( ); servo4.begin( ); servo5.begin( ); servo6.begin( ); servo7.begin( ); servo8.begin( ); servo9.begin( ); servo10.begin( ); servo11.begin( ); servo12.begin( ); servo13.begin( ); servo14.begin( ); servo15.begin( ); servo16.begin( );// sig.begin( ); delay(500); routes = SILOS+EASTSIDE1; led.control_signals(routes); servo9.do_servo(LEFT); //not turntable servo11.do_servo(LEFT); //eastside 1// sig.control_signals(signal9,LEFT);// sig.control_signals(signal11,LEFT); delay(500); display_route(routes);}void loop() { static int last_request; unsigned int request = button1.get_route( ); if (!request) request = button2.get_route( ); if (request) { // Serial.println(request); if (request != last_request){ last_request = request; Serial.print("Request "); Serial.println(request); // LCD.message(0,request); //early testing only action(request); } } }-------------------