2011-10-28 24 views
0

我正在使用sparkfun給出的IOIO板。在嘗試測試UART時,我綁定了IOIO板的RX和TX,並希望從手機發送一個字節,並在手機上接收相同的字節並在文本框中顯示。當我運行以下代碼時,UI中沒有任何更改。我想我錯過了一件基本的事情。任何建議/想法?Android - IOIO板,簡單的UART代碼問題

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(); 
} 

}你有

回答

1

一個明顯的錯誤是:

ioio_ = IOIOFactory.create(); 
try { 
    ioio_.waitForConnect(); 
} catch (IncompatibilityException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

是完全沒有必要的,可能有問題。 AbstractIOIOActivity負責爲您服務。查看一些示例(例如HelloIOIO或IOIOSimpleApp),以瞭解您的應用通常應該是什麼樣子。

順便說一下,這些問題的適當位置是Google羣組上的ioio用戶列表。

3

似乎傳遞給用戶界面的任何內容都必須發生在單獨的線程中。你的情況,你必須添加這樣的事情:

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

      } 
     }); 
    }