нужна помощь! Таймер программы....
- Войдите на сайт для отправки комментариев
Здравствуйте!
Я буквально на днях приобрел Ардуино и сразу захотелось начать делать различные проекты.
Сейчас застрял на теме ВРЕМЯ...
Уже создал меню на дисплее, сделал кнопки, теперь нужно написать скрипт, который бы:
включал таймер при нажатии на 1 кнопку, ставил паузу при нажатии на другую, опять продолжал отсчет с 3й кнопки и снова была пауза от нажатия 2й. и самое главное, когда таймер дойдет до 1минуты или 1час(это ж всегда можно переделать) чтобы включалась другая программапосле достижения заданного времени.
Я представляю себе это так:
int timer = 0; int endtimer= 60000; // 60секунд void loop() { if(кнопка1,HIGH) то включается таймер и начинает отсчет digitalWrite (motor,HIGH); else if (здесь опять таймер>=endtimer); { digitalWrite(LED,HIGH); }
Это примерно как я представляю себе код.
Пожалуйста, кто знает, подскажите как сделать такой таймер чтобы он правильно работал? Я пробовал искать, но поиски не увенчались успехом.
p.S. У меня Arduino Uno
Чтобы получить время, используй функцию millis(). А далее цепочка if else и арифметических операций
я просто меньше недели этим занимаюсь, еще всех тонкостей не знаю... про millis() я читал, но так и не понял, как его запустить и потом сделать паузу, а не сброс, и снова продолжить....
Подскажите хоть простенький код, по которому можно было бы понять принцип работы....?
JuriySOFT, если вам датут готовый код, вашему образованию это в пользу не пойдёт. В этом разделе гигантское количество аналогичных примеров и задач, на работу с кнопками, на работу с временем, часы и таймеры в ассортименте. Возьмите себе сначала задачу попроще, -считать и выводить на дисплей минуты и секунды например. Потом совершать какие-то действия при достижении определённого времени, и в конце-концов придёте к тому, что задумано.
JuriySOFT, если вам датут готовый код, вашему образованию это в пользу не пойдёт. В этом разделе гигантское количество аналогичных примеров и задач, на работу с кнопками, на работу с временем, часы и таймеры в ассортименте. Возьмите себе сначала задачу попроще, -считать и выводить на дисплей минуты и секунды например. Потом совершать какие-то действия при достижении определённого времени, и в конце-концов придёте к тому, что задумано.
я не прошу готовый код, я прошу пример, благодаря которому я смог бы поэксперементировать и понять принцип работы, чтобы уже потом смог сам написать то что мне нужно...
Чтобы понять принцип, отложите клавиатуру в сторону и нарисуйте на бумаге блок-схем алгоритма
Принцип можно понять когда видишь пример перед глазами....
Теория это хорошо, но лучше практика...
P.S. Я жведь не просил рассуждать на тему зачем мне нужен код примера, я просто попросил, если у кого-то он есть, поделиться им, а если никто не знает, то не обязательно было здесь писать что-то вроде того, что было написано в предыдещих сообщениях...
Или это просто привычка флудить? Если не хватает общения, то для этого есть другие места...
В данном случае я попросил помощи! Кто сможет, я уверен, поможет. А кто не может помочь, лучше просто проходите мимо этой темы.
Теория это хорошо, но лучше практика...
да вы бы лучше сами, вместо того, чтобы поучать других, что они не так и не то советуют, лучше попробовали свои советы к себе применить. К примеру, загрузили свой пример кода в среду, попытались откомпилировать..... получили бы хоть 5 строчек, но работающих.
Теория это хорошо, но лучше практика...
да вы бы лучше сами, вместо того, чтобы поучать других, что они не так и не то советуют, лучше попробовали свои советы к себе применить. К примеру, загрузили свой пример кода в среду, попытались откомпилировать..... получили бы хоть 5 строчек, но работающих.
у меня уже есть работающий код с экраном и кнопками, мне иосталось понять принцип как сделать таймер.
что касается моих советов, то я всегда помогаю людям кто интересуется html, т.к. я знаю этот язык и никогда не говорю никому: "для этого есть поиск..." или что-то подобное....
Я сейчас решил начать изучать C++ и в этом я новичек, поэтому и спрашиваю здесь. Для этого и создан этот форум, чтобы спрашивать и делиться тем что знаешь!!!!!!!!!
Поэтому я прошу в данной теме писать сообщения по теме или вообще не писать ничего.
int stopTime = 0;
byte en=0:
int last;
void loop()
{
if(digitalRead(btnPin) == 1)
{
stopTime = 60*1000;
last = millis();
en = 1;
}
if(en)
{
if(millis()-last >= 1000)
{
last = millis();
stopTime--;
}
if(stopTime == 0)
{ digitalWrite(ledPin,1);
en =0;
}}}
Сорри за плохое форматирование, с телефона набирал
Спасибо большое за пример, сейчас буду пробовать! Как-только получится, отпишусь!))
надо сетап добавить
надо сетап добавить
Это набросок на коленке, тутт много что можно улучшить
Я тут немного поэксперементировал с урокам и получилось вот что:
Но тут проблема, счетчик начинает считать от запуска программы, а не от нажатия кнопки!...
Подскажите, где проблему искать?
Мне кажется, что нужно что-то поменять тут:
Но вот что? Я пока не знаю, подскажите!?
Нарисуй блок схему алгоритма
Нарисуй блок схему алгоритма
Блок схемы не особо умею рисовать, но что смог.....
Где режим 1-4 , там кнопки.... при нажатии на которые и происхоит то или иное действие
JuriySOFT, начните с чего-то попроще. Ваш текущий код весь в логических ошибках.
Например попробуйте нажатием кнопки зажигать светодиод на 5 секунд.
Через Delay() элементарно. а вот через Millis() пока что-то никак до меня не доходит....
JuriySOFT, ну хорошо, вот вам скетч, с подробным описанием. При нажатии на кнопку светодиод светится 10 секунд и гаснет. Вам домашнее задание -доработать скетч так, что-бы повторным нажатием на кнопку (до истечения 10 секунд) погасить светодиод.
имхо myflag - бесполезная в принципе-то переменная ;)
com, ага, но она полезна при расширении возможностей. Я то сначала написал скетч с включением и отключением светодиода при повторном нажатии , но потом эту возможность убрал, что бы товарищ потренировался сам :)
dimax, если одно и тоже (суть состояние процесса, должна ли гореть лампа или нет) хранить в двух переменных, а именно 1)как значение myflag и 2)как уровень сигнала на пине, то рано или поздно эти две переменных как пить дать рассинхронизируются из-за ошибки программиста и наступит неопределенность - должен ли гореть светодиод, если myflag==true и digitalRead(ledPin)==LOW ???
:)))
com, ну соббсно myflag==true и digitalRead(ledPin)==LOW как раз начало условия, которое я специально из скетча убрал :)
вот я и говорю - зачем проверять myflag если ту же самую информацию можно получить из digitalRead(ledPin)? они всегда должны совпадать.
com, совершенно с вами согласен. Myflag был заложен "на вырост", например если светодиод будет мигать.
Похоже зря я старался, топикстартера не интересует ничего кроме его конкретной задачи.
com, совершенно с вами согласен. Myflag был заложен "на вырост", например если светодиод будет мигать.
Похоже зря я старался, топикстартера не интересует ничего кроме его конкретной задачи.
Меня интересует многое, просто пока я не пойму то, что мне нужно, я не могу браться за другие вещи.....
По началу было сложно во всем, потом начал с дисплея, получилось... долго сидел с кнопками, но в итоге получилось что-то.... сейчас мне нужно разобраться со временем..... как сделать старт отсчета времени при нажатии кнопки и по истечении заданного времени включался бы к примеру светодиод
сейчас мне нужно разобраться со временем..... как сделать старт отсчета времени при нажатии кнопки и по истечении заданного времени включался бы к примеру светодиод
Я вам написал этот скетч конкретно под вашу задачу, но что-бы её не решать полностью, и не оставить вас без возможности самому что-то сделать, я сделал логику наоборот. Вам просто нужно переделать логику на свою, и всё.
сейчас мне нужно разобраться со временем..... как сделать старт отсчета времени при нажатии кнопки и по истечении заданного времени включался бы к примеру светодиод
Я вам написал этот скетч конкретно под вашу задачу, но что-бы её не решать полностью, и не оставить вас без возможности самому что-то сделать, я сделал логику наоборот. Вам просто нужно переделать логику на свою, и всё.
Ну это тоже самое, как если б человек попросил бы лопату, а ему дали черенок от неё....и сказали: А остальное сам доделаешь...
Не проще ли помочь человеку, если есть возможность? Или кайф в том, чтобы посмотреть как человек будет долго мучиться, пытаться что-то сделать, задавать много вопросов на которые не получит нужного ответа....?
Еслиб ардуина воспринимала html, я б за пару сек все бы сделал что нужно, а в этом языке я пока еще 0 и пройдет еще время когда у меня начнет что-то получаться путное....
У меня нет знакомых кто мог бы подсказать, поэтому я обратился на этот форум, потому как уже не знаю как дальше быть и что делать....Не получается идти дальше пока эта задача не решена.
JuriySOFT, я вам в который раз повторю -вы начали с слишком сложной задачи. Если у вас задача научиться -учитесь, я вам в 19 сообщении дал довольно простую задачку, гораздо проще чем то, что хотите вы сделать. Усложнять нужно шаг за шагом. Если не хотите учиться, -есть раздел "Ищу исполнителя".
JuriySOFT, я вам в который раз повторю -вы начали с слишком сложной задачи. Если у вас задача научиться -учитесь, я вам в 19 сообщении дал довольно простую задачку, гораздо проще чем то, что хотите вы сделать. Усложнять нужно шаг за шагом. Если не хотите учиться, -есть раздел "Ищу исполнителя".
Теперь то я понял для чего вы тут все сидите.... чтобы закидать сначала сообщениями не по теме, затем запутать человека, чтобы поставить в "безвыходную" ситуацию, и чтобыф человек обратился в платный раздел, где за 5 сек, все те кто ему до этого якобы добра желали, напишут за деньги нужный ему код....)))
P.S. если б я не хотел учиться, я бя сразу обратился к тем, что мне целиком напишет то что мне нужно.
и чтобыф человек обратился в платный раздел, где за 5 сек, все те кто ему до этого якобы добра желали, напишут за деньги нужный ему код....)))
Да "тьфу на вас". Вам человек объяснял, давал учебные задачи, тратил время. Все это бесплатно. И не пытаясь даже намекнуть на "платный раздел". Может вы не вкурсе, но вот так "учить" это гораздо трудней, нервней и времяемко чем "тупо взять и дать готовое".
И если бы вы полазили по форуму, то вы бы увидели что десятки людей нашли решение своих проблем и смогли научится именно таким образом.
И что-бы вам было понятно. Сам форум/раздел "за деньги", появился именно для того, что-бы очистить основные форумы от "помогите за деньги". Не отвечающие были инициаторами создания раздела, а именно те кто хотят что-бы им помогли. Цель была именно, что-бы "локализировать" комерцию. Раз уж совсем искоренить ее невозможно. Раз "спрос" все равно имеет место быть.
Так что, то что вы не способны научится "бесплатно", а предпочитаете искать огрехи в "учителях" - это сугубо ваша проблема. Может быть "учитель" и "фиговый". Да вот только - какой есть.
Хотите - становитесь "идельным учителем". Вакансий - хватит на всех. Никаких "заявлений, конкурсов и т.п.". Просто берите и помогайте. Собирайте свои "спасибо". И свои "проклятия". Будет и то и другое.
P.S. А если еще лучше пошерстите, то найдете не один пример, когда человек просил "за деньги", а ему те же самые люди которые "работают" - делают бесплатно.
JuriySOFT, ну конкретно я ничего не писал за деньги. Вы поймите, тут вас всегда поддержат, если вы хотите учиться, я вам ещё в начале темы написал, что нужно делать, но вы не хотите слушать, и не хотите ничего учить. Значит вам нужен тот, кто всё сделает за вас, как иначе?
Теперь то я понял для чего вы тут все сидите.... чтобы закидать сначала сообщениями не по теме, затем запутать человека, чтобы поставить в "безвыходную" ситуацию, и чтобыф человек обратился в платный раздел, где за 5 сек, все те кто ему до этого якобы добра желали, напишут за деньги нужный ему код....)))
а еще мы делаем фигурки нубов и втыкаем в них иголки, чтобы запутать окончательно
а еще мы делаем фигурки нубов и втыкаем в них иголки, чтобы запутать окончательно
Только тыкаем, естественно, с помощью сервы. И на иголку выдаем PWM.