Как написать код короче???
- Войдите на сайт для отправки комментариев
Пт, 27/05/2016 - 10:30
lcd.clear(); //Отчистка экрана
if (srh < hl)
{digitalWrite(R1, HIGH);}
else
if (srh > hh)
{digitalWrite(R1, LOW);}
if (digitalRead(R1) == HIGH){
lcd.setCursor(0,3);
lcd.print("R1-ON");}
else
if (digitalRead(R1) == LOW){
lcd.setCursor(0,3);
lcd.print("R1-OFF");}
А цель какова - насколько короче надо? И "короче" это как - в символах исходного кода или в размере скомпилированного кода?
lcd.clear(); //Отчистка экрана digitalWrite(R1, srh < hl); lcd.setCursor(0,3); lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF");Logik, Ваша вторая строчка делает совсем не то, что нужно ТС.
Logik, Ваша вторая строчка делает совсем не то, что нужно ТС.
Четвёртая - тоже.
Правда, никогда до конца не ясно, что нужно ТС. Скорее всего, точно этого и сам ТС не знает.
Действительно, не замнтил что есть hl и hh. Но не удивлюсь если это опечатка ТС ))) А может и нет, похоже на управление чем-то с гистерезисом.
Добрый день!
Прошу прощения за задержку с ответом! Объясняю:
Есть датчик влажности "srh"
Есть уставка диапазона
нижнего "hl"
верхнего "hh"
Есть реле "R1"
По нижнему пределу реле включается и выводится надпись "R1-ON"
По верхнему реле выключается и выводится надпись "R1-OFF"
Хотелось просто КОД покороче, мой тоже работает но длинновато как-то
Чуть короче :))
Спасибо большое! Код работает! Не могли бы вы подсказать что значит "?" в строке
5
lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF");Да не за что )).
Это такой видоизменённый IF.
Проверяемое условие, разделитель "?", возвращаемое значение при выполнении условия, разделитель ":", возвращаемое значение при невыполнении условия.
Прошу прощения, еще один вопрос, возможно глупый:
Частота обновления LCD 2 секунды.......почему не 1 ???
#include <LiquidCrystalRus.h> #include "DHT.h" // Библиотека датчика DHT22 температуры и влажности #include <Wire.h> #include <DS1302.h>// Библиотека датчика реального времени #define DHTPINa 11 // Считывающий пин с датчика 1 #define DHTPINb 12 // Считывающий пин с датчика 2 #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dhta(DHTPINa, DHTTYPE); // Создаем объект dhta датчик 1 DHT dhtb(DHTPINb, DHTTYPE); // Создаем объект dhtb датчик 2 LiquidCrystalRus lcd(0, 1, 2, 3, 4, 5); //Прописываем адрес экрана и его строчность LCD 20х4 (RS, E, D4, D5, D6, D7) DS1302 rtc(21, 20, 19); // Прописываем пины DS3102 int R1 = 14; // инициализация Реле 1 void setup() // инициализация основных данных { lcd.begin(20, 4); // Инициализируем экрана!!! dhta.begin(); // Инициализируем датчик 1 dhtb.begin(); // Инициализируем датчик 2 rtc.halt(false); // Устанавливаем часы rtc.writeProtect(false); // Отключаем защиту от записи pinMode(R1, OUTPUT); // Устанавливаем пин 1 (как вых.) // Раскомментировать для установки времени и даты DS1302 //rtc.setDOW(FRIDAY); // Устанавливаем день недели //rtc.setTime(11, 41, 0); // Устанавливаем время 12:00:00 (24ч формат) //rtc.setDate(27, 5, 2016); // Устанавливаем дату ч.м.г } void loop() // зацикливание (код управляющей программы) { float h1 = dhta.readHumidity(); // Считываем влажность датчика 1 float h2 = dhtb.readHumidity(); // Считываем влажность датчика 2 float t1 = dhta.readTemperature(); // Считываем температуру датчика 1 float t2 = dhtb.readTemperature(); // Считываем температуру датчика 2 float srh = ((h1+h2)/2); //Определяем переменную среднее арифм. влажности float srt = ((t1+t2)/2); //Определяем переменную среднее арифм. температуры float hl = 45; float hh = 70; lcd.clear(); //Отчистка экрана //lcd.setCursor(0, 0); //Устанавливаем курсор на 6 символ на 1 строку //lcd.print(rtc.getTimeStr()); //Выводим время на экран //lcd.setCursor(5, 1); //Устанавливаем курсор на 6 символ на 2 строку //lcd.print(rtc.getDOWStr(FORMAT_SHORT)); //Выводим день недели на экран //lcd.setCursor(9, 0); //Устанавливаем курсор на 5 символ на 3 строку //lcd.print(rtc.getDateStr()); //Выводим дату на экран lcd.setCursor(0,0); //Устанавливаем курсор на 1 символ на 1 строку lcd.print("SrH-"); //Выводим текст на экран srh = (h1+h2)/2; lcd.print (srh); // Выводим параметр среднее арифметическое h на экран lcd.setCursor(10,0); //Устанавливаем курсор на 1 символ на 2 строку lcd.print("SrT-"); //Выводим текст на экран srt = (t1+t2)/2; lcd.print(srt); // Выводим параметр среднее арифметическое t на экран if (srh < hl) digitalWrite(R1, HIGH); else if (srh > hh) digitalWrite(R1, LOW); lcd.setCursor(0,3); lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF"); }Я еще на стадии изучения языка, железа, и т.д. Не кидайте большими камнями!!!
Насколько я вижу, основную задержку дают строки 36-39, они вызывают функцию библиотеки, в которой есть вызовы delay().
Загляните в библиотечный DHT.cpp, в тексте функции Read() увидите и delay(250), и delay(20).
Спасибо огромное <Araris>!!!
А вы не могли бы посоветовать литературу, по изучению языка и архитектуры МК ? В которых все описано на более менее доступном языке?!
Вопрос второй Что лучшеизучать среду разработки Ардуины или же напрямую AVR Studio и ему подобные?!
1. Была где-то тут тема, в которой выкладывали ссылки на литературу, может коллеги подскажут, или же сами найдёте тут : https://www.google.com.ua/?gws_rd=ssl#q=%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B0+site:arduino.ru
Я-то больше Гуглом спасаюсь...
2. Да там и изучать как бы нечего, взять да пользоваться. С AVR Studio и ему подобными я не работал, увы, ничего сказать по этому поводу не имею.