Сообщение от MONIKYS
|
Может кто проверить?
|
Честно говоря, так и не понял, чего хотите добиться - трудно разбирать чужой, хоть и несложный, код.
К примеру, как я понял, вы пытаетесь выделить фронты сигнала, сравнивая предыдущее (из структуры ...-›OldState) и текущее состояния контакта. Не проще воспользоваться функциями isedge/isnegedge/isposedge ?
Далее, переменная Temp с типом данных BYTE. Но в коде Вы делаете проверку "if (Temp › 255)". А байт может быть больше 255? Значит эта ветка не работает.
Далее, Вы вызываете функцию PinColor из разных мест: по изменениям состояний на контактах (simulate) и по заданному интервалу (callback). Как я понимаю, Вы пытаетесь использовать callback как сторожевой таймер. Мало того, что эти события, теоретически, могут произойти одновременно, что приведет, если не к потере функциональности, так к замедлению работы Вашей модели, так он еще не выполняет своей функции, т.к. он продолжает работать даже тогда, когда сигналы на контактах продолжают поступать. Я бы попробовал перезапускать callback в функции simulate. Тут, как-то не отложилось в памяти будет ли он перезапускаться при одинаковом ID, вот заодно и проверите, и нам раскажите.
Напоследок. Проект ругается на отсутствие библиотеки 3ColLed.dll.
И еще. Посмотрите на рисунок. Правильно ли Вы генерируете тестовую последовательность. Как я понимаю, во время этого провала у Вас и происходит сброс цвета по таймауту.
Есть еще некоторые непонятки, но это я могу долго фантазировать на тему "а что же хотел сказать автор".
Поэтому, Вам стоит более подробней описать задачу, лучше сразу на почту или в личку - много времени уделить не смогу, но может помогу натолкнуть на какие-то решения.