я конечно не проверял, писал чисто теоретически, логику работы не расписывал, обязан работать, под рукой нет кнопок, сейчас скрепку найду, сэмулирую, что там за косяк со скетчем
Мой совет: распишите на листке каждую строку из луп() что делает. Тогда поймете.
У Вас два действия.
1. ВКЛ-ть. нагрев. Какие события должны произойти для этого? Сначало словами, а потом пихаем в один if(событ_1 и событ_2 или событ_3).
2. ОТК-ть нагрев. Какие события должны произойти для этого? Сначало словами, а потом пихаем в один if(событ_1 и событ_2 или событ_3).
странно, по тому, что когда я снизу беру GND (а все кнопки и выводы сверху) программа не работает, в плоть до того, что сама включает и выключает сигнал на выходе... а когда сверху подключил все заработало как надо.
Притяните кнопку к земле (кажется так у Вас в скетче), эта проблема решится
Это ладно. Хуже всего, когда время палёное подсунут :(
так я ему подсказал про время, одноразовость выполнения процедуры включения логикой обеспечивается!!! )))
Но про логические операторы ТС читать не стал
Вы бы ещё про электротехнику ТС начали читать. Науку где если нужен контакт, то железный. А где контакт должен отсутсвавать, то он обязательно должен отсутствовать, без всяких соплей. Но похоже там из соплей вся схема собрана.
Енто "вроде понятно" . Но опять же у меня не кнопки будут, у меня будит приходить сигнал с другой платы, которая будет его подавать по команде с ПДУ. А там как ни крути логическая единица...
Енто "вроде понятно" . Но опять же у меня не кнопки будут, у меня будит приходить сигнал с другой платы, которая будет его подавать по команде с ПДУ. А там как ни крути логическая единица...
Не пойму что не так? && это логический элемент "и" . == применяется для сравнения. В функции if проверяется утверждение в скобках( ) если верно то выполняется команда в фигурным скобках{ }.
То есть тут он смотрит состояние выхода HOT равно == LOW ?
Что не так то?
Как зачем, книгу пишешь - "Программирование шаг за шагом"...
Раз написал попробую ТС пояснить...Построчно...
#define PIN_BUTTON_ON 10
#define PIN_BUTTON_OFF 3
#define PIN_RELAY_HOT 13 //9 светодиод на 13 пине для проверки
#define RELAY_SIGNAL_ON HIGH // Определяем для компилятора значение сигнала на включение
#define RELAY_SIGNAL_OFF !RELAY_SIGNAL_ON // Сигнал для выключения принимается инверсным сигналу
включения, то-есть если нам потребуюся инверсные сигналы для включения реле, для
изменения программы только в одном месте (строчкой выше)заменим HIGH на LOW
#define BUTTON_STATE_ON LOW // Определяемся с состоянием пина на включение,
теперь если нам потребуется инвертировать входной сигнал с низкого уровня на высоки
достаточно сменить LOW на HIGH, переписывать тело программы, а она может иметь тысячи строк
не потребуется
#define BUTTON_MODE INPUT_PULLUP // входные пины конфигурируются на ввод и к ним
подключаются внутренние подтягивающие резисторы. То-есть на этих пинах присутствует HIGH сигнал.
Если нам потребуется сменить разрешающий сигнал с низкого на высокий, то в этом месте
определение примет вид просто INPUT и нам необходимо пины подтянуть к шине GND hрезистором
10 килоом
#define WARMING_DURATION 3000UL // Здесь компилятору сообщается необходимое время таймера на прогрев двигателя
uint32_t warmingStartTime; // Это описание типа переменной которое мы выделяем для хранения
значения счетчика millis в момент прихода сигнала на включение обогрева, это значение
счетчика будет использовано в вычислениях времени окончания обогрева
uint8_t hotState = RELAY_SIGNAL_OFF;
void setup() {
pinMode (PIN_RELAY_HOT, OUTPUT); //Настраиваем пин на выход
pinMode(PIN_BUTTON_ON, BUTTON_MODE); // кнопка включения
pinMode(PIN_BUTTON_OFF, BUTTON_MODE); // кнопка выключения
}
void loop(){
digitalWrite(PIN_RELAY_HOT, hotState); // Пин реле в цикле поддерживает текущее состояние переменной режима,
процедура перенесена профессиональным программистом из блока SETUP в основное тело программы.
Решение спорное, так как теоретически в выходном сигнале могут присутствовать "иголки" - короткие
всплески напряжения от постоянного по времени прохождения цикла долбления в порт.
Как по мне менять состояние порта надо тогда и только тогда когда пришла команда смены режима.
if (hotState && BUTTON_STATE_ON == digitalRead(PIN_BUTTON_ON)) { hotState = RELAY_SIGNAL_ON; warmingStartTime = millis(); }
// А здесь начинается самая магия - пишем простым русским языком: если пришел сигнал на включение и пин реле в исходном (отключенном )
состоянии изменить переменную состояния пина и запомнить состояние счетчика миллисекунд.
То-есть эта процедура выполнится один раз. Если этого не далать, то любое последующе нажатие кнопки включения
заставит выполнить процедуру изменив счетчик миллисекунд...
Полной однократности выполнения процедуры включения обогрева стеклоочистителей можно добиться если
ввести еще одну переменную - счетчик числа циклов нагрева )))
Как-то так (как мне видится), Садман поправит, если я в чём-то накосячил с пояснениями
if (WARMING_DURATION <= millis() - warmingStartTime) { hotState = RELAY_SIGNAL_OFF; }
if (BUTTON_STATE_ON == digitalRead(PIN_BUTTON_OFF)) { hotState = RELAY_SIGNAL_OFF; }
// delay(20);
}
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит. Изменял зачем? Потому что проверка байта дешевле, чем дижиталрид.
В 45-й же строке я, конечно, напарил - там включать нужно только если hotState = off. Я сначала вообще по другому писал, это артефакт остался ))
55 и 57 объединить можно вовсе, если стремиться к минимизации писанины.
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит.
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит.
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
поддерживаю. Лишняя команда остается лишней даже если не вредит.
Лишние бывают разные. Вот вроде появились лишние деньги. А потом глядишь пригодились, и ни в чем не повредили. Так что устранять лишки и излишки надо с оглядкой.
Это зависит от способа оплаты. Если программы продаются на вес, то лишний расход на команды приводит к дополнительном доход в деньгах. Если вас коробит словосочетание лишняя команда, то замените на бонусную команду.
Это зависит от способа оплаты. Если программы продаются на вес, то лишний расход на команды приводит к дополнительном доход в деньгах. Если вас коробит словосочетание лишняя команда, то замените на бонусную команду.
Уважаемые знатоки! Внимание вопрос - ТС спрашивает - что такое ТС?
Уважаемый ТС, в связи с Вашим категорическим неприятием гугла, обусловленном, очевидно, Вашими религиозными убеждениями, я набрал Ваш вопрос там за Вас. Третий ответ - https://otvet.mail.ru/question/54446037
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит.
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
А что с дверью сделается? Ускорится износ микроконтроллера?
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит.
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
А что с дверью сделается? Ускорится износ микроконтроллера?
Дверь то переживет до поры, а у долбящего привычка останется. И дальше будет долбить все не думая: удаленную БД или темы на форуме. Долбить не надо чтоб дятлом не стать.
а, он нарочно кривой что бы я подумал и исправил?
а, он нарочно кривой что бы я подумал и исправил?
я конечно не проверял, писал чисто теоретически, логику работы не расписывал, обязан работать, под рукой нет кнопок, сейчас скрепку найду, сэмулирую, что там за косяк со скетчем
а, он нарочно кривой что бы я подумал и исправил?
Мой совет: распишите на листке каждую строку из луп() что делает. Тогда поймете.
У Вас два действия.
1. ВКЛ-ть. нагрев. Какие события должны произойти для этого? Сначало словами, а потом пихаем в один if(событ_1 и событ_2 или событ_3).
2. ОТК-ть нагрев. Какие события должны произойти для этого? Сначало словами, а потом пихаем в один if(событ_1 и событ_2 или событ_3).
единственное что нашел это в 20й строчке
заменить LOW на HIGH нужно
проверил, всё там работает, видимо неправильно что-то делаете, не к тем пинам кнопки подключаете к примеру
не знаю.... несколько раз пересобирал и перепрошивал... 25го еще попробую...
странно, по тому, что когда я снизу беру GND (а все кнопки и выводы сверху) программа не работает, в плоть до того, что сама включает и выключает сигнал на выходе... а когда сверху подключил все заработало как надо.
Притяните кнопку к земле (кажется так у Вас в скетче), эта проблема решится
Как бы не оказалось, что клей просрочен, или нитки старые.
Это ладно. Хуже всего, когда время палёное подсунут :(
Ну и шуточки у Вас))) XD
Это ладно. Хуже всего, когда время палёное подсунут :(
так я ему подсказал про время, одноразовость выполнения процедуры включения логикой обеспечивается!!! )))
Но про логические операторы ТС читать не стал
Вы бы ещё про электротехнику ТС начали читать. Науку где если нужен контакт, то железный. А где контакт должен отсутсвавать, то он обязательно должен отсутствовать, без всяких соплей. Но похоже там из соплей вся схема собрана.
Стал. Я за эти 2 дня уже прочитал больше чем за все время изучения программирования. Может просто упустил что то... Или не понял сразу...
прочитать мало,а понять, зачем буквально в первом ифе использовано понял?
Да, я как бы автомобилист, а в нём кнопки замыкают на землю )))
Енто "вроде понятно" . Но опять же у меня не кнопки будут, у меня будит приходить сигнал с другой платы, которая будет его подавать по команде с ПДУ. А там как ни крути логическая единица...
это всё детали, расскажи ка, что понял
Ну что нужно сигнал через кнопку не +5 подавать, а GND. а в коде его "! "
я спрашиваю, зачем применено -
&& digitalRead(HOT)==LOW
Чтобы считать не только положение кнопки но и статус выхода HOT
Мож пора уже прикрыть эту тему. Право, все уже сказано...если это троллинг, то несмешной, а если нет -то вообще жесть
Не пойму что не так? && это логический элемент "и" . == применяется для сравнения. В функции if проверяется утверждение в скобках( ) если верно то выполняется команда в фигурным скобках{ }.
То есть тут он смотрит состояние выхода HOT равно == LOW ?
Что не так то?
я спрашиваю, зачем применено -
&& digitalRead(HOT)==LOW
Я вот тоже не понимаю - зачем лишний раз читать.
Не знаю, зачем это сделал, но...
прошу прощения. я не нашел нигде что означает команды: INPUT_PULLUP ; uint32_t ; uint8_t
прошу прощения. я не нашел нигде что означает команды: INPUT_PULLUP ; uint32_t ; uint8_t
копируем непонятное слово и вставляем в строку поиска браузера
[quote=sadman41]
Я вот тоже не понимаю - зачем лишний раз читать.
Не знаю, зачем это сделал, но...
/quote]
Как зачем, книгу пишешь - "Программирование шаг за шагом"...
Раз написал попробую ТС пояснить...Построчно...
Насколько я помню топик с обсуждением этих самых постоянных писаний в порт - итогом был вывод, что никаких "автовыключений" перед включением "ноги" не происходит. Изменял зачем? Потому что проверка байта дешевле, чем дижиталрид.
В 45-й же строке я, конечно, напарил - там включать нужно только если hotState = off. Я сначала вообще по другому писал, это артефакт остался ))
55 и 57 объединить можно вовсе, если стремиться к минимизации писанины.
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
поддерживаю. Лишняя команда остается лишней даже если не вредит.
Лишние бывают разные. Вот вроде появились лишние деньги. А потом глядишь пригодились, и ни в чем не повредили. Так что устранять лишки и излишки надо с оглядкой.
Пример не корректный, "лишние деньги" - это дополнительный ресурс, "Лишняя команда" - дополнительный расход.
ПС. Просьба не нагружать в дальнейшем тупизной. ОК?
как весело тут у вас привет привет
ТС так вы написали программу?
Это зависит от способа оплаты. Если программы продаются на вес, то лишний расход на команды приводит к дополнительном доход в деньгах. Если вас коробит словосочетание лишняя команда, то замените на бонусную команду.
Ага)) добрый вечер)
Уважаемые знатоки! Внимание вопрос - ТС спрашивает - что такое ТС?
Меня коробит тока твоя тупость, на вес ))))
8|
Я предполагал, что у вас может идти подсчет этих вопросов, но - во первых я держался довольно долго. А во вторых - не ну интересно же))
Таёжный суслик XD
Заработал код?
Заработал на код?
Ага но это мелочи... Вот я тут собрался кормушку для кур сделать на сервоприводе и с дисплеем... Повеселимся... Если меня тут не забанят))
Курицу зарегиш, дело может быстрей пойдет.
И что бы курица такая же разговорчивая была.
ТС не безнадёжен, увлёкся (северным сиянием) )))
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
А что с дверью сделается? Ускорится износ микроконтроллера?
Дырки электронами забьются.
А что с дверью сделается? Ускорится износ микроконтроллера?
Дырки электронами забьются.
у вас и в ветренную погоду окна на проветривании???
Мне просто не нравится сама идея постоянного долбежа в открытую дверь, а всё остальное - в принципе универсальности кода - зачёт
Дверь то переживет до поры, а у долбящего привычка останется. И дальше будет долбить все не думая: удаленную БД или темы на форуме. Долбить не надо чтоб дятлом не стать.
Опять тупоконечники напали на остроконечников.