got battery voltage measurement working + used
diff --git a/frc971/input/sensor_receiver.cc b/frc971/input/sensor_receiver.cc
index b44bb8d..7648db8 100644
--- a/frc971/input/sensor_receiver.cc
+++ b/frc971/input/sensor_receiver.cc
@@ -48,21 +48,26 @@
 }
 
 // Translates values from the ADC into voltage.
-// TODO(brian): Fix this.
+// TODO(brian): Tune this to the actual hardware.
 double adc_translate(uint16_t in) {
   static const double kVcc = 5;
-  //static const double kR1 = 5, kR2 = 6.65;
+  static const double kR1 = 5, kR2 = 6.65;
   static const uint16_t kMaximumValue = 0x3FF;
-  return (kVcc * static_cast<double>(in) / static_cast<double>(kMaximumValue));
+  const double raw =
+      (kVcc * static_cast<double>(in) / static_cast<double>(kMaximumValue));
+  return (raw * (kR1 + kR2) - (kVcc / 2) * kR2) / kR1;
 }
 
 double gyro_translate(int64_t in) {
   return in / 16.0 / 1000.0 / (180.0 / M_PI);
 }
 
-double battery_translate(uint16_t in) {
-  static const double kDividerBig = 98.9, kDividerSmall = 17.8;
-  return adc_translate(in) * kDividerBig / kDividerSmall;
+double battery_translate(uint16_t in_high, uint16_t in_low) {
+  const double high = adc_translate(in_high), low = adc_translate(in_low);
+  static const double kDividerBig = 5.55, kDividerSmall = 2.66;
+  static const double kSensorVcc = 5.0;
+  return (high - low) * (kDividerBig + kDividerSmall) / kDividerSmall +
+         kDividerBig / kDividerSmall * kSensorVcc;
 }
 
 double sonar_translate(uint32_t in) {
@@ -179,7 +184,8 @@
       .right_shifter_position(hall_translate(constants::GetValues().right_drive,
                                              data->main.low_right_drive_hall,
                                              data->main.high_right_drive_hall))
-      .battery_voltage(battery_translate(data->main.battery_voltage))
+      .battery_voltage(battery_translate(data->main.battery_voltage_high,
+                                         data->main.battery_voltage_low))
       .Send();
 
   {