aboutsummaryrefslogtreecommitdiff
path: root/app/src/com/google/android/DemoKit/InputController.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/com/google/android/DemoKit/InputController.java')
-rw-r--r--app/src/com/google/android/DemoKit/InputController.java146
1 files changed, 146 insertions, 0 deletions
diff --git a/app/src/com/google/android/DemoKit/InputController.java b/app/src/com/google/android/DemoKit/InputController.java
new file mode 100644
index 0000000..04624ea
--- /dev/null
+++ b/app/src/com/google/android/DemoKit/InputController.java
@@ -0,0 +1,146 @@
+package com.google.android.DemoKit;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+
+import android.graphics.drawable.Drawable;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class InputController extends AccessoryController {
+ private TextView mTemperature;
+ private TextView mLightView;
+ private TextView mLightRawView;
+ private JoystickView mJoystickView;
+ ArrayList<SwitchDisplayer> mSwitchDisplayers;
+ private final DecimalFormat mLightValueFormatter = new DecimalFormat("##.#");
+ private final DecimalFormat mTemperatureFormatter = new DecimalFormat(
+ "###¼");
+
+ InputController(DemoKitActivity hostActivity) {
+ super(hostActivity);
+ mTemperature = (TextView) findViewById(R.id.tempValue);
+ mLightView = (TextView) findViewById(R.id.lightPercentValue);
+ mLightRawView = (TextView) findViewById(R.id.lightRawValue);
+ mJoystickView = (JoystickView) findViewById(R.id.joystickView);
+ }
+
+ protected void onAccesssoryAttached() {
+ mSwitchDisplayers = new ArrayList<SwitchDisplayer>();
+ for (int i = 0; i < 4; ++i) {
+ SwitchDisplayer sd = new SwitchDisplayer(i);
+ mSwitchDisplayers.add(sd);
+ }
+ }
+
+ public void setTemperature(int temperatureFromArduino) {
+ /*
+ * Arduino board contains a 6 channel (8 channels on the Mini and Nano,
+ * 16 on the Mega), 10-bit analog to digital converter. This means that
+ * it will map input voltages between 0 and 5 volts into integer values
+ * between 0 and 1023. This yields a resolution between readings of: 5
+ * volts / 1024 units or, .0049 volts (4.9 mV) per unit.
+ */
+ double voltagemv = temperatureFromArduino * 4.9;
+ /*
+ * The change in voltage is scaled to a temperature coefficient of 10.0
+ * mV/¡C (typical) for the MCP9700/9700A and 19.5 mV/¡C (typical) for
+ * the MCP9701/9701A. The out- put voltage at 0¡C is also scaled to 500
+ * mV (typical) and 400 mV (typical) for the MCP9700/9700A and
+ * MCP9701/9701A, respectively. VOUT = TC¥TA+V0¡C
+ */
+ double kVoltageAtZeroCmv = 400;
+ double kTemperatureCoefficientmvperC = 19.5;
+ double ambientTemperatureC = ((double) voltagemv - kVoltageAtZeroCmv)
+ / kTemperatureCoefficientmvperC;
+ double temperatureF = (9.0 / 5.0) * ambientTemperatureC + 32.0;
+ mTemperature.setText(mTemperatureFormatter.format(temperatureF));
+ }
+
+ public void setLightValue(int lightValueFromArduino) {
+ mLightRawView.setText(String.valueOf(lightValueFromArduino));
+ mLightView.setText(mLightValueFormatter
+ .format((100.0 * (double) lightValueFromArduino / 1024.0)));
+ }
+
+ public void switchStateChanged(int switchIndex, boolean switchState) {
+ if (switchIndex >= 0 && switchIndex < mSwitchDisplayers.size()) {
+ SwitchDisplayer sd = mSwitchDisplayers.get(switchIndex);
+ sd.onSwitchStateChange(switchState);
+ }
+ }
+
+ public void joystickButtonSwitchStateChanged(boolean buttonState) {
+ mJoystickView.setPressed(buttonState);
+ }
+
+ public void joystickMoved(int x, int y) {
+ mJoystickView.setPosition(x, y);
+ }
+
+ public void onTemperature(int temperature) {
+ setTemperature(temperature);
+ }
+
+ public void onLightChange(int lightValue) {
+ setLightValue(lightValue);
+ }
+
+ public void onSwitchStateChange(int switchIndex, Boolean switchState) {
+ switchStateChanged(switchIndex, switchState);
+ }
+
+ public void onButton(Boolean buttonState) {
+ joystickButtonSwitchStateChanged(buttonState);
+ }
+
+ public void onStickMoved(int x, int y) {
+ joystickMoved(x, y);
+ }
+
+ class SwitchDisplayer {
+ private final ImageView mTargetView;
+ private final Drawable mOnImage;
+ private final Drawable mOffImage;
+
+ SwitchDisplayer(int switchIndex) {
+ int viewId, onImageId, offImageId;
+ switch (switchIndex) {
+ default:
+ viewId = R.id.Button1;
+ onImageId = R.drawable.indicator_button1_on_noglow;
+ offImageId = R.drawable.indicator_button1_off_noglow;
+ break;
+ case 1:
+ viewId = R.id.Button2;
+ onImageId = R.drawable.indicator_button2_on_noglow;
+ offImageId = R.drawable.indicator_button2_off_noglow;
+ break;
+ case 2:
+ viewId = R.id.Button3;
+ onImageId = R.drawable.indicator_button3_on_noglow;
+ offImageId = R.drawable.indicator_button3_off_noglow;
+ break;
+ case 3:
+ viewId = R.id.Button4;
+ onImageId = R.drawable.indicator_button_capacitive_on_noglow;
+ offImageId = R.drawable.indicator_button_capacitive_off_noglow;
+ break;
+ }
+ mTargetView = (ImageView) findViewById(viewId);
+ mOffImage = mHostActivity.getResources().getDrawable(offImageId);
+ mOnImage = mHostActivity.getResources().getDrawable(onImageId);
+ }
+
+ public void onSwitchStateChange(Boolean switchState) {
+ Drawable currentImage;
+ if (!switchState) {
+ currentImage = mOffImage;
+ } else {
+ currentImage = mOnImage;
+ }
+ mTargetView.setImageDrawable(currentImage);
+ }
+
+ }
+}