     // but the SparkFun example Arduino code does nothing with the pin that is mapped/connected to it.
     pinMode(PIN_EN, INPUT);
     pinMode(PIN_CS, INPUT);
+    
+    pinMode(PIN_PROGRAM_SWITCH_1, INPUT_PULLUP);
+    pinMode(PIN_PROGRAM_SWITCH_2, INPUT_PULLUP);
 
     motor1State = new MotorState();
-    currentProgram = new Program();
-    
+    for (int i=0; i<2; i++) {
+        for (int j=0; j<2; j++) {
+            programs[i][j] = new Program();
+        }
+    }
+
     // on full back and forth (4 seconds total)
-    currentProgram->addProgramStep(new ProgramStep(FORWARD, 1023, 2000));
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 1023, 2000));
+    programs[0][0]->addProgramStep(new ProgramStep(FORWARD, 1023, 2000));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 1023, 2000));
     // on lower power back and forth (6 seconds total)
-    currentProgram->addProgramStep(new ProgramStep(FORWARD, 550, 3000));
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 550, 3000));
+    programs[0][0]->addProgramStep(new ProgramStep(FORWARD, 550, 3000));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 550, 3000));
     // off for a few seconds
-    currentProgram->addProgramStep(new ProgramStep(BRAKEGND, 0, 2000));
+    programs[0][0]->addProgramStep(new ProgramStep(BRAKEGND, 0, 2000));
     // back and forth 3 times quick
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(FORWARD, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(FORWARD, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(FORWARD, 550, 250));
-    currentProgram->addProgramStep(new ProgramStep(REVERSE, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(FORWARD, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(FORWARD, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(FORWARD, 550, 250));
+    programs[0][0]->addProgramStep(new ProgramStep(REVERSE, 550, 250));
+    
+    programs[0][1]->addProgramStep(new ProgramStep(FORWARD, 800, 500));
+    programs[0][1]->addProgramStep(new ProgramStep(BRAKEGND, 0, 3000));
+
+    programs[1][0]->addProgramStep(new ProgramStep(BRAKEGND, 0, 1000));
+    programs[1][0]->addProgramStep(new ProgramStep(REVERSE, 800, 200));
+    programs[1][0]->addProgramStep(new ProgramStep(BRAKEGND, 0, 1000));
+    programs[1][0]->addProgramStep(new ProgramStep(FORWARD, 800, 200));
+
+    programs[1][1]->addProgramStep(new ProgramStep(BRAKEGND, 0, 10000));
+    programs[1][1]->addProgramStep(new ProgramStep(FORWARD, 800, 1000));
     
     // Initialize stopped/braked
     stopMotor();


MotorState *motor1State;

Program *currentProgram;

void setup()
{

            // continue the motor-sequence program
            digitalWrite(PIN_STATUS, HIGH);
            delay(UPDATE_INTERVAL);
            // Note: If these are though of as "bits", the boolean algebra is reversed
            // because the pins are initialized with the pullup enabled so "on" == LOW
            uint8_t programSwitch1 = (digitalRead(PIN_PROGRAM_SWITCH_1)) ? 0 : 1;
            uint8_t programSwitch2 = (digitalRead(PIN_PROGRAM_SWITCH_2)) ? 0 : 1;
            programs[programSwitch1][programSwitch2]->updateProgramState(motor1State);
            motor1State->updateMotorState();
        }
    }
