S
shavenne
Neues Mitglied
- 1
Hi!
Ich hab ein Problem.
Ich möchte mir eine eigene App bauen, die mir bestimmte CAN-Messages ins Infotainment-Netz meines Auto schreibt.
Arduino -> Auto klappt auch schon wunderbar. Aber die Schnittstelle zwischen meinem Android Tablet (Nexus 7 2013, Lollipop) und dem Arduino bereitet mir Schwierigkeiten. Zum Testen lasse ich derzeit einfach nur eine LED an oder ausgehen, was auch klappt, ABER: Es ist waaahnsinnig langsam und zwar abhängig von der Länge des Befehls.
Ich sende einfach nur ein 'ToCAN_UP' und der Befehl dauert locker 2-3sek. Wenn gleichzeitig auch noch Nachrichten reinkommen dauert's noch viel länger.
Ich nutze die usb-serial-for-android-Library dafür. Habe auch schon die Physicaloid Library getestet, genau das gleiche Problem.
Das merkwürdige ist nur: Andere Apps im Play Store, bei denen ich bespielsweise eine simple serielle Konsole habe, sind wunderbar schnell!
Ich hoffe irgendwer hat eine Idee
Den Code des Arduinos spare ich mir hier einmal, da es bei dem auf jeden Fall nicht hängt.
Hier der Java Quellcode, der noch ziemlich überschaubar ist:
Bin für jeden Tipp dankbar!
Gruß
Sven
Ich hab ein Problem.
Ich möchte mir eine eigene App bauen, die mir bestimmte CAN-Messages ins Infotainment-Netz meines Auto schreibt.
Arduino -> Auto klappt auch schon wunderbar. Aber die Schnittstelle zwischen meinem Android Tablet (Nexus 7 2013, Lollipop) und dem Arduino bereitet mir Schwierigkeiten. Zum Testen lasse ich derzeit einfach nur eine LED an oder ausgehen, was auch klappt, ABER: Es ist waaahnsinnig langsam und zwar abhängig von der Länge des Befehls.
Ich sende einfach nur ein 'ToCAN_UP' und der Befehl dauert locker 2-3sek. Wenn gleichzeitig auch noch Nachrichten reinkommen dauert's noch viel länger.
Ich nutze die usb-serial-for-android-Library dafür. Habe auch schon die Physicaloid Library getestet, genau das gleiche Problem.
Das merkwürdige ist nur: Andere Apps im Play Store, bei denen ich bespielsweise eine simple serielle Konsole habe, sind wunderbar schnell!
Ich hoffe irgendwer hat eine Idee
Den Code des Arduinos spare ich mir hier einmal, da es bei dem auf jeden Fall nicht hängt.
Hier der Java Quellcode, der noch ziemlich überschaubar ist:
Code:
package de.shavenne.android.youcanlisten;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import com.hoho.android.usbserial.driver.UsbSerialDriver;
import com.hoho.android.usbserial.driver.UsbSerialPort;
import com.hoho.android.usbserial.driver.UsbSerialProber;
import java.io.IOException;
import java.util.List;
public class MainActivity extends ActionBarActivity {
private PendingIntent PendingIntent_UsbPermission;
private static int RQS_USB_PERMISSION = 0;
private final String ACTION_USB_PERMISSION = "de.shavenne.android.youcanlisten";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
ImageButton buttonUp = (ImageButton) findViewById(R.id.upButton);
ImageButton buttonDown = (ImageButton) findViewById(R.id.downButton);
if (!availableDrivers.isEmpty()) {
UsbSerialDriver driver = availableDrivers.get(0);
Intent intent_UsbPermission = new Intent(ACTION_USB_PERMISSION);
PendingIntent_UsbPermission = PendingIntent.getBroadcast(
this, //context
RQS_USB_PERMISSION, //request code
intent_UsbPermission, //intent
0); //flags
IntentFilter intentFilter_UsbPermission = new IntentFilter(ACTION_USB_PERMISSION);
UsbDevice device = driver.getDevice();
TextView textView = (TextView) findViewById(R.id.textView);
String text = device.getDeviceName();
manager.requestPermission(device, PendingIntent_UsbPermission);
if(manager.hasPermission(device)) {
text += " has permission";
}
textView.setText(text);
final UsbDeviceConnection connection = manager.openDevice(device);
final List<UsbSerialPort> mEntries = driver.getPorts();
final UsbSerialPort port = mEntries.get(0);
try {
port.open(connection);
port.setParameters(9600, 8, 1, 0);
buttonUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
port.write("ToCAN_UP\n".getBytes(), 500);
} catch (IOException e) {
e.printStackTrace();
}
}
});
buttonDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
port.write("ToCAN_DOWN\n".getBytes(), 500);
} catch (IOException e) {
e.printStackTrace();
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Bin für jeden Tipp dankbar!
Gruß
Sven