Всем доброго времени суток! Параллельно с работой в FLProg я занимаюсь изучением языка Си. Первые программы я начал писать года 3-4 назад, но тогда дальше бегущих огней с использованием цикла for и подобных простых вещей дело не пошло. Почему не знаю, может времени толком не было,может желания, а может и ещё чего-нибудь… Но последние полгода свободного стало чуть больше и желание что-нибудь собрать,естественно на ардуино, снова дало о себе знать. Так я познакомился с чудесной программой – FLProg. Уже реализовал не одну свою идею и это не может не радовать. Это была небольшая
ремарка, теперь ближе к делу!
Для очередного своего проекта, которой я пишу на Си, потребовалось подробнее разобраться с функций millis(). Решил посмотреть, как работает генератор, в коде, который генерирует FLProg. В результате остался ряд вопросов. Итак, есть простой генератор...
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
void setup()
{
pinMode(8, OUTPUT);
}
void loop()
{
if (!_gen1I)
{
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
if (_gen1I)
{
if (_isTimer(_gen1P, 500))
{
_gen1P = millis();
_gen1O = !_gen1O;
}
}
digitalWrite(8, _gen1O);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime >= startTime)
{
return (currentTime >= (startTime + period));
}
else
{
return (currentTime >= (4294967295 - startTime + period));
}
}
Если я всё правильно понимаю в данном отрезке кода
if (_gen1I)
{
if (_isTimer(_gen1P, 500))
{
_gen1P = millis();
_gen1O = !_gen1O;
}
}
В функцию bool _isTimer передаются значения количества миллисекунд в виде переменной _gen1P и требуемая задержка. И тут же функция, возвращает заданный
промежуток времени, переворачивая переменную _gen10. Вот как это происходит мне и не понятно(( Можно пожалуйста разъяснить этот вопрос как можно подробнее.