blob: 4c3ad5a10ae5d22cc560a9500dc13b411eb7bb2c [file] [log] [blame]
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(
"###" + (char)0x00B0);
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/degC (typical) for the MCP9700/9700A and 19.5 mV/degC (typical)
* for the MCP9701/9701A. The out- put voltage at 0 degC is also scaled
* to 500 mV (typical) and 400 mV (typical) for the MCP9700/9700A and
* MCP9701/9701A, respectively. VOUT = TCÂ¥TA+V0degC
*/
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);
}
}
}