Arduino Android USB-Verbindung
Ich benutze ein ArduinoDuemilanove undNexus 7. Ich habe das Arduino-Board erfolgreich erkannt und die Hersteller- und Produkt-ID angezeigt. Ich versuche, Daten von meinem Tablet auf das Arduino Board zu übertragen und versuche, das zu blinkenLED auf der Tafel. Der Code für Android lautet wie folgt.
Hauptaktivität.java protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbDeviceConnection connection;
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
UsbDevice device = null;
while(deviceIterator.hasNext()){
device = deviceIterator.next();
String s = device.getDeviceName();
int pid = device.getProductId();
int did = device.getDeviceId();
int vid = device.getVendorId();
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(s+"\n"+Integer.toString(pid)+"\n"+Integer.toString(did));
}
connection = manager.openDevice(device);
DataTransfer dt = new DataTransfer(device,connection);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
DataTrasfer.javapublic class DataTransfer extends Thread {
UsbDevice device;
UsbDeviceConnection connection;
byte data = 1;
public DataTransfer(UsbDevice device, UsbDeviceConnection connection) {
// TODO: Auto-generated constructor stub
device = this.device;
connection = this.connection;
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
UsbInterface usbIf = device.getInterface(0);
UsbEndpoint end1 = usbIf.getEndpoint(0);
//UsbRequest ureq = connection.requestWait();
final Object[] sSendLock = new Object[]{};
boolean mStop = false;
byte mData = 0x00;
if(!connection.claimInterface(usbIf, true))
{
return;
}
connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0);
connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,
0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);
connection.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0, 0); //Baudrate 9600
UsbEndpoint epIN = null;
UsbEndpoint epOUT = null;
for (int i = 0; i < usbIf.getEndpointCount(); i++) {
if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)
epIN = usbIf.getEndpoint(i);
else
epOUT = usbIf.getEndpoint(i);
}
}
for (;;) { // This is the main loop for transferring
synchronized (sSendLock) { //OK, there should be a OUT queue, no guarantee that the byte is sent actually.
try {
sSendLock.wait();
}
catch (InterruptedException e) {
if (mStop) {
return;
}
e.printStackTrace();
}
connection.bulkTransfer(epOUT,new byte[] {data}, 1, 0);
}
}
}
}
Und mein Arduino-Code lautet:
int incomingByte = 0; // For incoming serial data
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600); // Opens serial port, sets data rate to 9600 bps.
}
void loop() {
// Send data only when you receive data:
if (Serial.available() > 0) {
// Read the incoming byte:
incomingByte = Serial.read();
digitalWrite(13, HIGH); // Set the LED on
delay(1000); // Wait for a second
digitalWrite(13, LOW); // Set the LED off
// Say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
Das Problem ist, dass auf der Arduino-Platine keine LED leuchtet. Ich bin mir nicht sicher, wo das Problem liegt, da ich gerade angefangen habe, in diesem Bereich zu arbeiten.