package org.simonmonk.arduinoandroid.bot;
import org.simonmonk.arduinodroid.bot.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import at.abraxas.amarino.Amarino;
public class DroidDroidControls extends Activity implements OnSeekBarChangeListener {
private static final String TAG = "SM";
final int DELAY = 150;
SeekBar leftSB;
SeekBar rightSB;
int left = 255;
int right = 255;
long lastChange;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.controls);
// get references to views defined in our main.xml layout file
leftSB = (SeekBar) findViewById(R.id.SeekBarLeft);
rightSB = (SeekBar) findViewById(R.id.SeekBarRight);
// register listeners
leftSB.setOnSeekBarChangeListener(this);
rightSB.setOnSeekBarChangeListener(this);
}
@Override
protected void onStart() {
super.onStart();
leftSB.setProgress(left);
rightSB.setProgress(right);
}
@Override
protected void onStop() {
super.onStop();
Amarino.disconnect(this, DroidDroid.DEVICE_ADDRESS);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// do not send to many updates, Arduino can't handle so much
if (System.currentTimeMillis() - lastChange > DELAY ){
updateState(seekBar);
lastChange = System.currentTimeMillis();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
lastChange = System.currentTimeMillis();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
updateState(seekBar);
}
private void updateState(final SeekBar seekBar) {
switch (seekBar.getId()){
case R.id.SeekBarLeft:
left = seekBar.getProgress();
updateLeft();
break;
case R.id.SeekBarRight:
right = seekBar.getProgress();
updateRight();
break;
}
// provide user feedback
}
private void updateLeft(){
Log.d(TAG, "update left=" + (512 - left));
Log.d(TAG, "device address=" + DroidDroid.DEVICE_ADDRESS);
Amarino.sendDataToArduino(this, DroidDroid.DEVICE_ADDRESS, 'l', (511 - left));
}
private void updateRight(){
Log.d(TAG, "update right=" + (512 - right));
Log.d(TAG, "device address=" + DroidDroid.DEVICE_ADDRESS);
Amarino.sendDataToArduino(this, DroidDroid.DEVICE_ADDRESS, 'r', (511 - right));
}
}