не работает программный счетчик
- Войдите на сайт для отправки комментариев
Пнд, 09/09/2019 - 11:20
Плата mega2560 китайская. Не работает счетчик вида:
int k; int n; void function() { k++; if(k>=7) { k=0; n++; if(n>=7) { n=0; } } }
Возвращается несколько одинаковых значений n. Сама функция вызывается таймером из loop. k и n обнуляются в setup.
В чем ошибка, чего я не понимаю
Кому возвращаются и каким образом?
Но, если мега китайская, то виноваты (на 99%) китайцы.
Возвращает через Serilal.Println(n)--->00000111112222 и т,д.
Дак у китайской мега2560 это фича такая, когда ты ей говоришь инкрементировать какойнить особенно бесполезный щёччик, она вместо этого криптовалюту майнит.
А если серьезно, что не так со счетчиком?
А если серьезно, что не так со счетчиком?
а чего вы хотели, если вы сами меняете значение n только раз в 7 циклов? - вот оно по 7 раз одинаковое и печатается
Для более подробного обсуждения приведите код целиком
По-моему в этом случае n должно изменятся и печататься 1 раз на 8 вызовов функции, увеличиваясь на 1.
Alexey_Rem - не вижу полного кода, с setup и lopp
Как-то так
а Serial.begin() хде?
Извините пропустил
и еще Serial.PrintLn() - такого метода нет. И точек с запятыми не хватает
Алексей, не надо этихь отписок, "лишь бы отстали". Если вам лень обращать внимание на "мелочи". то нам и подавно.
Скопируйте именно тот код, который у вас компилируется и работает с ошибкой, а не "нечто вроде"
ну, если у тебя Сериал на 9600 работает, я удивлен, что вапще чота выводится. k достигает значения 7 примерно за 6.3 миллисекунды, и начинается асинхронный вывод в сериал. Передача 1 символа на такой скорости занимает примерно 4 миллисекунды. А символов у тебя выводится минимум 3 (цифра вместе с CR и LF). Как у тебя чо меняться успевает?
а еще, если код писать вот так
то будет какта понятнее, штоли.
Передача 1 символа на такой скорости занимает примерно 4 миллисекунды.
Дед, а разве не одну? - 9600/8 = 1200 символов сек
хотя на ситуацию в коде клиента это мало влияет
Передача 1 символа на такой скорости занимает примерно 4 миллисекунды.
Дед, а разве не одну? - 9600/8 = 1200 символов сек
хотя на ситуацию в коде клиента это мало влияет
ну да, чуть больше одной, там же не строго 8 бит передаются, еще есть служебные
Господа, прошу у всех прощения, программка для управления лед матрицей 8х8, поэтому сразу видна нерабостоспособность кода вне зависимости от вывода на serial. Счетчик для переборки излучателей, сама программка основана на другой, полностью рабочей, но там опрос происходит немного не так. Наткнулся на такое поведение кода Вот и спрашиваю может есть какие-то ограничения что-то недокументированное, что не лежит на поверхности, может кто-то встречался с таким.
Спасибо
У меня вот такой код вполне нормально работает...
А у вас как, ТС (Alexey_Rem)?
Arduino Nano (atmega168)
У меня вот такой код вполне нормально работает...
А у вас как, ТС (Alexey_Rem)?
Arduino Nano (atmega168)
Стесняюсь спросить, но спрошу.
А чем не устроил millis() -time_1>=50, а в идеале delay(50) ?
Я же написал - чтобы глаза не мозолило. А по факту, так как изменение инкрементально и равно 1, то что =, что >, что >= разницы нет. Меняется только максимальное значение.
Я же написал - чтобы глаза не мозолило. А по факту, так как изменение инкрементально и равно 1, то что =, что >, что >= разницы нет. Меняется только максимальное значение.
Я разве про это спрашивал ?
Хм, значит я не понял вопрос. Переформулируйте его.
Перевожу)) Нафига микрос, если можно миллис, а ещё лучше тупо делай?
Так не я же код писал, я его опробовал и поделился своим мнением и корректировками для себя. Вообще, если только это и делается = угу. А если это часть кода, то лучше delay-и всякие не добавлять. Да и суть же не меняется вроде в первоначальной задаче? Или я не прав? Или ещё что пропустил? Просветите, пожалуйста.