我使用的是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();
}}
发布于 2012-02-05 09:11:21
似乎传递给UI的任何东西都必须在单独的线程中发生。在您的案例中,您必须添加如下内容:
private void changeText(String displayText){
runOnUiThread(new Runnable(){
@Override
public void run() {
textView.setText(displayText);
}
});
}发布于 2011-10-29 04:57:19
你有一个明显的错误是:
ioio_ = IOIOFactory.create();
try {
ioio_.waitForConnect();
} catch (IncompatibilityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}是完全不必要的,而且可能会有问题。AbstractIOIOActivity会为您处理所有这些问题。看看一些示例(例如HelloIOIO或IOIOSimpleApp),以了解您的应用程序通常应该是什么样子的。
顺便说一下,这类问题的合适位置是谷歌群组上的ioio-users列表。
https://stackoverflow.com/questions/7925391
复制相似问题