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(); } }); } }
こんなかんじ。
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); } }