Официальный сайт компании Arduino по адресу arduino.cc
Посудомоечная машина
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 13/07/2018 - 14:48
Подкинули мне посудомойку бесплатно. Дело в том, что она без ЭБУ. Фирма не популярная. Все комплектующие работают. Решил я ее на китайской Uno сделать. Вот только она пинается. Я в IDE не спец, да и в программировании многого не знаю. В общем программа рабочая, но иногда слетает. Если код более менее правильный, дело может в посторонних шумах от 220?
Вот код
Код большой, чтобы сильно не вникать... Прерывание по таймеру, оно же таймер. Согласно заданного режима работы переменным ряда F(x) и T(x) присваиваются значения. Через оператор условия if выполняются циклы согласно показаний датчиков температуры, счетчика воды. Обычно клинит в начале на 12 секунде или в конце цикла мойки перед последним сливом.
С этим Вам вот сюда.
А если у Вас техническая проблема, то потрудитесь объяснить её понятным техническим языком.
Или Вы думаете, что кто-то начнёт подробно изучать Ваш код с целью определить как именно и зачем она у Вас "пинается"?
Схему соединений и фото монтажа выложите, пожалуйста.
На будущее - это раздел для готовых проектов. Для вопросов и просьб о помощи есть другие разделы.
Код большой, чтобы сильно не вникать... Прерывание по таймеру, оно же таймер. Согласно заданного режима работы переменным ряда F(x) и T(x) присваиваются значения. Через оператор условия if выполняются циклы согласно показаний датчиков температуры, счетчика воды. Обычно клинит в начале на 12 секунде или в конце цикла мойки перед последним сливом.
Данунах, код у него большой. Там и датчиков куча.
Датчик - 500 евро
реле - 300 евро
нетолерантный софт - 2000евро
Извините, уважаемый.
Но соглашусь с ЕвгенийП.
Придумайте свой алоритм и его программируйте.
Удачи!
Еще раз, извините.
Ваша программа не читаема. При этом скорость выполнения очень маленькая.
Может стоит все-таки перейти на ООП?
И события по прерываниям?
Не пойму этих высказываний про евро... Сразу накинулись как шакалы. Проект готовый. Машинка работает. А кому в лом в код вникать — не утруждайте себя в комментариях.
Уважаемый, а как нам понять Ваше "пинается"? Вот прям натурально берет Вас за шкирятник, размахивается дверцей, и по жопе? Тогда я понимаю, почему Вы такой нервный, конечно, но - может Вы что-то другое имели ввиду?
Изложите на понятном языке, что именно происходит не так. Код Ваш и правда сложен для понимания, поскольку комментариев там практически нет, зато есть неимоверное количество переменных с ничего не говорящими именами, зато повторяющимеся функциями, если верить тем немногим комментарием, которые там есть. :)
Подкинули мне бричку бесплатно, фирма непопулярная. Проблема в том, что под капотом пусто. Решил сделать движитель из своего металлолома. Только вот она сопротивляется. В автоделах я не спец, да и вообще не много в этой теме знаю. Вобщем-то всё рычит и дым пускает, только на выезде из гаража встает колом. Если я все правильно собрал, может дело в заливке пола гаража?
Расскажу по порядку.
Пины с 8 по 12 подключены через мосфеты к реле.
Соответственно под них идут булевые переменные.
Переменная times считывается в цикле loop() и присваевает значение переменной timer счетчика (прерывание по таймеру). Так как прерывания срабатывают с момента запуска программы, переменная Times дает возможность прерывать увеличение значения таймера.
В свою очередь в цикле loop() происходит изменение значения Times:
Если кнопка Пуск/Пауза нажата проверяется условие прерывания счетчика, если отпущена - присваевается соответствующее значение для Times.
И проверяется условие на выполнение работы или ее прерывание.
Череда if() можно бы и упрастить в виде case()... Но в целом это последовательность условий по запуску или остановке блоков посудомоечной машины.
Счетчик воды - крыльчатка с магнитом и герконом. Производится считывание количества оборотов колеса. Температура считывается по собственной формуле через термопару машины.
По итогу выполнения последнего условия машинка должна сброситься в ноль, но это не всегда происходит. Да и почему программа после 12 секунд работы производит сброс данных переменных до начальных?..
Подкинули мне бричку бесплатно, фирма непопулярная. Проблема в том, что под капотом пусто. Решил сделать движитель из своего металлолома. Только вот она сопротивляется. В автоделах я не спец, да и вообще не много в этой теме знаю. Вобщем-то всё рычит и дым пускает, только на выезде из гаража встает колом. Если я все правильно собрал, может дело в заливке пола гаража?
Скажем так, что двигатель есть, а как подключить систему питания, форсунки подстроить и коробку передач подобрать. Так вот тут проблема с настройкой, а не двигателем и бричкой...
Просто здесь поязвить любят, да под**бнуть. На другое видимо мозг истощен))))
Т.е. как именно пинается нам так и не расскажут? Судя по коду, там до хрена где пинаться можно. ну, например,
А что делать, если она, сцуко, равна F2 или там F3, ну и далее по списку? Ничго не делать, получается.
Та же хрень про ифы, связанные с r чуть повыше.
А вообще, когда в коде видишь глобальные переменные times и Times - рупь за сто - толком работать не будет :(
Это условия временных промежутков. F0 = 0, F1 = 5, F3 = 35... Если время по таймеру в промежутке от F0 до F1, то есть больше 0 и меньше 5, происходит одно действие. Почему не будет работать, если глобальные переменные Times и times?
Простите, про переменную r не упомято... Это считывается сопротивление на тумблере выбора режима работы. Тумблер — шесть делителей напряжения. Выбираешь режим, временнЫм переменным ряда F и T присваиваются значения. Это при условии, что таймер не был запущен.
Т.е. как именно пинается нам так и не расскажут? Судя по коду, там до хрена где пинаться можно. ну, например,
Выше написано
По итогу выполнения последнего условия машинка должна сброситься в ноль, но это не всегда происходит. Да и почему программа после 12 секунд работы производит сброс данных переменных до начальных?..
Принцип работы.
Действия пользователя : Подаем питание >> Выбираем режим>> Нажимаем кнопку Play/Pause
Если мойка еще не производится, т.е. таймер равен 0, режим можно изменить. Выбрали к примеру режим 1. Делитель напряжения на тумлере переключения выдает на ардуино 2.5V, или значение 524. Оно может выдаваться 523, 520. Для этого выставлено условие с нижней и верхней границей if (r > 500 && t < 600). Происходит присвоение переменных ряда F и T.
Далее выполняются условия
То есть:
1.
если (times > 0 && times < 5) значение выводов реле LOW ( временная задержка);
2.
если (times > 5 && times < 30) значение выводов реле LOW, кроме KS (происходит слив воды);
3. Вторая временная задержка;
4.
если (times > 35 && times < 155)
Отключается блокировка нагрева для следующего условия по таймеру (times > 160 && times < 760) работы насоса мойки и нагревателя:
Если счетчик воды (s < 750), аквастоп открыт, если (s > 750), аквастоп закрыт и происходит скачок по времени. Напор воды бывает разный, поэтому на набор выделяется 120 секунд. В среднем набор воды занимает 65 - 70 секунд.
Так согласно значению таймера происходит последовательное выполнение условий if.
ВНИМАНИЕ!!!
ВОПРОС: "ПО КАКОЙ ПРИЧИНЕ ПРОИСХОДИТ СБОЙ - СБРОС ПЕРЕМЕННЫХ ТАЙМЕРА НА 12 СЕКУНДЕ?
P.S. " Если и дальше в комментариях писать чушь, которая не относится к данной теме, то проблему не решить"
Работать-то оно будет, компиляторы нонче умные. Но так не принято делать. Потому что разница только в регистре букв, и ошибится и запутаться при отладке очень легко.
Всем спасибо!!!
Проблема решена
Ты вообще читал, что тебе пишут? А если равно 5, то в какую категорию попадает? Ни в какую. И так же про всё остальное.
Потому что в них очень легко запутаться. Но дело даже не в этом. Человек, который пишет так, обязательно напишет "что-нибудь ещё".
Опыт показывает, что программы с такими закидонами нормально не работают.
Проблема решена
Судя по коду, решена до следующего глюка.
Ты вообще читал, что тебе пишут? А если равно 5, то в какую категорию попадает? Ни в какую. И так же про всё остальное.
А нафига мне эта 5???
Я мог написать >= или <=, но это так ринципиально потерять в таймере секунду?
По поводу Times и times... Это разные переменные и я это учитываю. Не наю кому как, а мне так проще...
Я мог написать >= или <=, но это так ринципиально потерять в таймере секунду?
Принципиально - захватить границы проверяемого интервала. Вот я смотрю, вы паяете хорошо. Наверное понимаете, что такое оставить вход без подтяжки. Ну вот тут то же самое.
Ну, проще, так проще. Сюда-то зачем пришёл, если всё лучше всех знаешь? Делай как хочешь. Только не плачь потом, что глючит.
Да и про программирования через цифровой автомат ТС не слышал ни разу.
ПС:#258
Кстати про категории...
А если (timer > 20 && timer < 40) одно действие, а если (timer > 80 && timer < 120) второе действие, куда здесь выпадет промежуток 40 - 80???
Переменные не меняюстя, первое действие продолжается до 81.
В моем случае, (timer > 20 && timer < 40) процесс длится 20 секунд, как мне и нужно, а не 19...
В данномслучае по событию присвоится значение и будет выполняться до следующего события. Или я не прав?
В моем случае, (timer > 20 && timer < 40) процесс длится 20 секунд, как мне и нужно, а не 19...
А посчитать пальцев не хватает? Ваш процесс состоит из
21, 22, ... 29, 30 ... привлекаем пальцы ног ... 31, ..., 39 ой!!! всего 19 получилось :((((
Может я не программист и не все знаю
Почему этот код работает так как я хотел:
timer = 6 - светодиод загорается
timer = 26 - светодиод гаснет
timer = 36 - светодиод загорается
timer = 46 - светодиод гаснет
и почему-то здесь между зажиганием и угасание светодиода 26 - 6 = 20 секунд...
Почему это неправильно?
И горит с 6 по 16 секунды
И может это тоже самое?
ВладиславНово, а теперь тоже самое но через millis() без delay()
Просто сравнение
можно пропустить, а вот
программа полюбому прочитает
ВладиславНово, а теперь тоже самое но через millis() без delay()
Нафига? У ТС и так всё работает :)
Так что было то?
Типы переменных в уравнениях и сравнениях не совпадали и в кодировке после набора воды F12 -F13 ошибка была, таймеру присваивальсь значение F5 вместо F13.
https://www.youtube.com/watch?v=T3y10inc4ks
Хаха
Люди. Я не хочу показать, что я супер программист и мне пофиг на Ваше мнение. Я бы не написал бы сюда... Если вы не можете или не хотите объяснить, прошу, пожалуйста скиньте ссылку на умные книжки по программированию.
А пока я вижу кучу умников в коронах.
ВладиславНово, зачем вам ссылки на умные книги. Их надо не только периодически читать, но и понимать что в них написано. И блин на каждую надо потритить не меньше недели. Опять же книги делятся на Синтаксис языка Си и на умение правильно организовывать программу. А у вас F5 вместо F13, а дальше что E2 на E4 и потом прикрыться конем , мат на 10 шагу. Ведь Си это язык высокого уровня, так почему вы на нем пишете как на ассемблере .
Потому что я программирую 4 месяца.
Если не считать года в шараге на Pascal.
И то это было 8 лет назад. А душа рвется... Вот посудомойке мозг приделал... Работает... Как надо работает. Но согласно подсказкам выше, это не правильно, потому что ВЫСОКАЯ ЛОГИКА и мое низкое знание сделали кое-как работающую говнопрограмму.
Если вы не можете или не хотите объяснить, прошу, пожалуйста скиньте ссылку на умные книжки по программированию.
Дорогой, Вот ты написал, что оказывается перепутал переменные.
в кодировке после набора воды F12 -F13 ошибка была, таймеру присваивальсь значение F5 вместо F13.
А разве я тебе не писал вчера, что так бывает всегда, когда у переменных похожие имена, что их крайне трудно не перепутать? Не в одном месте, так в другом обязательно будет ошибка и толком такие программы не работают. Не писал я тебе вот этого?
Потому что в них очень легко запутаться. Но дело даже не в этом. Человек, который пишет так, обязательно напишет "что-нибудь ещё".
Опыт показывает, что программы с такими закидонами нормально не работают.
Писал.
Но ты не слушаешь, что тебе говорят специалисты, ты послал меня "на" и сказал, что тебе так удобнее.
Ну, удобнее, так удобнее, только нахрена потом заявлять, что
А пока я вижу кучу умников в коронах.
Т.е. я тратил на тебя время, писал тебе как правилльно делать, и как нельзя делать, ты посчитал себя умнее всех, послал меня, а теперь, когда получил прямое подтверждение моих слов в собственном коде, заявлешь, что видишь тут кучу умников, которые не хотят тебе помогать?
Давай я не буду писать тебе кого вижу я, а то роскомнадзор сайт закроет.
Вот посудомойке мозг приделал... Работает... Как надо работает. Но согласно подсказкам выше, это не правильно, потому что ВЫСОКАЯ ЛОГИКА и мое низкое знание сделали кое-как работающую говнопрограмму.
Вы совешенно правы. Вы умнее всех. Собравшиеся здесь придурки только и могут, что щёки надувать и неостроумно стебаться. Молодец. А теперь успокойтесь и продолжайте с этим жить. Кстати, почитайте пост #46, внимательно. А теперь окончательно успокойтесь и продолжайте с этим жить.
Я был не прав... Соглашусь не совсем, что писали вы. Но что за чушь пишут другие?
Я ошибся в том, что скопировал код условия
В условие
Поэтому программа возвращалась к циклу 4.
Некоторые переменные (temp и T1(T0) имели разные типы данных.
После этих исправлений все лаги пропали. Посудомойска отработала 10 циклов из 10 без нареканий согласно кода.
Никого на*** я не посылал, а если все сообщения принимать только на себя, то это нужно быть очень толерантным.
Я не считаю здесь идиотами никого - ни Вас, ни себя.
А если в переменных проблема, то тут черт ногу сломит
http://arduino.ru/forum/proekty/sistema-kontrolya-grouboksa-stolknulsya-...
Я не считаю здесь идиотами никого - ни Вас, ни себя.
А если в переменных проблема, то тут черт ногу сломит
http://arduino.ru/forum/proekty/sistema-kontrolya-grouboksa-stolknulsya-s-problemoi
ПС: Если вам хочется увидеть как писать код чуть получше то отсюда #25