added support for the hanger pistons
diff --git a/frc971/input/JoystickReader.cc b/frc971/input/JoystickReader.cc
index b40643e..aeb8801 100644
--- a/frc971/input/JoystickReader.cc
+++ b/frc971/input/JoystickReader.cc
@@ -23,6 +23,7 @@
 using ::frc971::control_loops::index_loop;
 using ::frc971::control_loops::shooter;
 using ::frc971::control_loops::angle_adjust;
+using ::frc971::control_loops::hangers;
 
 namespace frc971 {
 
@@ -167,6 +168,14 @@
       index_goal.Send();
       shooter_goal.Send();
     }
+
+    static int hanger_cycles = 0;
+    if (Pressed(2, 13)) {
+      ++hanger_cycles;
+    } else {
+      hanger_cycles = 0;
+    }
+    hangers.MakeWithBuilder().set(hanger_cycles >= 10).Send();
   }
 };
 
diff --git a/frc971/output/AtomMotorWriter.cc b/frc971/output/AtomMotorWriter.cc
index 36ee97e..8431fa7 100644
--- a/frc971/output/AtomMotorWriter.cc
+++ b/frc971/output/AtomMotorWriter.cc
@@ -21,6 +21,7 @@
 using ::frc971::control_loops::shooter;
 using ::frc971::control_loops::index_loop;
 using ::frc971::control_loops::angle_adjust;
+using ::frc971::control_loops::hangers;
 
 namespace frc971 {
 namespace output {
@@ -91,6 +92,12 @@
       AddMotor(TALON, 7, 0);
       LOG(WARNING, "index not new enough\n");
     }
+
+    hangers.FetchLatest();
+    if (hangers.IsNewerThanMS(kOutputMaxAgeMS)) {
+      AddSolenoid(4, hangers->set);
+      AddSolenoid(5, hangers->set);
+    }
   }
 };
 
diff --git a/frc971/queues/Piston.q b/frc971/queues/Piston.q
index 0819567..5811958 100644
--- a/frc971/queues/Piston.q
+++ b/frc971/queues/Piston.q
@@ -5,3 +5,4 @@
 };
 
 queue Piston shifters;
+queue Piston hangers;