Как синхронизировать последовательную связь с Arduino с вертикальным обновлением планшета? - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь синхронизировать последовательную связь (через 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());
}
...