Я пытаюсь синхронизировать последовательную связь (через bluetooth) между планшетом Android (Android 6.0 Marshmallow) и arduino (Mega 2560) для вертикального обновления планшета. Я использовал Choreographer (https://developer.android.com/reference/android/view/Choreographer) для контроля времени обновления дисплея, но последовательная связь не синхронизируется с обновлением дисплея (и это переменная).
Кто-нибудь знает, как заставить это работать? Я включил соответствующий сегмент кода Android из моего приложения.
public void armVSyncHandler() {
if(!frameCallbackPending) {
frameCallbackPending = true;
if(frameCallback == null)
{
frameCallback = new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
frameCallbackPending = false;
if (blackView.getVisibility() == View.INVISIBLE) {
blackView.setVisibility(View.VISIBLE);
} else {
blackView.setVisibility(View.INVISIBLE);
}
armVSyncStrobe();
}
};
}
Choreographer.getInstance().postFrameCallback(frameCallback);
}
}
public void armVSyncStrobe() {
if(!frameCallbackPendingS) {
frameCallbackPendingS = true;
if (frameCallbackS == null)
{
frameCallbackS = new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
frameCallbackPendingS = false;
String strobe = getBinaryTime();
try {
sendData(strobe);
Log.d(TAG,"data sent");
timeRecordDb.insertData(strobe, "receive: "+tvReceived.getText());
}
catch (IOException ex) {
Log.d(TAG, "data not sent");
}
}
};
}
Choreographer.getInstance().postFrameCallback(frameCallbackS);
}
}
public void sendData(String msg) throws IOException
{
try {
mmOutputStream = mmSocket.getOutputStream();
} catch (IOException e) {}
msg += "\n";
mmOutputStream.write(msg.getBytes());
}