#1 2017-11-11 19:55:37

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Помогите со скетчем

Здравствуйте. Вопрос к ГУРУ по  "Термостат на Arduino, до 5 датчиков DS18B20",
ссылка:http://arduinolab.pw/index.php/2015/12/02/termostat-na-arduino-do-5-datchikov-ds18b20/ Подскажите как добавить в скетч, дополнительный выход, с  таким алгоритмом: если на выходах 2 и 3 каналов уровень HIGH, то скажем на Pin-?(любой не занятый) то же становится HIGH, если условие не выполняется то LOW? Хочу соорудить себе зимний комплект на кондиционер.
Cкетч отлично подходит для обогрева картера компрессора:
1 канал управляет нагревателем картера компрессора
2 канал разрешает работу кондиционера, когда картер нагреется скажем выше 20 градусов.
3 канал с датчиком(наружной температуры воздуха), разрешает работу кондиционера при температуре выше -5 градусах на улице.
Было бы отлично чтоб осталось только 2 реле: 1реле(нагрев картера компрессора), 2 реле (разрешение работы кондиционера при выполнении двух условий: температура картера более 20градусов и наружная температура больше чем: -5 градусов и запрет работы, когда эти условия не выполнены!
Что мной, уже добавлено в скетч:
1.Сконфигурирован один датчик для 1 и 2 канала
2.добавлен общий для всех каналов, гистерезис в 2 градуса
3.введена инверсия для 2 и 3 выхода(с понижением температуры: отключение реле
4.в меню установки температуры 2 и 3 выхода, надпись PinON заменена на PinOFF)
Но с дополнительным выходом, что то не получается! И ещё вопрос как сделать установку температуры в отрицательную сторону? С ув Александр.

Редактировался alexsoftik (2017-11-11 20:47:39)

#2 2017-11-11 20:03:37

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Scetch-my.zipПрикладываю переделанный мною скетч

Редактировался alexsoftik (2017-11-11 20:05:48)

#3 2017-11-12 07:31:27

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 490

Re: Помогите со скетчем

alexsoftik пишет:

Scetch-my.zipПрикладываю переделанный мною скетч

У вас "мертвый" цикл в функции setMenu. Вообще, отладка не простое занятие, даже для таких, казалось бы простых, систем. И требует определенного времени и опыта. Делайте сборку программы последовательно, с проверкой функционирования после каждой модификации. Безусловно, компоненты программы должны быть работоспособные и протестированы заранее.

#4 2017-11-13 14:24:33

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Спасибо за ответ. Ардуино я начал заниматься всего неделю назад, и вопросов у меня больше чем ответов. Подскажите как в данном скетче, добавить выход с описанным алгоритмом?

#5 2017-11-13 16:41:15

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 490

Re: Помогите со скетчем

alexsoftik пишет:

Спасибо за ответ. Ардуино я начал заниматься всего неделю назад, и вопросов у меня больше чем ответов. Подскажите как в данном скетче, добавить выход с описанным алгоритмом?

Неделя, для программирования, это маловато. Вам предстоит долгий и кропотливый труд. Что бы вам помочь мне бы пришлось переписать вашу программу. Техника программирования с гиперциклом, что представляет собой функция loop(), предполагает что функции входящие в него не будут захватывать, на долго, управление а будут только реагировать на события возврашая управление в корневой цикл. Это позволяет достаточно просто наращивть функциональность, без блокирования остальных функций и не прибегая к  многозадачности. Смотрите и разбирайте примеры и библиотеки Ардуино, а так же открытые проекты, и у вас получится.

Редактировался Вячеслав Азаров (2017-11-13 17:29:32)

#6 2017-11-13 18:28:06

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Почему не работает, вот такая комбинация:
if ((OUT[1] == HIGH) && (OUT[2] == HIGH)) // сравниваем, выходы
    // тогда…
    {
    digitalWrite(OUT[3], HIGH); // включаем выход
    }
    else // в противном случае
    {
    digitalWrite(OUT[3], LOW); // выключаем выход
    }

Редактировался alexsoftik (2017-11-13 18:31:04)

#7 2017-11-13 18:34:19

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 490

Re: Помогите со скетчем

alexsoftik пишет:

Почему не работает, вот такая комбинация.

Потому, что ваш массив OUT[] это номера выводов а не сами порты выводов.
Нужно так: (digitalRead(OUT[1]) == HIGH) ...

Редактировался Вячеслав Азаров (2017-11-13 18:34:34)

#8 2017-11-13 18:37:14

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Точно, что то я тормознул, спасибо! Уже проверил, работает.  А что с мертвым циклом, как исправить? Дело в том что я в setMenu ничего не менял, скетч не мой, я только правлю его под мои требования.

Редактировался alexsoftik (2017-11-13 19:03:41)

#9 2017-11-13 19:03:29

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 490

Re: Помогите со скетчем

alexsoftik пишет:

Точно! Уже успел проверить, работает. Что то я тормознул, спасибо! А что с мертвым циклом, как исправить? Дело в том что я в setMenu ничего не менял, скетч не мой, я только правлю его под мои требования.

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

Редактировался Вячеслав Азаров (2017-11-13 19:07:49)

#10 2017-11-14 00:05:57

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Подскажите как сделать установку температуры в отрицательную сторону? Перерыл весь инет и нигде не нашёл нужной информации.

Редактировался alexsoftik (2017-11-14 08:44:26)

#11 2017-11-14 07:56:10

Вячеслав Азаров
Участник
Из Запорожье
Зарегистрирован: 2017-05-25
Сообщений: 490

Re: Помогите со скетчем

alexsoftik пишет:

Подскажите, пожалуйста, как сделать установку температуры в отрицательную сторону?

Ваши переменные, хранящие пороговую температуру (строка 18), небходимо определить как signed char или short int, а не byte (uint8_t), как у вас в скетче. А константы, границ их изменеия редактором, установить в нужные вам значения (строка 107, 112). К тому же, у вас ошибки в определениях границ.

Это то, что у вас:

    if (KEY == 2) { // если нажата кнопка
      tempOUTon[pos]--;   // изменяем значение
        if (tempOUTon[pos] > 40) tempOUTon[pos] = 0;
      EEPROM.write(pos, tempOUTon[pos]); // сохраняем в еепром
     }
     else if (KEY == 5){
       tempOUTon[pos]++;
         if (tempOUTon[pos] > 40) tempOUTon[pos] = 40;
       EEPROM.write(pos, tempOUTon[pos]);    
     } 

А должно быть так:

    if (KEY == 2) { // если нажата кнопка
      tempOUTon[pos]--;   // изменяем значение
        if (tempOUTon[pos] < LOW_TEMP) tempOUTon[pos] = HIGH_TEMP;
      EEPROM.write(pos, tempOUTon[pos]); // сохраняем в еепром
     }
     else if (KEY == 5){
       tempOUTon[pos]++;
         if (tempOUTon[pos] > HIGH_TEMP) tempOUTon[pos] = LOW_TEMP; 
       EEPROM.write(pos, tempOUTon[pos]);    
     } 

Где LOW_TEMP и HIGH_TEMP - ваши границы установки. А так как было работать не будет.

Редактировался Вячеслав Азаров (2017-11-14 08:17:21)

#12 2017-11-14 08:46:59

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Большое спасибо! Вечером, буду пробовать. С ув Александр

#13 2017-11-14 15:54:17

alexsoftik
Участник
Зарегистрирован: 2017-11-11
Сообщений: 8

Re: Помогите со скетчем

Вячеслав. Огромное вам спасибо за помощь, всё отлично работает!

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела