это да) питание похоже у меня оказалось слабым местом в конструкции) хотя ... даже когда питалось всё от компьютерного БП, который довольно стабильный, всё равно были некоторые сложности) поэтому мне иногда кажеться, что это всё же какие-то мелкие сложности с дизайном самого shield) вроде как у оригинального деталек побольше и в нужных местах , в отличии от некоторых клонов))) кстати о "работал годами" я тут внезапно выяснил, что у меня delay перестаёт правильно работать, если ардуино не перезапускать пару месяцев)))) всё ожидал, но не этого)))

Комментарии: 49

  1. Roman

    читать надо было мануал и не использовать delay http://arduino-diy.com/arduino-Ispolzuyem-funktsii-delay-i-millis-pravilno см. millis()

    • Anonim

      да overflow millis знаю)) но забавно другое) что ON led delay(1000) OFF led через какое-то время перестаёт работать...))) я не понял почему overflow относиться к delay в том числе))) хотя вообще-то надо бы найти как он там реализован, может быть и не правильно)

      • Roman

        через millis

        • Anonim

          ага) это многое объясняет хмм, тогда наверное delay правда надо везде менять на millis )

          • Roman

            и не просто менять, а учитывать в условии, что время в миллисекундах может внезапно обнулиться и разница между текущим и запомненным ранее значением может оказаться равной 50 дням

          • Pavel

            там не менять а логику менять

            • Anonim

              щас найду исходники ардуино посмотрю как там это зло сделано)) ну мне нужен просто Click) там в общем то логика ON delay OFF ) сильно не поменяешь)

              • Pavel

                зло цыклит до определения секунд

                • Anonim

                  просто удивительно что на таком простом варианте, могут быть проблемки)))

                  • Pavel

                    точнее тиков если быть чтоным в плане mk убегать делей может запросто от гуевого кварца

                  • Roman

                    когда не читаешь мануалы вокруг чудеса

                    • Pavel

                      поэтому обычно ставять какой нибудь rtc он достаточно точный

                      • Anonim

                        это если нужна точность)

                    • Anonim

                      действительно) интересно что сегодня первый раз посмотрю в исходники ардуино))) но в manual никаких намёков на overflow delay вообще-то небыло)))

                      • Roman

                        arduino reference почитай

                        • Anonim

                          https://www.arduino.cc/reference/en/language/functions/time/delay/ тут ни малейшего намека что в простых скетчах через пару месяцев delay может перестать работать..)

                          • Roman

                            millis смотри

                          • Roman

                            For alternative approaches to controlling timing see the Blink Without Delay sketch, which loops, polling the millis() function until enough time has elapsed. More knowledgeable programmers usually avoid the use of delay() for timing of events longer than 10’s of milliseconds unless the Arduino sketch is very simple.

                            • Pavel

                              есть простая функция millis() от нее можно считать прошедшее время там помойму до долей секунд

                            • Anonim

                              так из этого не следует что delay подвержен overflow

                              • Roman

                                сказано же не используй

                                • Anonim

                                  да, и у неё overflow есть) ... unless the Arduino sketch is very simple " )

                                  • Pavel

                                    делей скорей всего постоена на принципе for чего то там до милис + число

                                  • Roman

                                    avoid

                                    • Anonim

                                      в некоторых случаях blocking solutions предпочтительнее альтернатив мне нужно чтобы вне зависимости от того что случаться) клик был полностью завершён)

                                      • Pavel

                                        опять же millis дает long int помойму там число считай идет как в unix date

                                        • Anonim

                                          хоть там пусть вообще весь main навсегда отвалиться)) оно вроде через 58 дней переполняется?)

                                          • Pavel

                                            хм

                                            • Roman

                                              эта твоя ардуина нужна только для проверки идеи автоматизации, а не для постоянного использования. Точно не должна месяц работать

                                              • Anonim

                                                то есть до unix date millis далековато)) ну простых решений мы не ищем))) не должна, но если хочеться, то можно)))

                                                • Roman

                                                  нет, ты просто концепт не вкурил

                                                  • Anonim

                                                    тем более даже в "промышленном решении" проблемы с кодом очевидно остануться)

                                                    • Pavel

                                                      там значение помойму uint32_t потом с нулдя опять начнет

                                                      • Roman

                                                        uint32_t в ардуине?

                                                        • Pavel

                                                          угу у него milis выдает unsigned long\ Returns Number of milliseconds passed since the program started. Data type: unsigned long.

                                                          • Anonim

                                                            так void delay(unsigned long ms) { uint32_t start = micros(); while (ms > 0) { yield(); while ( ms > 0 && (micros() - start) >= 1000) { ms--; start += 1000; } } } сделан через micros))) теперь я не понял как тогда это может быть связано с overflow millis)))

                                                            • Pavel

                                                              yield(); зло ну я же сказал или for или wile он цыклет полностью мк напрочь

                                                            • Roman

                                                              uint32_t uint16_t посмотри размер числа. и приди к мысли о том, что число start обнуляется

                                                      • Anonim

                                                        да, это вроде около 58 дней получается... да) но у меня delay перестаёт считать задержку)

                                                        • Pavel

                                                          1000 это 1 секунда

                                                          • Anonim

                                                            вот что загадочно)) то есть delay(1000) = delay(1) по простому))) я вот такой расклад не очень понял))

                                                            • Pavel

                                                              я про милис милис 1000 это 1 секунда

                                                              • Anonim

                                                                ага)

                                                                • Pavel

                                                                  считай сам сколько секунд влезит в год точно влезит а дальше с нуля

                    • Pavel

                      веришь я их не читаю но у меня чудес не бывает так как базовые принципы програмирования что x86-64 что avr что arm похожи просто нужно понимать как адаптироваться но золотое правило не тормози main поток понятны как отчи наши а делай как раз его и тормозит для таких задач есть isr

                      • Roman

                        что нового сваял?

                        • Pavel

                          да пока не чего, я про прерывания и их таймеры писал

  2. Pavel

    Delay в мк вообще зло

    • Anonim

      да про overflow я помню) в общем похоже да)))

Не нашли ответ?

Вам также может быть интересно