Нужна помощь со скетчем (две кнопки)

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

дак если ты учиться не хочешь, тебя не только я доставать буду

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Хочу и учусь. Чужие коды не копирую. Свои пытаюсь писать. 

Спорить с дедами мне нельзя (согласно правилам форума), поэтому остаёься только предлагать свои варианты.

Подожду может кто разъяснит ошибки в строке:

digitalWrite(pinMotor, HIGH)?

Честно ... не нахожу. 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Муж_Долговой пишет:

Хочу и учусь. Чужие коды не копирую. Свои пытаюсь писать. 

Спорить с дедами мне нельзя (согласно правилам форума), поэтому остаёься только предлагать свои варианты.

Подожду может кто разъяснит ошибки в строке:

digitalWrite(pinMotor, HIGH)?

Честно ... не нахожу. 

в этой строке -нету. 

в этой есть

if (vkl ==LOW ||  pinMotor == HIGH)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Муж_Долговой пишет:

а что с этой строкой не так?

digitalWrite (pinMotor, HIGH);

Это функция, которой одним из аргументов передаётся номер пина, который хранится в переменной pinMotor. Эта строка НЕ МЕНЯЕТ значение переменной pinMotor. У Вас в коде вверху было написано: const int pinMotor = 12; -- здесь переменной pinMotor присваивается число 12. ВСЁ, больше эта переменная (её значение) нигде не меняется. Она всегда равна 12 и никогда не будет равна HIGH или LOW. Так поятно?

Ещё раз: в этой строке переменная pinMotor не становится HIGH. Функции работают по-другому.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

скачай в торренте книгу Саймон Монк "Программируем Ардуино" 2016г. 

leks
Offline
Зарегистрирован: 22.10.2017

Ну правда уже смешно, дорогой Долгов! Вы пишите если 12 тождественно равно 1 в условии. Счас меня забьют, но мне проще писать в аргументах (12,1) чем ("пинрастакойко","высокий"), как раз чтоб такие фигусы не получались.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Отладил. В таком виде работает, как задумано.

При подаче питания светодиод, иммитирующмй мотор не вспыхивает. При нажатии кнопки Пуск происходит включение и самозахват. При нажатии кнопки Стоп происходит отключение. Если при удерживаемой кнопке пуск нажать кнопку стоп - светодиод не вспыхивает.

Пришлось в конце скетча добавить пару строчек. Иначе светодиод гас только при нажатой кнопке стоп. Потом опть загорался.


  int onnButton = 3;  //Кнопка "Пуск"
  int offButton = 4;   //Кнопка "Стоп"
  int pinMotor = 12;   // На реле включение мотора
 int bloc = 1; // Некиий аналог блокконтактов (разомкнут)
void setup() {
  pinMode(onnButton, INPUT_PULLUP); //Кнопка не нажата
  pinMode(offButton, INPUT_PULLUP); //Кнопка не нажата
  // при двукнопочном управлении антидребезг не нужен
  pinMode (pinMotor, OUTPUT);
  // 
  }
void loop() {
  int vkl = digitalRead (onnButton);   // Опрос кнопки пуск
 if (vkl ==LOW ||  pinMotor == HIGH){ //Нажимаем кнопку "Пуск"
  bloc = 0; //При этом замыкается блокконтакт
 }
  int otkl = digitalRead (offButton); // опрос кнопки стоп
 if(bloc == 0 && otkl ==HIGH){
  digitalWrite(pinMotor, HIGH);} //Включается мотор и удерживается блокконтакт
  else{
    digitalWrite(pinMotor, LOW);
    bloc = 1;
  }
 }
Спасибо Деду Семёну за помощь.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы точно в дверь сумели замок врезать?

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

leks пишет:

Ну правда уже смешно, дорогой Долгов! Вы пишите если 12 тождественно равно 1 в условии. Счас меня забьют, но мне проще писать в аргументах (12,1) чем ("пинрастакойко","высокий"), как раз чтоб такие фигусы не получались.

Так нельзя! Как учил меня Великий Дима ... все пины надо в "чердаке" распределять. Дабы потом, если этот номер понадобится для другой задачи ... просто заменяешь цифру и нет необходимости лазить по всему коду.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

sadman41 пишет:

Вы точно в дверь сумели замок врезать?

Этот вопрос из другой темы.

 

b707
Offline
Зарегистрирован: 26.05.2017

Долгов, а сколько раз надо  про  (pinMotor == HIGH) сказать - чтобы хотя бы убрали это из кода? На то, что вы поймете. что в ней что-то не так - уже не надеюсь.

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой пишет:

Так  же уходил от тебя на другой форум, под другим именем. Так ты меня и там доставал.

Пришлось вернуться.

может зря вернулись?

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Так раьотает же! Устойчиво и надёжно. 

Давай мирно ... убери ты ... а я сразу проверю. Схему не разбирал. Только без штучек сокращённого программирования. 

Я не Долгов. Долгова - это девичья фамилия жены. Моя слишком громкая для ника.

"может зря вернулись?"

Так скучать же будете! Где Борис!? Да где Борис. 

Я обучаемое существо. Не волнуйся. Скоро таким же стану ... лет через 10 ... 15.

SLKH
Offline
Зарегистрирован: 17.08.2015

Муж_Долговой пишет:

Я не Долгов. Долгова - это девичья фамилия жены. Моя слишком громкая для ника.

Ипполит Матвеевич дрогнул.

– Этого нельзя.

– Почему-с?

– Там придется прописаться.

– Паспорт не в порядке?

– Да нет, паспорт в порядке, но в городе мою фамилию хорошо знают. Пойдут толки.

Концессионеры в раздумьи помолчали.

– А фамилия Михельсон вам нравится? – неожиданно спросил великолепный Остап.

– Какой Михельсон? Сенатор?

– Нет. Член союза совторгслужащих.

– Я вас не пойму.

– Это от отсутствия технических навыков.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Муж_Долговой пишет:

Пришлось вернуться.

Дык, оно ж ни от ника, ни от статуса не зависит. На той же амперке иногда статус "нуб" а иным "гуру" сто очков даст.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Не на Амперке ... на ESP8266.ru.  (Амперка мне не понравилась чем то ... духом что ли). Параллельно строю умную кухню. На базе 8266 или 32. Вот свёрлами закупллюсь на 0,6 мм ... буду плату изготавливать. Датчиков и тиристоров с оптронами даже с излишком.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Муж_Долговой пишет:

Амперка мне не понравилась чем то ... духом что ли

Мне, тоже.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Дед! Ты не спишь? Ну, держись!

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Я чесна предупреждал, к 17 по Масскве я вхлам. 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Так и случилось.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Я тоже хочу .. при внуке было неудобно. Вот Долгова ужин подаст - так попробую догнать.

stormaggedon
Offline
Зарегистрирован: 08.05.2019

Вы сделали одного тупого человека чуть менее тупым, спасибо. Почитала про конечные автоматы, заполненная таблица стала выглядеть таким образом:

Под неё был написан код:

const int tP = 7; //кнопка ON
const int dP = 5; //кнопка OFF
const int lP = 9; //светодиод

 
int tS = 0; 
int dS = 0;
int lS = 0; 

void setup() { 

pinMode(lP, OUTPUT); 
pinMode(tP, INPUT); 
pinMode(dP, INPUT); 
} 

void loop(){ 

tS = digitalRead(tP); 
dS = digitalRead(dP); 
lS = digitalRead(lP); 

if (tS == LOW && dS == LOW && lS == LOW){ 
do tS = digitalRead(tP); 
while (tS == LOW); 
digitalWrite(lP, HIGH);} 
else if (tS == LOW && dS == LOW && lS == HIGH){ 
do dS = digitalRead(dP); 
while (dS == LOW); 
digitalWrite(lP, LOW);} 
else if (tS == HIGH && dS == LOW && lS == HIGH){ 
tS = digitalRead(tP); 
dS = digitalRead(dP); 
if (tP == LOW){ 
do dS = digitalRead(dP); 
while (dS == LOW); 
digitalWrite(lP, LOW);} 
else if (dP == HIGH){ 
digitalWrite(lP, LOW);} 
} 
}

И всё равно, при нажатии OFF с нажатой ON светодиод начинает быстро моргать или просто продолжает светиться, а при отпускании OFF с нажатой ON светодиод снова светится. То ли лыжи не едут, то ли...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

stormaggedon пишет:

заполненная таблица стала выглядеть таким образом:

Боюсь, что Вы не поняли смысла этой таблицы.

Фразой "Дождаться пока нажмётся ..." Вы саму её суть перечеркнули. Потому ничего и не получилось.

У Вас есть два действия: "зажечь" и "погасить". Никаких "дождаться" у Вас нет. Все "дожидания" отработаются сами через текущее состояние. 

Сделайте таблицу нормально и покажите.

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Попробовай код из #20

stormaggedon
Offline
Зарегистрирован: 08.05.2019

Печаль. Пойду дальше развиваться