помогите с кодом!!!
- Войдите на сайт для отправки комментариев
Ср, 15/07/2015 - 14:08
Доброго времени суток!!
Бьюсь второй день, не могу понять в чем прикол.
Есть переменная
byte CurrentSceneNumber;
В секции setup есть установка начального значения
CurrentSceneNumber = 0;
В основном цикле по условию хочу менять значения этой переменной от 0 до 5
switch (value) { case 99: CurrentSceneNumber=CurrentSceneNumber+1; if (CurrentSceneNumber == 5) CurrentSceneNumber = 0; needtochange = true; break; case 10: CurrentSceneNumber = 0; needtochange = true; break; case 11: CurrentSceneNumber = 1; needtochange = true; break; case 12: CurrentSceneNumber = 2; needtochange = true; break; case 13: CurrentSceneNumber = 3; needtochange = true; break; case 14: CurrentSceneNumber = 4; needtochange = true; break; case 15: CurrentSceneNumber = 5; needtochange = true; break; }
Не правильно срабатывает строка CurrentSceneNumber=CurrentSceneNumber+1; Если выполнять условие value==99 при том, что CurrentSceneNumber==0 то после инкриментирования выдает значения 4, 3, 2, 1, 0 то есть как будто инвертированные значения. Все операторы присвоения CurrentSceneNumber = 4 работают абсолютно корректно.
Помогите советом, уже всю голову сломал
Напрмиер
byte CurrentSceneNumber = 0;
и
CurrentSceneNumber++
По данному куске кода могу сказать,что в нем ошибок нет (на всякий случай перепроверил в своей ардуинке, немного изменив код для проверки). Все таки ошибка у вас где то в другом месте.
По данному куске кода могу сказать,что в нем ошибок нет
Я даже больше скажу, провел эксперимент
работает корректно, но отрабатывает естественно только один раз, когда CurrentSceneNumber == 0
выдает опять лажу
Вот код практически полный, что касается этого куска
Пояснение: так как невозможно в коде использовать delay, поэтому в основном цикле идет счетчик, по срабатыванию которого вызывается функция ChangeScene с аргументом CurrentSceneNumber.
К сожалению вывести значение в монитор не могу, так как микроконтроллер распаян на плате, а не на ардуинке.
Код:
Вывод http://vpaste.net/sKMoq
На 15 - 5 сцена, 14 - 4, 13 - 3 и т.д.
Как только она у Вас станет (в case 15), а затем попадёт в case 99, то там она сначала станет 6, а только потом Вы её сравните с 5 (разумеется не сравнится). Затем она постоянно будет попадать в case 99 и постоянно увеличиваться пока не переполнится. А когда переполнится - пойдёт обратно.
Отсюда и такое поведение.
Нашел причину такого поведения.
это строка получения данных с радиоприемника 433МГц, а оказалось, так как связь передетчик-приемник одностороняя, то по умолчанию посылка транслируется несколько раз, а так как у меня невозможно использовать delay, то case успевал выполнится несколько раз, прежде чем посылка прекращалась.
Установил кол-во повторов на передатчике меньше
и сделал дополнительно счетчик для создания задержки
И все стало работать правильно
Спасибо всем, кто откликнулся!!!!