Программа стартует через 9 секунд
- Войдите на сайт для отправки комментариев
Ср, 20/11/2019 - 21:10
Всем привет.
Простой скетч. Два датчика вход, один выход на реле. Attiny13
Работает верно. После подачи напряжения включается через 9 секунд, дальше по алгоритму.
Сломал всю голову, по мне должно включаться на второй секунде после прописанной задержки. Что интересно: раньше так и было, но потом появилась эта стартовая задержка.
Ну очень интересно почему. Подскажите, пожалуйста, у кого какие мысли. Или у меня ошибка, я не вижу.
void setup() { delay(1000); pinMode(buttonPin, INPUT_PULLUP); pinMode(lightPower, INPUT); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); } void loop() { button = digitalRead(buttonPin); light = digitalRead(lightPower); tLight = millis() - t; if (button != prev_button && light == 1) { t = millis(); prev_button = button; } if (tLight < 90000) { // время работы реле мс digitalWrite(ledPin, LOW); } else { digitalWrite(ledPin, HIGH); } }
Вы, уважаемый, посмотрите на millis(). Когда Вы его первый раз запрашиваете. Говорите 9 секунд?
Смотрел, укажите, что не вижу, поэтому и прошу помощи.
На 90 секунд включается само реле. Но при подаче питания оно включается через 9 секунд, вначале стоит одна секунда задержки старта. То есть через 8 секунд работы цикла.
В самом начале, я считаю что t и millis() равны нулю, но мииллис стартует сразу, а т опаздывает на секунду.
А какое значение t в начале программы? В башке программу проиграйте
В самом начале, я считаю что t и millis() равны нулю, но мииллис стартует сразу, а т опаздывает на секунду.
Про Вас понятно. Что считает компилятор - интересовались?
мое мнение такое:
при старте
получаем 1000
должен выполняться код
В самом начале, я считаю что t и millis() равны нулю, но мииллис стартует сразу, а т опаздывает на секунду.
Как раз интересуюсь. А по Вашему что он считает?
Значение t - любое, пока Вы его не назначили. Никто никому ничего не должен. Читайте документацию
В самом начале, я считаю что t и millis() равны нулю, но мииллис стартует сразу, а т опаздывает на секунду.
Как раз интересуюсь. А по Вашему что он считает?
Моя фамилия не Компилятор. И не Ватман. И я не от Циркуля.
Serial.print() дадено для чего?
В самом начале, я считаю что t и millis() равны нулю, но мииллис стартует сразу, а т опаздывает на секунду.
Как раз интересуюсь. А по Вашему что он считает?
Извините, к Attiny не смог подключить, не нашел в описании контроллера такую функцию.
Спасибо в любом случае.
Подсказка - назначте t равным millis() в сетапе. И t обозначте глобальной переменной. Непонятно? Читайте учебник по си
Значение t - любое, пока Вы его не назначили. Никто никому ничего не должен. Читайте документацию
Спасибо. Можно ссылку где это написано. Я не могу найти.
Сначала в сетапе обнулял Т, но после решил, что при старт все нули и для меня это не важно, убрал. Но поучив абсолютно одинаковую задержку на старте во множестве случаев, заинтересовался. Если бы разное время было - я бы списал на разные стартовые значения.
Укажите, пожалуйста, где это написано.
Подсказка - назначте t равным millis() в сетапе. И t обозначте глобальной переменной. Непонятно? Читайте учебник по си
Да, так я умею. Читаю, смотрю. Не все сразу выучу.
В данном случае было очевидно, что выучу позже, чем получу ответ. И посмел в песочнице задать вопрос.
мои переменные, объявлены до сетапа
Да, так я умею. Читаю, смотрю. Не все сразу выучу.
В данном случае было очевидно, что выучу позже, чем получу ответ. И посмел в песочнице задать вопрос.
мои переменные, объявлены до сетапа
В программе, которую Вы представили этого не было - это раз.
В сетапе вы не назначили t равным millis() -это два.
И вопрос - а почему?
Да, так я умею. Читаю, смотрю. Не все сразу выучу.
В данном случае было очевидно, что выучу позже, чем получу ответ. И посмел в песочнице задать вопрос.
мои переменные, объявлены до сетапа
В программе, которую Вы представили этого не было - это раз.
В сетапе вы не назначили t равным millis() -это два.
И вопрос - а почему?
1. Не было, не хотел увеличивать код, но написано давно так. И подтяжки на плате я поставил не только на входы, но и на выходы.
2. Специально, я знаю, что надо все объявлять. Мне хотелось попробовать в реальной жизни. Я читал, что при старте необъявленные переменные равны нулю. Другого не видел. А сейчас и это не могу найти. ((
Но столкнувшись с такой одинаковой многократной задержкой не смог удержаться и не спросить опытных людей.
Будьте любезны, привести скетч целиком!
Сколько можно над людьми издеваться?
а если так
2. Специально, я знаю, что надо все объявлять. Мне хотелось попробовать в реальной жизни. Я читал, что при старте необъявленные переменные равны нулю. Другого не видел. А сейчас и это не могу найти. ((
Но столкнувшись с такой одинаковой многократной задержкой не смог удержаться и не спросить опытных людей.
Когда Вы столкнетесь с РЕАЛЬНОЙ проблемой Вы попадете на бабки, поскольку не читаете документы. Изначально переменные имеют случайные значения, которые отражают состояние процессора на момент загрузки.
Когда Вы столкнетесь с РЕАЛЬНОЙ проблемой Вы попадете на бабки, поскольку не читаете документы. Изначально переменные имеют случайные значения, которые отражают состояние процессора на момент загрузки.
Именно это я хочу, проверить все на простых примерах, чтобы потом "не попасть на бабки", как Вы выражаетесь. Я и проверял таким образом переменные. У меня в коде было t=0, но я закомментил эту строку сознательно.
Спасибо за ответ. Можете дать ссылку? Реально не могу найти это в поиске Гугла. Хоть на страницу любого учебника, где это написано.
Будьте любезны, привести скетч целиком!
Сколько можно над людьми издеваться?
Извините, эти два куска и есть целый код. В следующий раз все выложу единым целым. Сейчас смысла нет, поскольку понятно, в чем причина, только все прячут исходник ))
а если так
Да, думаю, так все будет в порядке. Но мне не давала покоя именно одинаковая многократная задержка на старте в 9 секунд.
Именно это я хочу, проверить все на простых примерах, чтобы потом "не попасть на бабки", как Вы выражаетесь. Я и проверял таким образом переменные. У меня в коде было t=0, но я закомментил эту строку сознательно.
Спасибо за ответ. Можете дать ссылку? Реально не могу найти это в поиске Гугла. Хоть на страницу любого учебника, где это написано.
Раз - t не должно быть равно нулю, а реальному значению при загрузке
Два - читайте документацию по си. А по простому - си назначает свободную область памяти для переменной, а чего там написано - это на совести программиста и рендома.
Глобалы и статики дефолтово инициализируются нулём. Остальные - как компилятору понравится.
Два - читайте документацию по си. А по простому - си назначает свободную область памяти для переменной, а чего там написано - это на совести программиста и рендома.
Спасибо и все же. Ткните меня в текст.
Все пишут читай, но ни один не дал ссылку на этот текст.
а если так
Еще раз просмотрел код. Очень красиво. А else заодно не надо убрать?
Блин, я пока так не могу писать. Только с реверансами :) которые выражаются в большем количестве строчек.
Но я обязательно научусь. Это вообще первый мой код для контроллера (по секрету). Не считая учебы, но там все далеко от действительности.
А зачем вы закомментили строку приравнивания (20)? В следующий раз реле разве включится? Разница больше не будет меньше 90с.
Это верно только для динамических (автоматических) переменных. Статические (в т.ч. и глобальные) инициализируются нулями. Это С++, не путайте.
Извините, эти два куска и есть целый код.
Неправда. Здесь нет объявления переменных.
смысла нет
Тогда и пытаться Вам помочь смысла нет.
Тогда и пытаться Вам помочь смысла нет.
Виноват. Вот полный код до компиляции. Но я же в песочнице, давайте мне хоть какую скидку на ошибки.
У меня всё ок, не на тини, правда. Условие с сенсорами заремил, чтобы не мешалось, сразу в LOW щёлкает.
Это к Мегафону!
"В "Ашане" скидок не бывает, там всегда низкие цены" :-)))
У меня всё ок, не на тини, правда. Условие с сенсорами заремил, чтобы не мешалось, сразу в LOW щёлкает.
То то и оно!
Я на Нано отлаживал и в монитор смотрел, все ок было. А тут такие дела.
Вообще мне очень нравится тема микроконтроллеров, и хочу посвятить этому ближайшие годы, пока сколько вижу. Сначала был простой код, даже без внутренних подтяжек. Все работало абы как. Потом код усовершенствовал, потом внешние резисторы везде, потом защита питания от наводок.
Специально ищу ошибки, чтобы понять кто их генерит. А вот тут сел в лужу. Но у меня тинек больше нет, скоро приедут, сделаю еще одну копию, посмотрю что там.
Это верно только для динамических (автоматических) переменных. Статические (в т.ч. и глобальные) инициализируются нулями. Это С++, не путайте.
Евгений - оно конечно так, но за неициированнеую переменную я бы в лоб давал. Не Вам, а студентам. Пусть понимают чего делают.
Это верно только для динамических (автоматических) переменных. Статические (в т.ч. и глобальные) инициализируются нулями. Это С++, не путайте.
Правильно ли я понимаю, что в моем случае переменная на старте должна принимать значение "0"?
И кто-нибудь снизойдет указать место, где это прочесть?
за неициированнеую переменную я бы в лоб давал. Не
Трудно что-либо возразить :)
И кто-нибудь снизойдет указать место, где это прочесть?
Это просьба такая была?
Пожалуйста: International Standard ISO/IEC 14882:2017 «Programming languages — C++», §6.6.2, стр. 66 (ссылка на файл с этим документом имеется в первой теме раздела "Песочница").
за неициированнеую переменную я бы в лоб давал. Не
Трудно что-либо возразить :)
а "умный" компилятор нас не спасает?
И кто-нибудь снизойдет указать место, где это прочесть?
Это просьба такая была?
Пожалуйста: International Standard ISO/IEC 14882:2017 «Programming languages — C++», §6.6.2, стр. 66 (ссылка на файл с этим документом имеется в первой теме раздела "Песочница").
да, я уже испробовал разные формулировки просьбы предоставить ссылку на источник, Вы на эту откликнулись. Спасибо. Я обязательно прочту.
-----
Очень много предъявляется к новичкам при создании темы, в одну только сторону. Я не нашел ссылку в первой теме. Почему бы не скопировать ее сразу сюда? Вот что есть:
Для "нулевиков" в программировании и создании устройств на Ардуино:
Слоган маркетологов: "Каждая кухарка может программировать Ардуино", имеет право на жизнь, при условии, что кухарка изучила основы. Без них, не может даже академик.
Ниже, перечень литературы по Си и Ардуино, на разный уровень подготовки. Прочитайте хотя-бы одну (не справочники и шпаргалки).
Раздел "Программирование" данного форума (небольшой справочник по языку).
Предложенные пользователями форума:
Гололобов В.Н. О проекте Arduino для школьников (и не только) 2011
http://vgololobov.narod.ru/content/arduino/intro.html
Руководство по освоению Arduino 2012
http://robot-kit.ru/manual/Arduino_Sketch_Robot-kit.ru.pdf
Ещё выложил неплохую книгу Белецкого "Энциклопедия языка Си":
https://yadi.sk/d/7p0JU1dev2mFN
Керниган, Ритчи "Язык программирования СИ".
Здесь более подробный справочник по языку Arduino:
http://atmel.ucoz.ru/publ/spravochnik_po_jazyku/1-1-0-1
Онлайн-справочник предложенный ratman: http://wikihandbk.com/wiki/Arduino? Кроме обзоров и примеров по языку, содержит описание и примеры многих функций и библиотек.
Шпаргалка по Ардуино
https://sites.google.com/site/mechatronicsguy/arduinocheatsheet
книги Programming language C++ я не вижу в этом списке.
Я нашел и прочел. Моя переменная глобальная. Значит при запуске ей присваивается ноль. То, что я закомментил t=0 не имеет значение. Вопрос не в том, как сделать чтобы программа работала правильно с самого начала, а почему одинаковая задержка старта.
Спасибо всем неравнодушным, кто отписался. Хотя этот бессмысленный тред можно было свести к 2-3 сообщениям. Но то было бы неверно, поскольку это есть глобальная переменная -"русскоязычный форум" со своими ISO стандартами :)))
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что никто не знает.
Это и есть ответ на самом деле.
Поищу еще.
Запустите блинк с периодом в секунду, проверьте секундомером - правильно ли идут часы внутре вашей тини.
Запустите блинк с периодом в секунду, проверьте секундомером - правильно ли идут часы внутре вашей тини.
Спасибо.
Плата уже установлена и работает. Полагаю часы верные, поскольку я проверял 90 секунд по реле. На таком большом промежутке работает все верно. То есть ошибка на 90 была сильно заметна при неверном тактировании.
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что
Вы неверно зашли, но так этого и не поняли. Жаль.
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что
Вы неверно зашли, но так этого и не поняли. Жаль.
Так поясните!
Простой вопрос: почему такая одинаковая задержка? Не хотите отвечать или не знаете, Ваше право.
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что никто не знает..
А реле у вас, часом, не низким уровнем включается?
Подключите вместо реле светодиод.
Если Вы читали правила форума и продолжаете упорно их игнорировать, то что-либо пояснять
Было ошибкой со стороны коллег пытаться Вам помочь, не требуя предварительно выполнить правила. Если бы никто ничего не отвечал, а потребовали бы полного кода, схемы сборки и точной информации о деталях, вопрос бы давно решился. А так из Вас тянут всё по чайной ложке - это ещё на неделю (Вон, человек уже начал Вас про схему пытать. Глядишь, потратит полдня и что-нибудь полезное из Вас вытащит).
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что никто не знает..
А реле у вас, часом, не низким уровнем включается?
Подключите вместо реле светодиод.
Именно.
Не могу к сожалению, плата установлена, поясните пожалуйста, что может быть? Что Вы имеете в виду.
Было ошибкой со стороны коллег пытаться Вам помочь, не требуя предварительно выполнить правила. Если бы никто ничего не отвечал, а потребовали бы полного кода, схемы сборки и точной информации о деталях, вопрос бы давно решился. А так из Вас тянут всё по чайной ложке - это ещё на неделю (Вон, человек уже начал Вас про схему пытать. Глядишь, потратит полдня и что-нибудь полезное из Вас вытащит).
Мне кажется, Вы ошибаетесь. Да, я выложил код полностью не в первых сообщениях. Да, моя вина новичка, не придал значения стартовым строкам. Но на то я новичок, а здесь песочница.
Я правда стараюсь, только Вы не можете посмотреть на ситуацию глазами новичка. Это как ребенка выпустить в новый мир - разбегается все: глаза, руки. Ноги ))))
Но Вы ведь заметили, что даже несмотря на то, что я сначала написал только основную часть кода, остальная информация не повлияла на суть?
Все свелось к инициализации переменной. Поэтому я написал фразу "не имеет смысла", но Вы уцепились за нее и пытаетесь постоянно указать на это. Вас это обидело? Извините, и в мыслях не было.
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что никто не знает..
А реле у вас, часом, не низким уровнем включается?
Подключите вместо реле светодиод.
Именно.
Не могу к сожалению, плата установлена, поясните пожалуйста, что может быть? Что Вы имеете в виду.
Что плата и реле компаундом залиты, так что светодиод временно прикрутить никак нельзя?
Ну поменяйте, тогда, в setup()
digitalWrite(ledPin, HIGH); на
digitalWrite(ledPin, LOW);
И посмотрите как будет работать.
Код Вы выложили "с боем", а схему не выложили до сих пор. Так же нет никакой информации обо используемых деталях. Из того, что Вы новичок, люди не научатся без схемы и кода угадывать что у Вас там.
Ну, правильно, ответа Вы так и не получили. Тем, кто пытался ответить - им не хватает информации, а многие не заморачиваются что-то объяснять (как я сейчас, сдуру), а просто не вникают и игнорируют тему.
Вы постоянно пытаетесь мне что-то доказать - не надо. Если Вы хотите получить ответ на вопрос, Вы должны выложить код, схему ( о по требованию, и фото сборки) и предоставить информацию об используемых деталях. Без этого тема превращается в гадание на кофейной гуще на 100 страниц. Это факт. Просто примите его и не доказывайте мне ничего, ладно.
Итак, ответ на свой вопрос про 9 секунд я не получил. Потому что никто не знает..
А реле у вас, часом, не низким уровнем включается?
Подключите вместо реле светодиод.
Именно.
Не могу к сожалению, плата установлена, поясните пожалуйста, что может быть? Что Вы имеете в виду.
Что плата и реле компаундом залиты, так что светодиод временно прикрутить никак нельзя?
Ну поменяйте, тогда, в setup()
digitalWrite(ledPin, HIGH); на
digitalWrite(ledPin, LOW);
И посмотрите как будет работать.
Холодно там, уже -8 ))) и тесно в коробке.
Спасибо большое. Сейчас приедут остальные тиньки, соберу все еще раз на столе и буду гонять, нельзя же так оставить. Посмотрю - повторится ли ошибка.
Не имея опыта, можно я предположу? Думаю, ничего не поменяется. Низкий уровень из-за того, что модули реле Ардуино так удобно включать. Но что именно произойдет при смене схемы включения? Подтяжки все стоят, мультиметром все было хорошо. Не могу представить.
Я выступаю за "совпадение неизвестных обстоятельств". Пока самый простой ответ. Монитор порта не работает, как бы вот внутрь тиньки заглянуть?..
Код Вы выложили "с боем", а схему не выложили до сих пор. Так же нет никакой информации обо используемых деталях. Из того, что Вы новичок, люди не научатся без схемы и кода угадывать что у Вас там.
Ну, правильно, ответа Вы так и не получили. Тем, кто пытался ответить - им не хватает информации, а многие не заморачиваются что-то объяснять (как я сейчас, сдуру), а просто не вникают и игнорируют тему.
Вы постоянно пытаетесь мне что-то доказать - не надо. Если Вы хотите получить ответ на вопрос, Вы должны выложить код, схему ( о по требованию, и фото сборки) и предоставить информацию об используемых деталях. Без этого тема превращается в гадание на кофейной гуще на 100 страниц. Это факт. Просто примите его и не доказывайте мне ничего, ладно.
Ладно.
Схема. К сожалению, под рукой ничего нет, чтобы сейчас отрисовать лучше. Фото из интернета, максимально приближенные к реальным.
Все входы и выход подтянуты через резистор 10К к земле или +питания, в комментах кода есть указание, какой куда.