Android-IOIO板,简单的UART代码问题

Android-IOIO板,简单的UART代码问题,android,accessory,ioio,Android,Accessory,Ioio,我正在使用sparkfun提供的IOIO板。在尝试测试UART时,我绑定了IOIO板的RX和TX,希望从手机发送一个字节,并在手机上接收相同的字节,然后在文本框中显示。当我运行以下代码时,UI中没有任何更改。我想我错过了一件基本的事情。有什么建议/想法吗 package ioio.examples.hello; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import

我正在使用sparkfun提供的IOIO板。在尝试测试UART时,我绑定了IOIO板的RX和TX,希望从手机发送一个字节,并在手机上接收相同的字节,然后在文本框中显示。当我运行以下代码时,UI中没有任何更改。我想我错过了一件基本的事情。有什么建议/想法吗

package ioio.examples.hello;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import ioio.examples.hello.R;
import ioio.lib.api.DigitalOutput;
import ioio.lib.api.IOIO;
import ioio.lib.api.IOIOFactory;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.api.exception.IncompatibilityException;
import ioio.lib.util.AbstractIOIOActivity;
import android.os.Bundle;
import android.widget.ToggleButton;
import android.widget.TextView;
import ioio.lib.api.Uart;

/**
 * This is the main activity of the HelloIOIO example application.
 * 
 * It displays a toggle button on the screen, which enables control of the
 * on-board LED. This example shows a very simple usage of the IOIO, by using
 * the {@link AbstractIOIOActivity} class. For a more advanced use case, see the
 * HelloIOIOPower example.
 */

public class MainActivity extends AbstractIOIOActivity {

private ToggleButton togglebutton;
private TextView textView;

/**
 * Called when the activity is first created. Here we normally initialize
 * our GUI.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView = (TextView) findViewById(R.id.editText1);
    togglebutton = (ToggleButton) findViewById(R.id.button);
}

/**
 * This is the thread on which all the IOIO activity happens. It will be run
 * every time the application is resumed and aborted when it is paused. The
 * method setup() will be called right after a connection with the IOIO has
 * been established (which might happen several times!). Then, loop() will
 * be called repetitively until the IOIO gets disconnected.
 */
class IOIOThread extends AbstractIOIOActivity.IOIOThread {
    /** The on-board LED. */

    private Uart uart;
    private InputStream in;
    private OutputStream out;
    private byte receivedData[] = new byte[10];
    private int offset = 0;
    private Byte b;
    protected IOIO ioio_;

    /**
     * Called every time a connection with IOIO has been established.
     * Typically used to open pins.
     * 
     * @throws ConnectionLostException
     *             When IOIO connection is lost.
     * 
     * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#setup()
     */
    @Override
    protected void setup() throws ConnectionLostException {
        // led_ = ioio_.openDigitalOutput(0, true);
        ioio_ = IOIOFactory.create();
        try {
            ioio_.waitForConnect();
        } catch (IncompatibilityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        uart = ioio_.openUart(3, 4, 115200, Uart.Parity.NONE,
                Uart.StopBits.ONE);
        in = uart.getInputStream();
        out = uart.getOutputStream();
    }

    /**
     * Called repetitively while the IOIO is connected.
     * 
     * @throws ConnectionLostException
     *             When IOIO connection is lost.
     * 
     * 
     * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop()
     */
    @Override
    protected void loop() throws ConnectionLostException {

        offset = 0;
        while (togglebutton.isChecked()) {
        try {
                out.write(65);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // Ignore
                }
            } catch (IOException e) {
                // TODO ???
            }
            try {
                in.read(receivedData, 0, 1);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // Ignore
                }
            } catch (IOException e) {
                // TODO ???
            }

            textView.setText(Byte.toString(receivedData[0]));
        }
    }

}

/**
 * A method to create our IOIO thread.
 * 
 * @see ioio.lib.util.AbstractIOIOActivity#createIOIOThread()
 */
@Override
protected AbstractIOIOActivity.IOIOThread createIOIOThread() {
    return new IOIOThread();
}

}一个明显的错误是:

ioio_ = IOIOFactory.create();
try {
    ioio_.waitForConnect();
} catch (IncompatibilityException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
}
完全没有必要,而且可能有问题。AbstractIOActivity为您解决所有这些问题。请看一些示例(例如Helloio或IOIOSimpleApp),了解您的应用程序通常应该是什么样子


顺便说一句,这些问题的适当位置是谷歌群组上的ioio用户列表。

一个明显的错误是:

ioio_ = IOIOFactory.create();
try {
    ioio_.waitForConnect();
} catch (IncompatibilityException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
}
完全没有必要,而且可能有问题。AbstractIOActivity为您解决所有这些问题。请看一些示例(例如Helloio或IOIOSimpleApp),了解您的应用程序通常应该是什么样子


顺便说一句,这些问题的适当位置是Google群组上的ioio用户列表。

似乎传递到UI的任何内容都必须在单独的线程中发生。在您的案例中,您必须添加以下内容:

        private void changeText(String displayText){
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textView.setText(displayText);

            }   
        });
    }

似乎传递到UI的任何内容都必须在单独的线程中发生。在您的案例中,您必须添加以下内容:

        private void changeText(String displayText){
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textView.setText(displayText);

            }   
        });
    }