Помогите разобратся с кнопками
- Войдите на сайт для отправки комментариев
Вс, 07/04/2019 - 17:33
Уважаемые Гуру! Прошу вашей помощи. Что нужно поправить или как правильно написать скетч, чтоб он заработал правильно.
Есть кнопки, подключенные через нонейм микросхему которая выдает код как с ИК пульта.
Написал некий скетч по управлению теном с использованием терморезистора. Так вот, отдельный код без кнопок работает,
а в рамках управления кнопками нет. Помогите пожалуйста!
#define POWER 0x51DA01F8 #define TIME_STTING 0x1F72CFA1 #define TEMPERATURE 0xA83B8E71 #define HEATING 0x974D2F31 #define VACUUM 0xCE53E021 #define TIMING 0x1B4F8AC1 #define PLUS 0x8876C5E1 #define MINUS 0xD080A1B1 #include <IRremote.h> int RECEIVE_PIN = 2; IRrecv irrecv(RECEIVE_PIN); decode_results results; int VAKUUM_RELEY = A3; int TEN_1_RELEY = A1; int TEN_2_RELEY = A2; int state =0; int regim = 1; int flag = 0; int termPin = A0; //Вход терморезистора void setup(){ Serial.begin(9600); irrecv.enableIRIn(); pinMode(TEN_1_RELEY, OUTPUT); //Выход на тен №1 pinMode(TEN_2_RELEY, OUTPUT); //Выход на тен №2 pinMode(VAKUUM_RELEY, OUTPUT); //Выход на вакуумный насос pinMode(RECEIVE_PIN, INPUT); } void loop(){ int adc_value=analogRead(termPin); Serial.print("ADC = "); Serial.println(adc_value); delay(500); //-------------------------------------------------------------------------------- if ((irrecv.decode(&results)) && (results.value==HEATING) ) { if (flag == 0){ regim ++; flag = 1; } if(regim>4){ regim = 1;} } if ((irrecv.decode(&results)) && (results.value==HEATING) ) { if (flag == 1){ flag = 0; } if(regim==1){ digitalWrite(TEN_1_RELEY, LOW); digitalWrite(TEN_2_RELEY, LOW); } if(regim==2){ if (analogRead(termPin)>910){ digitalWrite(TEN_1_RELEY, HIGH); } if (analogRead(termPin)<900){ digitalWrite(TEN_1_RELEY, LOW); } digitalWrite(TEN_2_RELEY, LOW); } if(regim==3){ if (analogRead(termPin)>910){ digitalWrite(TEN_1_RELEY, HIGH); } if (analogRead(termPin)<900){ digitalWrite(TEN_1_RELEY, LOW); } if (analogRead(termPin)>910){ digitalWrite(TEN_2_RELEY, HIGH); } if (analogRead(termPin)<900){ digitalWrite(TEN_2_RELEY, LOW); } } if(regim==4){ if (analogRead(termPin)>910){ digitalWrite(TEN_2_RELEY, HIGH); } if (analogRead(termPin)<900){ digitalWrite(TEN_2_RELEY, LOW); } digitalWrite(TEN_1_RELEY, LOW); } delay(300); irrecv.resume(); } }
Опишите подробно что именно он делает. И что идёт не так с кнопками.
по условию тен должен включится на нагрев, а по достижению температуры выключится. В данном коде управления не происходит.
Какойто затык. Сами то кнопки работают и режимы переключаются вот только контроль по температуре не проходит.
по условию тен должен включится на нагрев, а по достижению температуры выключится. В данном коде управления не происходит.
Какойто затык. Сами то кнопки работают и режимы переключаются вот только контроль по температуре не проходит.
Пишите вывод в монитор всех ваших переменных после всех ифов.
по условию тен должен включится на нагрев, а по достижению температуры выключится. В данном коде управления не происходит.
По какому условию, в какой строке? По достижению температуры - в какой строке программы. ну, опишите же свою программу - Вы хотите. чтобы человек сам разбирался где у Вас что? Не многовато? Опишите подробно, что должно происходить и что происходит. Тогда посмотрим.
После каждой переменной условие не выполняется самостоятельно. Режим 1 работает безукоризненно. Жмём кнопку, Режим 2 нагрев пошёл. По достижению выставленной температуры должен отключится нагрев, а нагрев не отключается, стоит прокрутить режимы по кругу, срабатывает отключение нагрева. По достижению значений для включения нагрева, нагрев не включается, опять клацаем кнопку по кругу нагрев включился.
Kam41, мне кажется, код не работает, как Вы хотите, потому, что Вы сами не понимаете, как он должен работать.
По крайней мере, ничего вменяемого даже на прямо поставленные вопросы Вы не написали.
Любой проект начинается (по крайней мере, должен начинаться) с проектирования. Т.е. с того, чтобы внятно по-русски расписать, как он должен работать.
Вот попытайтесь прямо здесь сделать такое описание.
Вы знаете, что означает температура ">910" попугаев. Мы не знаем, как у вас включен термистор и что такое >910 - это высокая температура или низкая?
Вы знаете, что означает TEN_1_RELEY, LOW. Мы не знаем - это включение или же выключение?
Вы знаете (надеюсь), что означает ваш флаг. Мы этого не знаем.
Вы знаете (надеюсь), что в каком из ваших режимов должно происходить. Мы этого не знаем.
Вы знаете (надеюсь), как должны переключаться ваши режимы. Мы этого не знаем.
Продолжать?
Упростил код и закоментировал.
Посмотрел сейчас в мониторе показания термистора в условии переменной if, показания считываются только при нажатой кнопке, как исправить?
Сядьте и человеческим языком выпишите на бумажке, что в какой момент происходит и при каких условиях. Подсказываю:
Температура достигла мульена попугаев - выключить рылю.
Считать значение "кнопки" и сделать........
Уважаемый, а как Вы думаете, прикаком условии программа попадет в диапазон 31-41 строк? Не по нажатию ли кнопочки? Так получается, что программа выполняет именно то, что Вы написали.
Совет - надо что бы было так - прочитали кнопку, изменили уставки и термостат далее работает. Кстати - в готовых проектах достаточно много термостатов. Может посмотреть, как это люди делают?
В том и проблема, условие 31-40 НЕ выполняется в пределе опроса кнопки. Если переменную вынести за пределы опроса то оно работает но само по себе, а надо что б от кнопки.
.
В том и проблема, условие 31-40 НЕ выполняется в пределе опроса кнопки. Если переменную вынести за пределы опроса то оно работает но само по себе, а надо что б от кнопки.
Расскажите, а по какому условию должна работать программа, а по какому не должна?
Пока нажата кнопка? Пока не нажали другую кнопку? Пока Вы думаете о нажатии на кнопку?
У Вас сейчас написано - пока нажата кнопка (возможно, поскольку с подпрограммой IR не знаком). И напишите пока с обычной кнопкой, а потом добавьте IR.
Условие, нажали кнопку, отпустили, включился тен, контроль нагрева до установленной температуры и ее поддержания. Ещё раз нажали, нагрев выключили. С одной стороны все просто но в условии IR не понятно. Если довести нагрев до выставленного значения отключение TEN_1_RELEY не происходит, если нажать на кнопку по кругу то TEN_1_RELEY будет находится в выключенном состоянии и так-же в обратном направлении.
Условие, нажали кнопку, отпустили, включился тен, контроль нагрева до установленной температуры и ее поддержания. Ещё раз нажали, нагрев выключили. С одной стороны все просто но в условии IR не понятно. Если довести нагрев до выставленного значения отключение TEN_1_RELEY не происходит, если нажать на кнопку по кругу то TEN_1_RELEY будет находится в выключенном состоянии и так-же в обратном направлении.
Условие, нажали кнопку, отпустили, включился тен, контроль нагрева до установленной температуры и ее поддержания. Ещё раз нажали, нагрев выключили. С одной стороны все просто но в условии IR не понятно. Если довести нагрев до выставленного значения отключение TEN_1_RELEY не происходит, если нажать на кнопку по кругу то TEN_1_RELEY будет находится в выключенном состоянии и так-же в обратном направлении.
Ну вот, наконец добились! Так для выполнения этого условия надо при нажатии на кнопку ставить флаг нажатия, при повторном - снимать флаг. А программа должна срабатывать по условию установки флага.
О, уже коллега написал :)
Огромнейшее Спасибо!
Переделал консрукцию из первого сообщения, все заработало!