読者です 読者をやめる 読者になる 読者になる

マサルの備忘録

ハイオク仕様のトルクフルな備忘録

ArduinoをAndroidのOTGを使ってUSB接続してみた

スポンサーリンク


ArduinoをAndroidのOTGを使ってUSB接続してみる - マサルの備忘録

続き。実際に動かしてみました。

Android側の実装

このプロジェクトとリンクした上で、

public class UsbSerialUtil {
	private UsbManager mManager;
	private UsbSerialDriver mDriver;

	public UsbSerialUtil(Context context) {
		mManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
		mDriver = UsbSerialProber.acquire(mManager);
	}

	public int read() {
		int ret = -1;

		if (mDriver != null) {
			try {
				mDriver.open();
				mDriver.setBaudRate(9600);

				byte buffer[] = new byte[16];
				ret = mDriver.read(buffer, 1000);
			} catch (IOException e) {

			} finally {
				try {
					mDriver.close();
				} catch (IOException e) {
				}
			}
		}

		return ret;
	}

	public void write(int data) {
		if (mDriver != null) {
			try {
				mDriver.open();
				mDriver.setBaudRate(9600);

				byte buffer[] = { (byte) data, };
				mDriver.write(buffer, 1000);
			} catch (IOException e) {

			} finally {
				try {
					mDriver.close();
				} catch (IOException e) {
				}
			}
		}
	}
}

こんなクソクラスを作りました。
あとは、ボタン押下時などに適当にwriteするようにする。

public class MainActivity extends Activity {

	private Button mButton;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onResume() {
		super.onResume();
		final Context context = this;

		mButton = (Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				new Thread(new Runnable() {

					@Override
					public void run() {
						new UsbSerialUtil(context).write(3);
					}
				}).run();
			}
		});
	}
}

こんなかんじ。
f:id:domomasarudesu:20150124102858p:plain

Arduino側の実装

Serial.readして、送られてきた数値分Lチカする。

int pinNo = 13;

void setup(){
  pinMode(pinNo, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  int input = Serial.read();

  if(input == -1){
    delay(200);
  }
  else {
    led(input);
  }
}

void led(int times){
  for(int i = 0; i < times; i++){
    digitalWrite(pinNo, HIGH);
    delay(200);
    digitalWrite(pinNo, LOW);
    delay(200);
  } 
}

Lチカ

この画面が割れたNexus5でやってみます(笑)
f:id:domomasarudesu:20150124102141j:plain

OTGが使えるようになるアダプタをつかってAndroidArduinoを接続。
f:id:domomasarudesu:20150124102225j:plain

チカチカー。