diff options
Diffstat (limited to 'demokit/app/src/com/google/android/DemoKit/InputController.java')
-rw-r--r-- | demokit/app/src/com/google/android/DemoKit/InputController.java | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/demokit/app/src/com/google/android/DemoKit/InputController.java b/demokit/app/src/com/google/android/DemoKit/InputController.java new file mode 100644 index 0000000..04624ea --- /dev/null +++ b/demokit/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); + } + + } +} |