настройка DS1307+ Реле + TFT 3,2" (Mega 2560)
- Войдите на сайт для отправки комментариев
Чт, 16/06/2016 - 13:48
Всем привет, собираю для черепах автоматический контроль температуры и автокормушку, с аппаратной частью проблем нет, помогите с програмной, не могу понять как настроить срабатывание реле по времени, что написать с 145 по 155 строку?
[code] #include <DS1307.h> #include <UTFT.h> #include <Wire.h> #include <dht11.h> // Добавляем библиотеку DHT11 dht11 DHT; // Объявление переменной класса dht11 #define DHT11_PIN A1 #define RELAY_ON LOW #define RELAY_OFF HIGH #define Relay_1 9 // температура воды //#define Relay_2 2 // температура суши //#define Relay_3 10 // реле лампы //#define Relay_4 11 // реле кормушки long Temperature = 0, Pressure = 0; extern uint8_t SmallFont[]; extern uint8_t BigFont[]; DS1307 rtc(6, 7); Time t; UTFT myGLCD(CTE32HR, 38, 39, 40, 41); void setup() { Serial.begin(9600); Serial.println("DHT11 test!"); Wire.begin(); rtc.halt(false); //Запускаем часы //rtc.setDOW(THURSDAY); // настройка дня недели //rtc.setTime(11, 30, 0); // настройка часов //rtc.setDate(16, 6, 2016); // настройка даты digitalWrite(Relay_1, RELAY_OFF); // //digitalWrite(Relay_2, RELAY_OFF); // digitalWrite(Relay_3, RELAY_OFF); // digitalWrite(Relay_4, RELAY_OFF); pinMode(Relay_1, OUTPUT); // pinMode(Relay_2, OUTPUT); // pinMode(Relay_3, OUTPUT); // pinMode(Relay_4, OUTPUT); delay(1000); myGLCD.InitLCD(); // Нарисовать несколько линий myGLCD.setColor(VGA_WHITE); int x1, x2, y1, y2; myGLCD.clrScr(); myGLCD.drawLine(0, 184, 479, 184); myGLCD.drawLine(0, 49, 479, 49); myGLCD.drawLine(0, 319, 479, 319); myGLCD.drawLine(239, 49, 239, 319); myGLCD.setColor(VGA_WHITE); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); // водоем myGLCD.print("VODA", 55, 59); myGLCD.print("Temp. :", LEFT, 89); // суша myGLCD.setColor(VGA_WHITE); myGLCD.print("SUSHA", 303, 59); myGLCD.print("Temp. :", 240, 89); myGLCD.print("Hum. :", 240, 109); //время работы лампы myGLCD.setColor(VGA_WHITE); myGLCD.print("SVET", 29, 194); myGLCD.print("Time : 9-21", LEFT, 224); // время кормления myGLCD.setColor(VGA_WHITE); myGLCD.print("KORM", 300, 194); myGLCD.print("Time : 10-00", 240, 224); myGLCD.print("Time : 18-00", 240, 244); } void loop() { int chk; ; // Мониторинг ошибок chk = DHT.read(DHT11_PIN); // Чтение данных switch (chk){ case DHTLIB_OK: break; case DHTLIB_ERROR_CHECKSUM: Serial.println("Checksum error, \t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.println("Time out error, \t"); break; default: Serial.println("Unknown error, \t"); break; } digitalWrite(12,HIGH); //// t = rtc.getTime(); String stringOne = rtc.getTimeStr(); myGLCD.setColor(VGA_WHITE); //Цвет отображения myGLCD.setFont(BigFont); //Шрифт для отображения myGLCD.print(rtc.getTimeStr(), CENTER, 1); //Отображаем часы myGLCD.setColor(VGA_WHITE); //Цвет отображения myGLCD.setFont(SmallFont); //Шрифт для отображения myGLCD.print(rtc.getDateStr(), CENTER, 20); //Отображаем дату // Выводим показания влажности и температуры Serial.print("Humidity = "); Serial.print(DHT.humidity, 1); Serial.print(", Temp = "); Serial.println(DHT.temperature,1); // Реле подогрева суши if (DHT.temperature <= 28) digitalWrite(Relay_1, RELAY_ON); //включаем реле если температура ниже else if (DHT.temperature > 30) digitalWrite(Relay_1, RELAY_OFF); //выключаем реле если температура выше // Реле подогрева воды // if (DHT.temperature <= 25) digitalWrite(Relay_2, RELAY_ON); //включаем реле если температура ниже // else if (DHT.temperature > 28) digitalWrite(Relay_2, RELAY_OFF); //выключаем реле если температура выше // Реле включения выключения лампы уф // if (??) digitalWrite(Relay_3, RELAY_ON); //включаем реле если время 09-00 // else if (??) digitalWrite(Relay_3, RELAY_OFF); //выключаем реле если время 21-00 // реле включения кормушки //if (??) digitalWrite(Relay_4, RELAY_ON); //включаем реле в 10-00 на 2 секунды //else if (??) digitalWrite(Relay_4, RELAY_OFF); // реле включения кормушки //if (??) digitalWrite(Relay_4, RELAY_ON); //включаем реле в 18-00 на 2 секунды // else if (??) digitalWrite(Relay_4, RELAY_OFF); myGLCD.setFont(BigFont); myGLCD.setColor(VGA_WHITE); // myGLCD.print(String(Temperature*0.1), 144,89); // температура воды myGLCD.setColor(VGA_WHITE); myGLCD.print(String(DHT.temperature), 368,89) ; myGLCD.print("C ", 432,89 ); myGLCD.print(String(DHT.humidity), 368,109); myGLCD.print("%", 432,109); delay (5000); } [/code]
Всем привет, собираю для черепах автоматический контроль температуры и автокормушку,
А черепахи на каком контроллере?
Всем привет, собираю для черепах автоматический контроль температуры и автокормушку,
А черепахи на каком контроллере?
живые...
живые...
Ой, блин, простите. Честное слово не стёб. Как раз смотрел на шестиного робота-паука и был абсолютно уверен, что у Вас черепахи-роботы. Даже подумал - "кормушка", это они типа сами походят к зарядке и подзаряжаются, что-ли? :))))))
неужели ни кто не может помочь?
Не знаю какую библиотеку Вы ипользуете, но Вам надо прочитать значение 1)-часов, 2)минут, 3)секунд, Например так:
И уберите в конце delay 5сек. потому что Вы не сможете открыть/закрыть комушку на 2 сек.
Не знаю какую библиотеку Вы ипользуете, но Вам надо прочитать значение 1)-часов, 2)минут, 3)секунд, Например так:
И уберите в конце delay 5сек. потому что Вы не сможете открыть/закрыть комушку на 2 сек.
Спасибо, за совет, что то при компиляции ошибка 'sekA' was not declared in this scope я так понимаю ее надо прописать где то...
Канешно этоже переменные, их нужно декларировать!!!
Теперь опять ошибка 'DS1307_SEC' was not declared in this scope
Я же Вам написал "Например так" Это значит что каждая библиотека по своему определяет часы, минуты, секунды. В самой библиотеке должны быть примеры, посмотрите их и определите как присвоить значение.
Понял, прошу прощения за глупые вопросы
Все равно не получается, подскажите с какой библиотекой у Вас пример написан? может скините ссылочку?
Вот ссылка на сайт где есть библиотека которую я описал, но там надо регистрироваться а мне это не надо. Почитайте и скачаете. http://full-chip.net/17-arduino-rtc-ds1307-chasy-realnogo-vremeni-i-arduino-s-vyvodom-na-displey-16x2.html
У себе найти не могу!
Вот код на той библиотеке что у Вас (если я угадал) _ проверяйте:
Теперь компиляция проходит удачно, но реле не включается, попробывал Ваш отдельно залить, та же проблема реле не хочет работать.
Включилось реле убрав одно равно
if
(chasA = 9)
В 38 строчку пропишите Serial.println(chasA);
Выдало другое число, как настроить что реле работало с 9 до 21?
В принцепе там в коде все настроено (Правда я его не проверял) необходимо дождаться времени срабатывания и проверять все с помощью Serial. Просто проведите суточную проверку!!!
Хорошо попробую
Выдало другое число, как настроить что реле работало с 9 до 21?
Попробуйте так:
Супер, так работает, спасибо большое!
Спасибо работают оба кода, проблема была в delay, тогда другой вопрос как сделать чтоб информация о температуре и влажности не скакала так сильно... обновлялась каждые 5 секунд?
Мерять каждые 0,5 секунды - через 5 сек. получим 10 значений. Вывести среднее