Аквариум и ds1302
- Войдите на сайт для отправки комментариев
Ср, 01/03/2017 - 16:39
Форумчане, гляньте глазом, где я накососрезил , непонятно как вкл воздушный насос когда хочет, код уже замылился перед глазами, не вижу ошибку. Спасибо! #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302, 8, 10, 9); //rst-dat-clk #include <LiquidCrystal.h> //Подключаем библиотеку для работы с LCD LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // инициализируем LCD, указывая управляющие контакты #define dht11_pin 14 // определение номера порта dht11 byte read_dht11_dat() //далее функция считывания одного байта данных с датчика { byte i = 0; byte result = 0; for (i = 0; i < 8; i++) { while (!digitalRead(dht11_pin)); // ожидание получения "1" с датчика delayMicroseconds(30); if (digitalRead(dht11_pin) != 0 ) // если значение осталось "1" через 30 мксек bitSet(result, 7 - i); // запись бита в результат while (digitalRead(dht11_pin)); // ожидание окончания "1" } return result; } int airpin = 13; int ledpin = 11; int t = 0; int v = 0; int light; void setup() { // Serial.begin(9600); lcd.begin(16, 2); time.begin(); // time.settime(-1, 53); //установит 55 минут, а секунды, часы и дату, оставит без изменений //time.settime(0, 22, 18); //установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений // time.settime(0,04,21,28,02,17,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник lcd.clear(); pinMode(dht11_pin, OUTPUT); //установка порта dht11_pin в режим выхода digitalWrite(dht11_pin, HIGH); //установка на нем высокого уровня pinMode(airpin, OUTPUT); pinMode(ledpin, OUTPUT); light = 0; } void loop() { time.gettime(); dht11(); lcd.setCursor(0, 0); //lcd.print(time.Hours); lcd.print(':'); lcd.print(time.minutes); lcd.print(':'); lcd.print(time.seconds); lcd.print(" "); // lcd.print(time.gettime("H:i:s")); // выводим время lcd.print(time.gettime("H:i ")); lcd.print(t); lcd.print("C"); lcd.setCursor(0, 1); lcd.print(time.gettime("dM ")); lcd.print(v); lcd.print("%"); if (time.Hours >= 7 && time.Hours <= 22) { // c 07:00 до 22:00 if (time.minutes >= 50 && time.minutes <= 59) { digitalWrite(airpin, HIGH); lcd.setCursor(15, 0); lcd.print("A"); } else if (time.minutes >= 50 && time.minutes <= 59) { digitalWrite(airpin, LOW); lcd.setCursor(15, 0); lcd.print(" "); } } if (time.Hours >= 7 && time.Hours <= 22) { if (light == 0) { for (int i = 0; i <= 150; i++) { analogWrite(ledpin, i); delay(400); } } digitalWrite(ledpin, HIGH); lcd.setCursor(15, 1); lcd.print("L"); light = 1; } else { if (light == 1) { for (int i = 150; i >= 0; i--) { analogWrite(ledpin, i); delay(100); } } digitalWrite(ledpin, LOW); light == 0; lcd.setCursor(15, 1); lcd.print(" "); } delay(500); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } void dht11() { byte dht11_dat[5]; byte dht11_in; byte i;// start condition digitalWrite(dht11_pin, LOW); // установка низкого уровня delay(18); // задержка 18 мс digitalWrite(dht11_pin, HIGH); // установка высокого уровня delayMicroseconds(1); // задержка 1 мкс pinMode(dht11_pin, INPUT); //установка порта dht11_pin в режим входа delayMicroseconds(40); // задержка 40 мкс if (digitalRead(dht11_pin)) // далее проверка получения сигналов готовности датчика { // Serial.println("cond. 1 not met"); delay(1000); return; } delayMicroseconds(80); if (!digitalRead(dht11_pin)) { // Serial.println("cond. 2 not met"); return; } delayMicroseconds(80); // задержка 80 мкс for (i = 0; i < 5; i++) // прием 5 байт данных { dht11_dat[i] = read_dht11_dat(); // с помощью функции read_dht11_dat } pinMode(dht11_pin, OUTPUT); //установка порта dht11_pin в режим выхода digitalWrite(dht11_pin, HIGH); // установка высокого уровня /* byte dht11_check_sum = dht11_dat[0] + dht11_dat[2]; // проверка контрольной суммы if (dht11_dat[4] != dht11_check_sum) { // Serial.println("DHT11 checksum error"); } // Serial.print("T"); // далее вывод показаний датчика // Serial.println(int(dht11_dat[2])); // Serial.print("V"); // Serial.println(int(dht11_dat[0])); */ t = (int(dht11_dat[2])); v = (int(dht11_dat[0])); }
вот тут и накосячил у тебя с 50по59минуту включается и не выключается т.к. иначе не работает потому что там тоже самое
if
(time.minutes >= 50 && time.minutes <= 59) {
061
digitalWrite(airpin, HIGH);
062
lcd.setCursor(15, 0);
063
lcd.print(
"A"
);
064
}
065
else
if
(time.minutes >= 50 && time.minutes <= 59) {
066
digitalWrite(airpin, LOW);
067
lcd.setCursor(15, 0);
068
lcd.print(
" "
);
069
}
по толку надо вообще там чек сделать логический а не дергать ногу каждые пару секунд.
т.е. если включено то выключить если выключено то включить РАЗОВО.
Thx!!! большой, как чек сделать пока не знаю, вторая прога на микроконтроллере, типа флага по условию?
у тебя там уже слово лайт есть правда интегер. 0 1. сделай еще айр тоже 0 1 . по тому же принципу там же все у тебя есть.
Ок, понял. спасибо большое человеческое!)
у тебя там еще косяки. работает это с 7 до 23-00 а не 22-00. и воздух качаешь только в этой время. ночью рыбки ты дышать не хотят?!!
и рассвет/закат надо было не так сделать. а включил его в 7-00 и выключил в 23-00 или 22-00. зачем колбасить подурности все время.
и лсд колбасить каждую секунду не надо. разово сигнал подал и все.
т.е. воздух включаешь в 50мин каждый час и выключаешь в 00 мин. разово с подачей сигнала на лсд.
по воздуху так задумано, ночью не нужно качать, сомики живут в небольшом аквариуме. переделал код чтоб ноги не дергать лишний раз, по LCD не понял, как то иначе можно сделать? LCD вкл постоянно там время с датой крутится и темп с влажностью.
и лсд колбасить каждую секунду не надо. разово сигнал подал и все.
т.е. воздух включаешь в 50мин каждый час и выключаешь в 00 мин. разово с подачей сигнала на лсд.
т.е. просто обновлять LCD только когда надо, идут часы и отображаются минуты, как я понял раз в минуту минимум обновлять LCD?
и лсд колбасить каждую секунду не надо. разово сигнал подал и все.
т.е. воздух включаешь в 50мин каждый час и выключаешь в 00 мин. разово с подачей сигнала на лсд.
т.е. просто обновлять LCD только когда надо, идут часы и отображаются минуты, как я понял раз в минуту минимум обновлять LCD?
ну я хз.
питание подаешь а сигнал наверно там держится и так не надо поновой все время давать символы то. только при обновление данных. если у тебя минимум минута то наверно раз в минуту и можно обновлять. а питание ж у тебя круглосуточно . ты ж не выключаешь их на ночь