【问题标题】:android development with arduino使用arduino进行安卓开发
【发布时间】:2016-06-14 04:03:34
【问题描述】:

所以我是 Java 和 android 开发的新手。到目前为止,我一直在创建一个能够与 arduino 连接和交互的应用程序。我有一种方法可以从 arduino 中读取数据(以字节为单位),然后将数据打印为 UTF-8 中的字符串……但是,我只是希望这种方法能够读取和解释数据,并且拥有解释的数据可以从另一个方法调用,比如来自android的按钮。以下是读取数据的代码。

public class MainActivity extends AppCompatActivity {
    public final String Action_USB_Permission = "com.example.myapplication.USB_PERMISSION";
    UsbManager usbManager;
    UsbDevice device;
    UsbSerialDevice serial;
    UsbDeviceConnection connection;
    String data;
    String adata;
    TextView textView;
    Button tempButton

    UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
        @Override
        public void onReceivedData(byte[] arg0) {
            try {
                data = new String(arg0, "UTF-8"); //edit (removed String in "String data =" )


            } catch (UnsupportedEncodingException e) {
                e.getStackTrace();
            }
        }
    };

    // Serial codes and commands
    public void pushcmd(String command) { //command for serial
        serial.write(command.getBytes());
    }

    public void gettemp() {
        pushcmd("T\n");
        serial.read(mCallback);
        adata = data;
    }

    //This is for the app creation i think
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        usbManager = (UsbManager) getSystemService(this.USB_SERVICE);
        tempButton = (Button) findViewById(R.id.buttontemp);
    }

    public void onClickTemp(View view) { //This is the command to print data
        gettemp();
        tvAppend(textView, "\n Measured temperature \n" + adata);
    }

    private void tvAppend(TextView tv, CharSequence text) {
        final TextView ftv = tv;
        final CharSequence ftext = text;

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ftv.append(ftext);
            }
        });
    }
}

tvAppend 是一种在屏幕上的 textview 上打印字符串的方法。 我从https://github.com/felHR85/UsbSerial 获得了库,它说只需用

引用它

serial.read(mcallback),我已经尝试过该命令,但我收到一个“测量温度空值”,然后打印测量值,这是来自 onReceivedData 方法。任何建议将不胜感激。或者,如果我不清楚,请告诉我,我会尝试进一步澄清一些事情。

编辑:我添加了我的 tvAppend 方法,定义了一个 textview 字段和一个按钮。我还指出我没有包含整个程序,我遵循了所有关于电路的实现http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/再次感谢您的反馈

关于编辑的评论:当代码更改为上面的样子时。不显示数据,仅显示“测量温度”。

【问题讨论】:

  • 尝试从String data =中删除String
  • 另外,您似乎错过了制作minimal reproducible example 的完整部分。您缺少 textView 变量和 tvAppend 方法
  • @cricket_007 感谢您让我知道不够清楚。我也尝试从字符串数据中删除字符串 =
  • 你从未初始化过文本视图?
  • 是的,我已经初始化了 textview。我只是之前没有在帖子上显示它。

标签: java android methods arduino-uno


【解决方案1】:

我认为您对这里的数据流感到困惑。

  1. 您点击应用上的按钮
  2. 它向 Arduino 调用 pushcmd
  3. Arduino 会在未来某个未知时间点发回一些数据
  4. 您读取该数据并更新TextView

现在,使用这种逻辑,代码可以这样构造。 (请随意按照您的意愿重新组织到您的应用程序中)。

public void onClickTemp(View view) {
    gettemp();
    // No value of "adata" or "data" is guaranteed here
}

public void gettemp() {
    pushcmd("T\n");
    serial.read(mCallback); // asynchronous callback
    // No value of "adata" or "data" is guaranteed here, either
}

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
    @Override
    public void onReceivedData(byte[] arg0) {
        try {
            // Here, you are guaranteed some data
            String data = new String(arg0, "UTF-8");
            tvAppend(textView, "\n Measured temperature \n" + data);
        } catch (UnsupportedEncodingException e) {
            e.getStackTrace();
        }
    }
};

或者,如果你想把所有这些都折叠成一个方法,那么

public void onClickTemp(View view) {
    pushcmd("T\n");

    serial.read(new UsbSerialInterface.UsbReadCallback() {
        @Override
        public void onReceivedData(byte[] arg0) {
            try {
                // Here, you are guaranteed some data
                String data = new String(arg0, "UTF-8");
                tvAppend(textView, "\n Measured temperature \n" + data);
            } catch (UnsupportedEncodingException e) {
                e.getStackTrace();
            }
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多