我要做什么:
我在Android应用程序中设置了一个线程,该线程不断读取从Arduino接收到的脉冲。每次读取脉冲时,它会将1加到计数器变量中。 我想计算一下我在一秒钟内收到的脉冲数。 其实这是一个速度计。
出了什么问题
例如,如果我发送的脉冲速率是每秒6个脉冲,即使脉冲速率稳定(只要我不调节电位计),我的计数器就不会总是计数6,而是5。 。 我想,当您有两个稳定的汇率时,发生这种情况的唯一原因是它们的相位不一致。 如果是这样,我该如何同步这两个过程?
我尝试过的事情:
我试图通过将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
我接受了以下事实,即同步处理是我无法做到的,因此我尝试修改计数器。我会每秒钟(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()
}
}
有什么见解?谢谢。