это да) питание похоже у меня оказалось слабым местом в конструкции) хотя ... даже когда питалось всё от компьютерного БП, который довольно стабильный, всё равно были некоторые сложности) поэтому мне иногда кажеться, что это всё же какие-то мелкие сложности с дизайном самого shield) вроде как у оригинального деталек побольше и в нужных местах , в отличии от некоторых клонов))) кстати о "работал годами" я тут внезапно выяснил, что у меня delay перестаёт правильно работать, если ардуино не перезапускать пару месяцев)))) всё ожидал, но не этого)))
Комментарии: 49
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
да пока не чего, я про прерывания и их таймеры писал
Pavel
Delay в мк вообще зло
Anonim
да про overflow я помню) в общем похоже да)))