Что я пытаюсь сделать:
Я установил Thread в приложении для Android, которое постоянно считывает импульсы, полученные от Arduino. Каждый раз, когда импульс считывается, он добавляет 1 к переменной счетчика.
Я хочу посчитать, сколько импульсов я получил за 1 секунду.
На самом деле это измеритель скорости.
В чем проблема:
Если, например, частота импульсов, которые я посылаю, составляет 6 импульсов в секунду, мой счетчик не всегда считает 6, но и 5, даже если частота импульсов постоянна (пока я не настраиваю потензиометр) ,
Я полагаю, что единственная причина, по которой это происходит, когда у вас есть два устойчивых показателя, состоит в том, что они не в фазе.
Если да, как мне синхронизировать эти два процесса?
Что я пробовал:
Я попытался синхронизировать их, поместив .start () объекта Counter внутри оператора 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
Я принял тот факт, что синхронизировать процессы я не могу, поэтому я попытался изменить счетчик. Я бы добавил значение переменной Pulses (только если следующее значение> последнего, потому что мне нужно только максимальное значение) в список каждую секунду (onTick). На 5-й секунде я напечатал бы максимальное значение этого списка, потому что максимальное значение является самым точным (потому что это значение, которое мы имеем, когда два процесса находятся в фазе).
На 5-й секунде (onFinish) я бы сбросил переменную списка и импульсов.
Опять это не сработало. Я все еще получаю два значения, 6 и 5.
Почему это? Это потому, что каждые 5 секунд мне приходится сбрасывать список. Это означает, что в следующем списке 6 может не достигаться счетчиком, поэтому он дает мне 5.
val timer = object: CountDownTimer (5000, 1000) {
переопределить веселье на галочке (millisUntilFinished: Long) {
if (fores> fores_last) {
max_list.add (Fores)
fores_last = fores
fores = 0
} еще {
fores = 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()
}
}
Есть идеи? Спасибо.