Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Интерфейсы

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.05.2015, 04:44   #1
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1307
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Шаблон интерфейса - включение по температуре



Обязательно прочитайте предыдущую тему.

В этой части будет немного изменён внешний вид и добавлен датчик температуры (и влажности), чтоб в зависимости от температуры включалась печка или кондиционер, а так же реализуем ещё одну очень полезную функцию…
Поскольку наш веб-интерфейс непрерывно запрашивает данные у ардуины, то будет не лишним отправлять его в «спящий режим», для того чтоб не мешать другим клиентам.

Псмотреть-потрогать вживую.

Температуру и влажность будет измерять DHT22.



Ардуина

Прошиваем ниже приведённый код:

PHP код:
#include <EEPROM.h>
#define MAXMILLIS 4294967295
#include "DHT.h"
#define DHTPIN 9 // пин для подключения датчика
#define DHTTYPE DHT22  
DHT dht(DHTPINDHTTYPE);

int hum 110// влажность
int thum 110// температура

byte d2 EEPROM.read(2);     // флаги (состояние пинов) хранится в EEPROM, считываем их
byte d3 EEPROM.read(3);
byte d4 EEPROM.read(4);
int shim1 EEPROM.read(5); // значение ШИМ хранится в EEPROM, считываем их
int shim2 EEPROM.read(6);
byte d7 0
byte d8 0;
byte d11 EEPROM.read(11);
byte d12 EEPROM.read(12);
byte d13 EEPROM.read(13);

int oxlagdenie EEPROM.read(14); // заданая температура для включения кондиционера
int toxl EEPROM.read(15); // флаг включения

int podogrev EEPROM.read(16); // заданая температура для включения печки
int tpod EEPROM.read(17); // флаг включения

byte descript[5]; // массив

unsigned long   time// время

long timelapsed 0;

byte count=0// счетчик минут

void setup() 
{
  
Serial.begin(57600);
  
pinMode(2OUTPUT); 
  
pinMode(3OUTPUT);
  
pinMode(4OUTPUT);
  
pinMode(5OUTPUT); // ШИМ
  
pinMode(6OUTPUT); // ШИМ
  
pinMode(7OUTPUT); // охлаждение
  
pinMode(8OUTPUT); // подогрев 
  
pinMode(11OUTPUT);
  
pinMode(12OUTPUT);
  
pinMode(13OUTPUT);
  
  
thum dht.readTemperature(); // считываем температуру, сначала делаем это в сетапе, так как следующее чтение будет только через минуту
  
hum dht.readHumidity(); // считываем влажность
  
  
if(d2digitalWrite(2HIGH); else digitalWrite(2LOW); // если до перезагрузки d2 была включена, то включаем, если нет, то нет 
  
delay(500); // чтобы не включалось всё сразу, делаем паузы
  
if(d3digitalWrite(3HIGH); else digitalWrite(3LOW);
  
delay(500);
  if(
d4digitalWrite(4HIGH); else digitalWrite(4LOW);
  
delay(500);
  
analogWrite(5shim1 2.55); // включаем ШИМ d5
  
delay(500);
  
analogWrite(6shim2 2.55); // включаем ШИМ d6
  
delay(500);
  if(
d11digitalWrite(11HIGH); else digitalWrite(11LOW);
  
delay(500);
  if(
d12digitalWrite(12HIGH); else digitalWrite(12LOW);
  
delay(500);
  if(
d13digitalWrite(13HIGH); else digitalWrite(13LOW);
}
  
void loop() 
{  
  if (
Serial.available()>4// ждём дескриптор и нужный символ
   
{
    if (
Serial.read()=='Y'// проверяем первый символ, если это 'Y', то продолжаем принимать, если нет, то выходим из цикла чтения
     
{
      for (
byte i=05i++)
        {
           
descript[i] = Serial.read(); // добавляем символы в массив   
        

        
    if((
descript[0] =='+') && (descript[1] =='=') && (descript[2] =='Z')) // проверяем дескриптор
     
{
      switch (
descript[3])
       {
         case 
'o'// обновление
         
glavnaia(); // отправка ответа
         
break;
         
         
////////////// Кнопки ///////////////////
         
case 'A'// d2 вкл
         
digitalWrite(2HIGH); // вкл d2
         
d2 1// ставим флаг в единицу (вкл)
         
EEPROM.write(2d2); // записываем состояние d2 в ячейку №2 EEPROM 
         
glavnaia(); // отправка ответа
         
break;
         
         case 
'a'// d2 откл
         
digitalWrite(2LOW); // откл d2
         
d2 0// ставим флаг в ноль (откл)
         
EEPROM.write(2d2); // записываем состояние d2 в ячейку №2 EEPROM 
         
glavnaia(); // отправка ответа
         
break; 
 
         case 
'B'// d3
         
digitalWrite(3HIGH);
         
d3 1;
         
EEPROM.write(3d3);
         
glavnaia();
         break;
         
         case 
'b'// d3
         
digitalWrite(3LOW);
         
d3 0;
         
EEPROM.write(3d3);
         
glavnaia();
         break;          
  
         case 
'C'// d4
         
digitalWrite(4HIGH);
         
d4 1;
         
EEPROM.write(4d4);
         
glavnaia();
         break;
         
         case 
'c'// d4
         
digitalWrite(4LOW);
         
d4 0;
         
EEPROM.write(4d4);
         
glavnaia();
         break;   
         
         
/////////////// ШИМ ///////////////
         
case 'D'// d5 прибавляем shim1
         
shim1++;
         if(
shim1 100shim1 100;
         
EEPROM.write(5shim1);
         
analogWrite(5shim1 2.55);
         
glavnaia();
         break;
         
         case 
'd'// d5 убавляем shim1
         
shim1--;
         if(
shim1 1shim1 0;
         
EEPROM.write(5shim1);
         
analogWrite(5shim1 2.55);
         
glavnaia();
         break; 
  
         case 
'E'// d6 прибавляем shim2
         
shim2++;
         if(
shim2 100shim2 100;
         
EEPROM.write(6shim2);
         
analogWrite(6shim2 2.55);
         
glavnaia();
         break;
         
         case 
'e'// d6 убавляем shim2
         
shim2--;
         if(
shim2 1shim2 0;
         
EEPROM.write(6shim2);
         
analogWrite(6shim2 2.55);
         
glavnaia();
         break;   
  
         case 
'F'// мгновенное включение ШИМ на D5
         
shim1 EEPROM.read(5); // считываем значение ШИМ из EEPROM
         
analogWrite(5shim1 2.55); // включаем ШИМ D5
         
glavnaia();
         break;
         
         case 
'f'// мгновенное отключение ШИМ на D5
         
shim1 0;
         
analogWrite(5shim1); // отключаем ШИМ D5, но НЕ записываем в EEPROM
         
glavnaia();
         break;  
 
         case 
'G'// мгновенное включение ШИМ на D6
         
shim2 EEPROM.read(6); // считываем значение ШИМ из EEPROM
         
analogWrite(6shim2 2.55); // включаем ШИМ D6
         
glavnaia();
         break;
         
         case 
'g'// мгновенное отключение ШИМ на D6
         
shim2 0;
         
analogWrite(6shim2); // отключаем ШИМ D6, но НЕ записываем в EEPROM
         
glavnaia();
         break;  
         
         
//////////////// Кнопки//////////////////
         
case 'J'// d11
         
digitalWrite(11HIGH);
         
d11 1;
         
EEPROM.write(11d11);
         
glavnaia();
         break;
         
         case 
'j'// d11
         
digitalWrite(11LOW);
         
d11 0;
         
EEPROM.write(11d11);
         
glavnaia();
         break;  
        
         case 
'K'// d12
         
digitalWrite(12HIGH);
         
d12 1;
         
EEPROM.write(12d12);
         
glavnaia();
         break;
         
         case 
'k'// d12
         
digitalWrite(12LOW);
         
d12 0;
         
EEPROM.write(12d12);
         
glavnaia();
         break;         
      
         case 
'M'// d13
         
digitalWrite(13HIGH);
         
d13 1;
         
EEPROM.write(13d13);
         
glavnaia();
         break;
         
         case 
'm'// d13
         
digitalWrite(13LOW);
         
d13 0;
         
EEPROM.write(13d13);
         
glavnaia();
         break;
         
         
////////////// ОХЛАЖДЕНИЕ /////////////////
         
case 'N'// увеличение "температуры включения охлаждения"
         
oxlagdenie++; // если "температура включения охлаждения" больше нуля, то охлаждение будет работать в автоматическом режиме
         
EEPROM.write(14oxlagdenie); // запишем значение в память
         
toxl 1// включаем флаг
         
EEPROM.write(15toxl); // запишем флаг в память
         
glavnaia();
         break;
         
         case 
'n'// уменьшение "температуры включения охлаждения"
         
oxlagdenie--;
         if(
oxlagdenie 1// если "температура включения охлаждения" = 0, то охлаждение отключится
            
{
               
oxlagdenie 0// меньше нуля, у нас не будет
               
toxl 0// отключаем флаг
               
EEPROM.write(14oxlagdenie); // запишем значение в память
               
EEPROM.write(15toxl); // запишем флаг в память
               
digitalWrite(7LOW); // отключаем
               
d7 0
            }
         
glavnaia();
         break;  
  
         
////////////// ПОДОГРЕВ /////////////////
         
case 'P'// увеличение "температуры включения печки"
         
podogrev++; // если "температура включения печки" больше нуля, то печка будет работать в автоматическом режиме
         
EEPROM.write(16podogrev); // запишем значение в память
         
tpod 1// включаем флаг
         
EEPROM.write(17tpod); // запишем флаг в память
         
glavnaia();
         break;
         
         case 
'p'// уменьшение "температуры включения печки"
         
podogrev--;
         if(
podogrev 1// если "температура включения печки" = 0, то печка отключится
            
{
               
podogrev 0// меньше нуля, у нас не будет
               
tpod 0// отключаем флаг
               
EEPROM.write(16podogrev); // запишем значение в память
               
EEPROM.write(17tpod); // запишем флаг в память
               
digitalWrite(8LOW); // отключаем
               
d8 0
            }
         
glavnaia();
         break;  
  
         default:
         
glavnaia();
       }
     }
   
    else 
// если дескриптор ложный, то очищаем буфер
      
{
        for(
byte i=0255i++) 
         {
           
Serial.read();    
         } 
      } 
     }    
// конец if (Serial.read()=='Y')
   
}    // конец чтение порта
 
 
 
unsigned long currtime millis(); 
 
 if(
currtime timetimelapsed = (currtime time); 
 
 else 
timelapsed = (MAXMILLIS time currtime);

 if(
timelapsed >= 120000)  // функция будет выполняться раз в 2 минуты
   

     
time currtime;
     
count++;
     
// поскольку время чтения каждого датчика ~ 250 мс (программа вешается на это время), то будем читать их по отдельности, в разное время  
     
if(count == 1)  thum dht.readTemperature(); // считываем температуру. Время чтения = 250 мс.
     
if(count == 2)  hum dht.readHumidity(); // считываем влажность, если не нужна, то лучше отключить. Время чтения = 250 мс
     
if(count 1count=0;
 
   
/////////////////////// Охлаждение ///////////////////////   
       
if((thum oxlagdenie) && (toxl == 1)) // если тепература больше заданого значения и флаг = 1, тогда включаем кондиционер (если флаг = 0, тогда функция не работает)
         
{                                  
           
digitalWrite(7HIGH); // включили охлаждение                        
           
d7 1;                          
         }
   
       else if(
toxl == 1// иначе если меньше и флаг = 1, тогда отключаем охлаждение                                   
         
{
           
digitalWrite(7LOW); // отключили охлаждение  
           
d7 0;
         }  
        
   
/////////////////////// Подогрев /////////////////////////
       
if((thum podogrev) && (tpod == 1)) // если тепература меньше заданого значения и флаг = 1, тогда включаем печку (если флаг = 0, тогда функция не работает)  
         
{                                
           
digitalWrite(8HIGH); // включили печку                      
           
d8 1;                       
         }
   
       else if(
tpod == 1// иначе если больше и флаг = 1, тогда отключаем печку
         
{
           
digitalWrite(8LOW); // отключили печку 
           
d8 0;
         }
         
   } 
// конец включения по температуре
   
 
// конец loop

void glavnaia() // отправка данных
 
{
      
Serial.print(d2);//0
      
Serial.print(",");
      
Serial.print(d3);//1
      
Serial.print(",");
      
Serial.print(d4);//2
      
Serial.print(",");
      
Serial.print(0);//3  //  пока отключаем, потом пригодится 
      
Serial.print(",");
      
Serial.print(0);//4  //  пока отключаем, потом пригодится 
      
Serial.print(",");
      
Serial.print(d7);//5 охлаждение
      
Serial.print(",");
      
Serial.print(d8);//6 подогрев
      
Serial.print(",");
      
Serial.print(0);//7  //  пока отключаем, потом пригодится 
      
Serial.print(",");
      
Serial.print(0);//8 //  пока отключаем, потом пригодится 
      
Serial.print(",");
      
Serial.print(d11);//9
      
Serial.print(",");
      
Serial.print(d12);//10
      
Serial.print(",");
      
Serial.print(d13);//11 
      
Serial.print(",");
      
Serial.print(shim1); // 12 
      
Serial.print(",");
      
Serial.print(shim2); // 13 
      
Serial.print(",");
      
Serial.print(thum); // 14 //температура
      
Serial.print(",");
      
Serial.print(hum); // 15 // влажность
      
Serial.print(",");
      
Serial.print(oxlagdenie);//16 
      
Serial.print(",");
      
Serial.println(podogrev);//17 , отсылается 18 значений разделённых запятой
 

Библиотека DHTsensor.

Опрос DHT22

Внутри DHT22 стоят два датчика, температуры и влажности. Время чтения каждого составляет 250 мс, то есть во время опроса (dht.readTemperature) вся программа «вешается» и обмен данными с ардуиной невозможен.
Исходя из этого, мы будем опрашивать датчики поочереди, с интервалом 2 мин.

PHP код:
...
 if(
timelapsed >= 120000// функция будет выполняться раз в 2 минуты
   
{  
     
time currtime;
     
count++;
     
// поскольку время чтения каждого датчика ~ 250 мс (программа вешается на это время), то будем читать их по отдельности, в разное время  
     
if(count == 1)  thum dht.readTemperature(); // считываем температуру. Время чтения = 250 мс.
     
if(count == 2)  hum dht.readHumidity(); // считываем влажность, если не нужна, то лучше отключить. Время чтения = 250 мс
     
if(count 1count=0;
.. 
Поскольку опрос датчиков произойдёт только через две минуты после старта программы, то необходимо первый раз получить данные в функции void setup()

PHP код:
...
  
thum dht.readTemperature(); // считываем температуру, сначала делаем это в сетапе, так как следующее чтение будет только через две минуты
  
hum dht.readHumidity(); // считываем влажность
... 
Включение устройств по температуре

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

Проверка необходимости включения/отключения происходит (тоже раз в две минуты) сразу после опроса датчика.

PHP код:

if(timelapsed >= 120000// функция будет выполняться раз в 2 минуты
   
{  
     
time currtime;
     
count++;
     
// поскольку время чтения каждого датчика ~ 250 мс (программа вешается на это время), то будем читать их по отдельности, в разное время  
     
if(count == 1)  thum dht.readTemperature(); // считываем температуру. Время чтения = 250 мс.
     
if(count == 2)  hum dht.readHumidity(); // считываем влажность, если не нужна, то лучше отключить. Время чтения = 250 мс
     
if(count 1count=0;
 
   
/////////////////////// Охлаждение ///////////////////////   
       
if((thum oxlagdenie) && (toxl == 1)) // если тепература больше заданого значения и флаг = 1, тогда включаем кондиционер (если флаг = 0, тогда функция не работает)
         
{                                  
           
digitalWrite(7HIGH); // включили охлаждение                        
           
d7 1;                          
         }
   
       else if(
toxl == 1// иначе если меньше и флаг = 1, тогда отключаем охлаждение                                   
         
{
           
digitalWrite(7LOW); // отключили охлаждение  
           
d7 0;
         }  
        
   
/////////////////////// Подогрев /////////////////////////
       
if((thum podogrev) && (tpod == 1)) // если тепература меньше заданого значения и флаг = 1, тогда включаем печку (если флаг = 0, тогда функция не работает)  
         
{                                
           
digitalWrite(8HIGH); // включили печку                      
           
d8 1;                       
         }
   
       else if(
tpod == 1// иначе если больше и флаг = 1, тогда отключаем печку
         
{
           
digitalWrite(8LOW); // отключили печку 
           
d8 0;
         }
         
   } 
// конец включения по температуре 
Если температура окружающей среды (thum), поднимется выше заданой (oxlagdenie), то кондиционер включится, а когда опустится ниже, то отключится.

Температура включения кондиционера, задаётся в этих блоках:

PHP код:

         
////////////// ОХЛАЖДЕНИЕ /////////////////
         
case 'N'// увеличение "температуры включения охлаждения"
         
oxlagdenie++; // если "температура включения охлаждения" больше нуля, то охлаждение будет работать в автоматическом режиме
         
EEPROM.write(14oxlagdenie); // запишем значение в память
         
toxl 1// включаем флаг
         
EEPROM.write(15toxl); // запишем флаг в память
         
glavnaia();
         break;
         
         case 
'n'// уменьшение "температуры включения охлаждения"
         
oxlagdenie--;
         if(
oxlagdenie 1// если "температура включения охлаждения" = 0, то охлаждение отключится
            
{
               
oxlagdenie 0// меньше нуля, у нас не будет
               
toxl 0// отключаем флаг
               
EEPROM.write(14oxlagdenie); // запишем значение в память
               
EEPROM.write(15toxl); // запишем флаг в память
               
digitalWrite(7LOW); // отключаем
               
d7 0
            }
         
glavnaia();
         break; 
При получении символа N, ардуина увеличивает значение oxlagdenie на единицу, устанавливает флаг работы toxl = 1; и записывает эту инфу в EEPROM.
После обесточивания и последующего включения, система вернётся в рабочее состояние.

При получении символа n, ардуина уменьшает значение oxlagdenie на единицу.
Если oxlagdenie будет равно нулю, то флаг toxl обнулится и автоматическая работа кондиционера будет выключена.

Подогрев устроен так же.

Управление

Скачайте архив и распакуйте его в рабочую папку сервера – /var/www/knoppolztemp/

Для наглядности, откройте файл index.html из архива:

Нажатие на «Кнопки», «Диммер» и «Темп» открывают/закрывают соответствующие панели с элементами управления.



Зайдите по адресу ваш_роутер/knoppolztemp/ и нажмите кнопку "Темп".



Левые кнопки + и - отвечают за «охлаждение», правые за «подогрев».

Установите температуру «включения охлаждения» (19`C) ниже температуры окружающей среды (20`C) и подождите.
Когда сработает функция:

PHP код:
if(timelapsed >= 120000// функция будет выполняться раз в 2 минуты 
Охлаждение включится и «плюс» на кнопке станет красным.

С подогревом всё аналогично, только температуру «включения подогрева» (17`C) надо установить выше.

Спящий режим

Поскольку страничка постоянно запрашивает данные у ардуины, то параллельное подключение других клиентов будет приводить к тому, что они будут мешать друг другу. Чтобы этого избежать, мы будем отключать обновление по прошествии некоторого времени.

В файле index.html, в конце функции обновления (function show()) есть строки:

PHP код:
...
slmode++;
if(
slmode 60) { /* спящий режим */
$(".pansl").show();
$(
"st").hide();
flagobnov 0;
slmode 0;
... 
Каждый раз, при срабатывании функции show(), переменная slmode увеличивается на единицу. По достижении указаного значения if(slmode > 60), обновление отключится и экран закроется полупрозрачной панелью с кнопкой «ПУСК».



Нажатие на Пуск, включит обновление и опять начнётся отсчёт.

PHP код:

$(".slip").click(function(){ /* кнопка пуск  */

        
$(".pansl").hide();
        
flagobnov 1;
        
show();
}); 
На этом пока всё, теперь можно управлять дачей или теплицей.

Исправил ошибку с обнулением millis(). Спасибо vitfil

Небольшая корректировка!

Если Вы пользуете OpenWrt, то надо в файле /etc/php.ini подправить некоторые строки, вот так:

PHP код:
max_execution_time 1

max_input_time 
1

memory_limit 
1M

default_socket_timeout 

...
В файле index.html надо переправить все таймауты timeout:200, с 200 на 500.
...
На роутере плохо работает "плавная регулировка света", в пхп не срабатывает функция stream_set_timeout($fp, 0, 150000); (в файле box2.php) не знаю почему, может пхп не полноценный.

Последний раз редактировалось stD; 02.07.2015 в 00:58.
stD вне форума   Ответить с цитированием
Старый 21.05.2015, 12:23   #2
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Замерности unsigned long хватает примерно на 49 дней. После этого "счетчик" начинает крутиться с нуля. Примерно через 49 дней наступит ситуация, при которой на следующие 49 дней значение, возвращаемое millis() будет меньше сохраненного time
ВОЗМОЖНО, через 49 дней ваша конструкция
if((millis()-time) > 120000)
сработает еще разик, а после millis() опять будет меньше time.

Последний раз редактировалось stD; 22.05.2015 в 18:38.
vitfil вне форума   Ответить с цитированием
Старый 21.05.2015, 13:45   #3
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Как-то так:

#define MAX_MILLIS 4294967295
...
unsigned long current_time = millis();
int time_elapsed = (current_time > time) ? (current_time - time) : (MAX_MILLIS - time + current_time)
if (time_elapsed >= 120000) {
time = current_time;
...
}

Только я бы не стал этот код использовать на Arduino DUE. Подробно объяснять, почему?
vitfil вне форума   Ответить с цитированием
Старый 21.05.2015, 13:49   #4
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1307
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Шаблон интерфейса - включение по температуре

Спасибо.

Цитата:
Подробно объяснять, почему?
Дуе у меня нет, но думаю обьяснение будет не лишним.
stD вне форума   Ответить с цитированием
Старый 21.05.2015, 13:54   #5
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Просмотрел с самого начала предыдущие темы... Архитектура, мягко говоря, хромает. Затевать опрос Ардуинки со стороны сервера - кощунство. А вдруг она занята какой-то непотребщиной? И вы хотите ее отвлекать на всякого рода глупости типа "вы не подскажете, как пройти в библиотеку?"
vitfil вне форума   Ответить с цитированием
Старый 21.05.2015, 13:58   #6
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Цитата:
Сообщение от mebitek Посмотреть сообщение
Спасибо.
Дуе у меня нет, но думаю обьяснение будет не лишним.
32 бита потому что. Да и там есть вполне вменяемые таймеры, которые можно прикрутить без танцев с бубном и проводить измерения по прерыванию.
vitfil вне форума   Ответить с цитированием
Старый 21.05.2015, 14:08   #7
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1307
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Шаблон интерфейса - включение по температуре

Цитата:
А вдруг она занята какой-то непотребщиной?
Ну и пускай себе занимается, ведь "мой вопрос" будет сидеть в буфере и сработает только тогда, когда до него дойдёт очередь.

PHP код:
...
if (
Serial.available()>4)
... 
stD вне форума   Ответить с цитированием
Старый 21.05.2015, 14:10   #8
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Вы не подумайте, я не собираюсь убеждать Вас
vitfil вне форума   Ответить с цитированием
Старый 21.05.2015, 14:11   #9
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1307
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Шаблон интерфейса - включение по температуре

Дык и я не упорствую, а хочу понять. Если Вы объясните свою мысль, то будет здорово.

Собственно код и выложен отчасти для критики.
stD вне форума   Ответить с цитированием
Старый 21.05.2015, 14:20   #10
vitfil
Junior Member
 
Регистрация: 04.02.2014
Адрес: Минск
Возраст: 47
Сообщений: 20
Вес репутации: 0
vitfil is an unknown quantity at this point
Отправить сообщение для vitfil с помощью Skype™
По умолчанию Re: Шаблон интерфейса - включение по температуре

Задача контроллера с датчиками - снять показания и отправить данные "куда следует".
Задача сервера - принять данные и сохранить.
Задача GUI - отобразить данные, удачно их интерпретировав.
vitfil вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 00:35. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика