#c #delay
Вопрос:
Я работаю над проектом, в котором мне нужно периодически менять значения с задержкой, но нужно постоянно обновлять другую информацию во время ожидания. Например, обновление 7-сегментного дисплея с мультиплексированием при установке задержки между считыванием кнопок для увеличения или уменьшения числа.
В этом примере я хочу сравнить значение датчика давления с моей таблицей настроек и в соответствии с этим включить соленоид или выключить его (время включения и время выключения), например, на 500 мс и 0ff на 500 мс, не прерывая другие обновления.
Моя цель-считывать давление, когда соленоид выключен, поэтому я считываю только давление в шине. Вот почему я хочу выключить соленоид для чтения и снова включить, чтобы надуть его в соответствии со значением считывания.
onTime = 100; offTime = 0;
onTimeCheck = 200; offTimeCheck = 200;
if (adc < tableValue amp;amp; onTime == onTimeCheck)
{
PORTB.B0 = 1; // Turn on solenoid
onTime = 0; // Reset
DisUpdate(); // Update 7-segment
}
else if (adc < tableValue amp;amp; offTime == offTimeCheck)
{
PORTB.B0 = 0; // Turn off solenoid
offTime = 0; // Reset
readPressure();// Read the pressure sensor when solenoid is off
DisUpdate(): // Update 7-segment
}
// Increment offTime to add up
if (offTime < offTimeCheck)
{
offTime ;
}
else if (offTime = offTimeCheck){}
// Increment onTime to add up
if (onTime < onTimeCheck)
{
onTime ;
}
else if (onTime = onTimeCheck){}
Я сделал что-то подобное, чтобы считывать переключатели с более низкой скоростью, чем скорость мультиплексирования 7-сегментного, но, похоже, это не работает, как бы я ни пытался.
Комментарии:
1. Многопоточность?
2. Я работаю над довольно ограниченным микроконтроллером, как вы думаете, это может сработать?
3. Я совершенно не представляю. Может сработать. Может, и нет. Это было всего лишь предположение. Начните с проверки того, возможно ли вообще запустить два потока.
4. Если у вас нет операционной системы, вы можете реализовать свое собственное планирование, создав цикл, который выполняет задачи поочередно или через определенные промежутки времени. Реализуйте длительные задачи в виде функций, которые выполняют их шаг за шагом в течение нескольких вызовов с некоторым внутренним состоянием.
5. Узнайте о конечных автоматах, отдельных задачах и реализации отдельных функций в независимых модулях.