Как написать код короче???

somikov_sv
Offline
Зарегистрирован: 25.05.2016
  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");}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А цель какова - насколько короче надо? И "короче" это как - в символах исходного кода или в размере скомпилированного кода?

Logik
Offline
Зарегистрирован: 05.08.2014
     lcd.clear();                            //Отчистка экрана
    digitalWrite(R1, srh < hl);
    lcd.setCursor(0,3);
    lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF");

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Logik, Ваша вторая строчка делает совсем не то, что нужно ТС.

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

andriano пишет:

Logik, Ваша вторая строчка делает совсем не то, что нужно ТС.

Четвёртая - тоже.

Правда, никогда до конца не ясно, что нужно ТС. Скорее всего, точно этого и сам ТС не знает.

Logik
Offline
Зарегистрирован: 05.08.2014

Действительно, не замнтил что есть hl и hh. Но не удивлюсь если это опечатка ТС ))) А может и нет, похоже на управление чем-то с гистерезисом. 

somikov_sv
Offline
Зарегистрирован: 25.05.2016

Добрый день!

Прошу прощения за задержку с ответом! Объясняю:
Есть датчик влажности "srh"
Есть уставка диапазона 

нижнего "hl"
верхнего "hh"
Есть реле "R1"
По нижнему пределу реле включается и выводится надпись 
"R1-ON"
По верхнему реле выключается 
и выводится надпись "R1-OFF"

Хотелось просто КОД покороче, мой тоже работает но длинновато как-то

 

Araris
Offline
Зарегистрирован: 09.11.2012

Чуть короче :))

if (srh < hl) digitalWrite(R1, HIGH);
else if (srh > hh) digitalWrite(R1, LOW);
lcd.clear(); 
lcd.setCursor(0,3);
lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF");

 

somikov_sv
Offline
Зарегистрирован: 25.05.2016

Спасибо большое! Код работает! Не могли бы вы подсказать что значит "?" в строке 

lcd.print(digitalRead(R1)?"R1-ON":"R1-OFF");

Araris
Offline
Зарегистрирован: 09.11.2012

Да не за что )).

Это такой видоизменённый IF. 

Проверяемое условие, разделитель "?", возвращаемое значение при выполнении условия, разделитель ":", возвращаемое значение при невыполнении условия.

somikov_sv
Offline
Зарегистрирован: 25.05.2016

Прошу прощения, еще один вопрос, возможно глупый:
Частота обновления 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");

}

 

somikov_sv
Offline
Зарегистрирован: 25.05.2016

Я еще на стадии изучения языка, железа, и т.д. Не кидайте большими камнями!!!

Araris
Offline
Зарегистрирован: 09.11.2012

Насколько я вижу, основную задержку дают строки 36-39, они вызывают функцию библиотеки, в которой есть вызовы delay().

Загляните в библиотечный DHT.cpp, в тексте функции Read() увидите и delay(250), и delay(20).

somikov_sv
Offline
Зарегистрирован: 25.05.2016

Спасибо огромное  <Araris>!!! 

А вы не могли бы посоветовать литературу, по изучению языка и архитектуры МК ? В которых все описано на более менее доступном языке?! 
Вопрос второй Что лучшеизучать среду разработки Ардуины или же напрямую AVR Studio и ему подобные?!

Araris
Offline
Зарегистрирован: 09.11.2012

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 и ему подобными я не работал, увы, ничего сказать по этому поводу не имею.