如何将Counter对象的开始与数据流的开始同步

时间:2019-07-06 12:32:03

标签: android arduino synchronization counter

我要做什么:

我在Android应用程序中设置了一个线程,该线程不断读取从Arduino接收到的脉冲。每次读取脉冲时,它会将1加到计数器变量中。 我想计算一下我在一秒钟内收到的脉冲数。 其实这是一个速度计。

出了什么问题

例如,如果我发送的脉冲速率是每秒6个脉冲,即使脉冲速率稳定(只要我不调节电位计),我的计数器就不会总是计数6,而是5。 。 我想,当您有两个稳定的汇率时,发生这种情况的唯一原因是它们的相位不一致。 如果是这样,我该如何同步这两个过程?

我尝试过的事情:

  1. 我试图通过将Counter对象的.start()放在if语句中来使其同步,该语句在接收到第一个脉冲时触发。 没用。

    val t = Thread(Runnable {

                    while (true) {
                        if (t_control == 1) { 
                            startbutton.setOnClickListener {
                                t_control = 2
                                startbutton.isEnabled = false
                                stopbutton.isEnabled = true
                            }
                            if (arduinoSocket!!.inputStream.read() >= 72) {
                                if (!isRunning) {
                                    timer.start()
                                    isRunning = true
                                }
                                sunolo_counter += 1
                                fores += 1
    
  2. 我接受了以下事实,即同步处理是我无法做到的,因此我尝试修改计数器。我会每秒钟(onTick)在列表中添加脉动变量的值(仅当下一个值大于最后一个值时,因为我只需要最大值)。在5秒内,我将打印此列表的最大值,因为最大值是最精确的(因为这是两个过程同相时的值)。 在第五秒(onFinish)中,我将重置列表和脉冲变量。 再次没有用。我仍然得到两个值6和5。 为什么?这是因为我必须每5秒钟重置一次列表。这意味着计数器可能无法在下一个列表中实现6,所以它给了我5。

    val timer = object:CountDownTimer(5000,1000){             重写fun onTick(millisUntilFinished:Long){                 如果(fores> fores_last){                     max_list.add(fores)                     fores_last =前                     前= 0                 }其他{                     前= 0                 }

            }
            override fun onFinish() {
                taxutita_tv.text = max_list.max().toString()
                //taxutita_tv.text = fores.toString()
                max_list = mutableListOf(0)
                fores = 0
                fores_last = 0
                start()
            }
        }
    

有什么见解?谢谢。

0 个答案:

没有答案