Помогите подключить два датчика температуры к одному реле.

iven83
Offline
Зарегистрирован: 02.02.2017

Подскажите пожалуйста почему при копиляции последней строки кода выдаёт ошибку 'digitalWhrite' was not declared in this scope

Вот тект кода 
char t1 = 19; // присваиваем номер пина датчику №1
char t2 = 20; // присваиваем номер пина датчику №2
char r1 = 11; // присваиваем номер пина реле №1


void setup() {
  pinMode(19, INPUT); // пин используется для получения данных
  pinMode(19, INPUT); // пин используется для получения данных
  pinMode(11, OUTPUT); // пин используется для отправки данных
}

void loop() {
  char t1 = analogRead(19); // считываем значения датчика №1 (с аналогового пина)
  char t2 = analogRead(20); // считываем значение датчика №2 (с аналогового пина)
  if (t1 > t2) digitalWhrite(r1, HIGH); // при значении датчика t1 > t2 включается реле1
  else  digitalWhrite(r1, LOW); // в противопложном случае реле1 получает сигнал низкого уровня (т.е. 
                                //  на одом реле будут запитаны два источника питания).
 }

 

 

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

Потому что ошибка в слове Write

iven83
Offline
Зарегистрирован: 02.02.2017

Большое спасибо, теперь работает )

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

iven83 пишет:

Подскажите пожалуйста почему при копиляции последней строки кода выдаёт ошибку 'digitalWhrite' was not declared in this scope

Очевидно, потому, что  'digitalWhrite' was not declared in this scope. А Вы что её где-то определили? Где?

iven83
Offline
Зарегистрирован: 02.02.2017

Дописал код - всё компилируется, загружается, но почему-то на реле сигнал не поступает. 

Подскажите пожалуйцста как правильно прописать в условии значение данных с термодатчиков, чтоб реле включалось. 

#include <DallasTemperature.h>                                            //библиотека для работы с датчиком 
#include <OneWire.h>                                                      // библиотека для работы с OneWire шиной (датчиками, подключемыми на шину)
DeviceAddress Term01 = { 0x28, 0xFF, 0x65, 0xA1, 0x71, 0x16, 0x03, 0x4D}; // указываем код датчика 1
DeviceAddress Term02 = { 0x28, 0xFF, 0x63, 0xB6, 0x70, 0x16, 0x05, 0x19}; // указываем код датчика 2
DeviceAddress Term03 = { 0x28, 0xFF, 0xBB, 0xB9, 0x70, 0x16, 0x05, 0xE3}; // указываем код датчика 3
OneWire oneWire(10);                                                      // указываем номер пина, на который будут приходить показания с датчиков
DallasTemperature sensors(&oneWire);                                      // указываем, что на одной шине висит несколько датчиков
char r1 = 11;                                                             // присваиваем номер пина реле №1

void setup() {
 Serial.begin(9600);                                                       // отображаем данные в мониторе порта
 sensors.begin();                                                          // запускаем процесс мониторинга датчиков 
 pinMode(11, OUTPUT);                                                      // пин используется для отправки данных (для включения реле насоса)
}

void loop() {
 sensors.requestTemperatures();                                            // выполнение запроса на получение данных 
 Serial.println("New loop");                                               // метка в монитор порта, что прошёл цикл измерений  
 Serial.println(sensors.getTempC(Term01));                                 // отображение данных с датчика 1 в мониторе порта
 Serial.println(sensors.getTempC(Term02));                                 // отображение данных с датчика 2 в мониторе порта
 Serial.println(sensors.getTempC(Term03));                                 // отображение данных с датчика 3 в мониторе порта

 if ((Term01) > (Term02))
 {digitalWrite( r1, HIGH);}                              // при значении датчика 1 > значения датчика 2 включается реле 1
 else ((Term01) < (Term02)); 
 {digitalWrite( r1, LOW);}                             // в противопложном случае реле 1 получает сигнал низкого уровня 
                                                                            // (насос включается только когда температура на коллекторе превышает температуру теплоносителя в батареях или тёплом полу). 
  delay (3000);                                                            // делаем задержку в 3 секунды
}

 

 
В мониторе порта всё отображается нормально, а вот с реле засада ... (((
valera678
Offline
Зарегистрирован: 04.11.2016

ЕвгенийП пишет:

iven83 пишет:

Подскажите пожалуйста почему при копиляции последней строки кода выдаёт ошибку 'digitalWhrite' was not declared in this scope

Очевидно, потому, что  'digitalWhrite' was not declared in this scope. А Вы что её где-то определили? Где?


Смешно

iven83
Offline
Зарегистрирован: 02.02.2017

valera678 пишет:
ЕвгенийП пишет:

iven83 пишет:

Подскажите пожалуйста почему при копиляции последней строки кода выдаёт ошибку 'digitalWhrite' was not declared in this scope

Очевидно, потому, что  'digitalWhrite' was not declared in this scope. А Вы что её где-то определили? Где?

Смешно

Рад, что вас это развеселило. Буду ещё больше рад и даже благодарен, если что-то подскажете по делу. 

valera678
Offline
Зарегистрирован: 04.11.2016

iven83 пишет:

valera678 пишет:
ЕвгенийП пишет:

iven83 пишет:

Подскажите пожалуйста почему при копиляции последней строки кода выдаёт ошибку 'digitalWhrite' was not declared in this scope

Очевидно, потому, что  'digitalWhrite' was not declared in this scope. А Вы что её где-то определили? Где?

Смешно

Рад, что вас это развеселило. Буду ещё больше рад и даже благодарен, если что-то подскажете по делу. 


Я вряд ли,меня опередят суперпрограммисты не замечающие элементарных ошибок как то написание Write но способные изобрести 1001 способ помигать светодиодом без delay

valera678
Offline
Зарегистрирован: 04.11.2016

Есть конечно и адекватные люди,которые найдут время напишут за вас скетч а вы если захотите(сможете) разберетесь а есть и те что только запутают вас и запутаются сами.

valera678
Offline
Зарегистрирован: 04.11.2016

iven83 пишет:

В мониторе порта всё отображается нормально, а вот с реле засада ... (((

Вы бы изъяснялись понятнее. Засада-это что за состояние реле?

 

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

iven83 пишет:

Буду ещё больше рад и даже благодарен, если что-то подскажете по делу. 

Вам невозможно помочь. Вы пишете

iven83 пишет:
Подскажите пожалуйцста как правильно прописать в условии значение данных с термодатчиков, чтоб реле включалось.

Но при этом забываете написать при каких именно условиях и как именно оно должно включаться. Кто ж Вас знает когда Вы его включать хотите.

iven83
Offline
Зарегистрирован: 02.02.2017

Реле не включается, не выключается, назвасимо от показаний температурных датчиков.

Скорее всего это из-за того, что я неправильно прописал условия включения. Пробовал разные варианты - либо вообще не компилируется, либо компилируется, но реле на датчики не реагирует. 

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

Я уже сказал, никто, кроме Вас не знает при каких именно условиях оно должно или не должно включаться. Хотите, распишите подробно. не хотите - дело хозяйское.

iven83
Offline
Зарегистрирован: 02.02.2017

ЕвгенийП пишет:

Я уже сказал, никто, кроме Вас не знает при каких именно условиях оно должно или не должно включаться. Хотите, распишите подробно. не хотите - дело хозяйское.

Нужно чтобы при t1 (показания первого датчика) > t2 (показания второго датчика) включалось реле (на реле подавался сигнал высокого уровня). Данные со всех датчиков отображаются в мониторе порта отлично, но реле на них не реагирует (((.  

Третий датчик я пока не использую. 

valera678
Offline
Зарегистрирован: 04.11.2016

iven83 пишет:

 

void loop() {
  char t1 = analogRead(19); // считываем значения датчика №1 (с аналогового пина)
  char t2 = analogRead(20); // считываем значение датчика №2 (с аналогового пина)
  if (t1 > t2) digitalWhrite(r1, HIGH); // при значении датчика t1 > t2 включается реле1
  else  digitalWhrite(r1, LOW); // в противопложном случае реле1 получает сигнал низкого уровня (т.е. 
                                //  на одом реле будут запитаны два источника питания).
 }

у вас было так ,почему вы потом стали городить иначе?

 

 

iven83
Offline
Зарегистрирован: 02.02.2017

Наверно потому, что это было не совсем у меня. Этим скетчем занимался соседский мальчик.

Я занимался GSM-сигнализацией, а скечт по использованию датчиков температуры писал мой юный сосед. Он пробовал так - не получилось. Я доделал свой проект по GSM и попробовл дописать - получилось считать коды датчиков, подключить датчики на одной шине, но привязать реле к датчикам пока не получается (

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Может так

if (sensors.getTempC(Term01) > sensors.getTempC(Term02))
 {digitalWrite( r1, HIGH);}                              // при значении датчика 1 > значения датчика 2 включается реле 1
 else if (sensors.getTempC(Term01) < sensors.getTempC(Term02))
 {digitalWrite( r1, LOW);} 

 

valera678
Offline
Зарегистрирован: 04.11.2016

а чем вы привязываете реле (изолентой,нитками) ,попробуйте привязать его(реле) к ардуино ,ну или соседей позовите,поому как чем вам объяснить -так проще прехать к вам да сделать

iven83
Offline
Зарегистрирован: 02.02.2017

vosara пишет:

Может так

if (sensors.getTempC(Term01) > sensors.getTempC(Term02))
 {digitalWrite( r1, HIGH);}                              // при значении датчика 1 > значения датчика 2 включается реле 1
 else if (sensors.getTempC(Term01) < sensors.getTempC(Term02))
 {digitalWrite( r1, LOW);} 

 

 

ДА!!!! Именно так может! Спасибо большое!

Что странно - я пробовал так, но у меня не вышло! Наверно где-то с синтаксисом на чудил в прошлый раз ). 

Ещё раз огромнейшее спасбо! )))

iven83
Offline
Зарегистрирован: 02.02.2017

vosara пишет:

Может так

if (sensors.getTempC(Term01) > sensors.getTempC(Term02))
 {digitalWrite( r1, HIGH);}                              // при значении датчика 1 > значения датчика 2 включается реле 1
 else if (sensors.getTempC(Term01) < sensors.getTempC(Term02))
 {digitalWrite( r1, LOW);} 

 

Что интересно, если убрать "else", тоже отлично работает, а вот если  после "else" убрать "if" - даже не компелируется!

Мне казалось я хоть немного начал разбираться в операторах условия ... (((

valera678
Offline
Зарегистрирован: 04.11.2016
valera678
Offline
Зарегистрирован: 04.11.2016

мне казалось что 3.14здец...оказалось не казалось

RezhAuto
Offline
Зарегистрирован: 19.03.2017

иртересно

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

vosara пишет:

Может так

if (sensors.getTempC(Term01) > sensors.getTempC(Term02))
 {digitalWrite( r1, HIGH);}                              // при значении датчика 1 > значения датчика 2 включается реле 1
 else if (sensors.getTempC(Term01) < sensors.getTempC(Term02))
 {digitalWrite( r1, LOW);} 

 

digitalWrite (r1, sensors.getTempC(Term01) > sensors.getTempC(Term02) ? HIGH, LOW);

и сё, никаких if-ов не надо.

 

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

DetSimen пишет:

digitalWrite (r1, sensors.getTempC(Term01) > sensors.getTempC(Term02) ? HIGH, LOW);

и сё, никаких if-ов не надо.

А чё так длинно? Вполне достаточно без "хвоста"

digitalWrite (r1, sensors.getTempC(Term01) > sensors.getTempC(Term02));