Начни с примера. Первые шаги

Проблемы/вопросы, связанные с запуском под различными платформами и конфигурациями.

Модератор: immortal

Urbas81
Сообщения: 289
Зарегистрирован: Вс сен 16, 2012 9:39 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Начни с примера. Первые шаги

Сообщение Urbas81 » Сб янв 26, 2013 12:02 pm

paf писал(а):"...доктор, меня все игнорируют... - Следующий....
Уперся в method onNewMinute. Код добавляется прямо ниже существующего? http://smartliving.ru/Main/ScValveControl
А если нужно запускать сценарий каждые n минут?
Разъясните пожалуйста! Непроходимо для несведущего. Или как про это узнать?
Допустим если мне надо запускать что-то каждые 10 мин, я делаю такж

if((timeBetween('06:30','00:00'))&&(($m=='00')||($m=='10')||($m=='20')||($m=='30')||($m=='40')||($m=='50')))
{
что-то делаем;
}
можно еще условия добавить, например, каждую четную минуту и т.д
paf
Сообщения: 56
Зарегистрирован: Ср янв 09, 2013 7:39 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Начни с примера. Первые шаги

Сообщение paf » Вт янв 29, 2013 7:56 pm

Спасибо, Urbas81.
Это добавляется к существующему коду?
С уважением, Петр.
Urbas81
Сообщения: 289
Зарегистрирован: Вс сен 16, 2012 9:39 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Начни с примера. Первые шаги

Сообщение Urbas81 » Вт янв 29, 2013 11:27 pm

paf писал(а):Спасибо, Urbas81.
Это добавляется к существующему коду?
ну добавляется туда где обработка вызывается каждую минуту, допустим стоит условие проговаривать время каждый час, а это условие можно поставить после.
anemcov
Сообщения: 211
Зарегистрирован: Вт янв 08, 2013 11:50 pm
Откуда: Санкт-Петербург
Благодарил (а): 0
Поблагодарили: 6 раз

Re: Начни с примера. Первые шаги

Сообщение anemcov » Ср янв 30, 2013 10:10 am

if ($m=="05"||$m=="15"||$m=="25"||$m=="35"||$m=="45"||$m=="55") {
//сюда пишем код
}
запуск буде в каждую 5-ю, 15-ю и т.д. минуты
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Начни с примера. Первые шаги

Сообщение ser009 » Ср янв 30, 2013 10:15 am

Замечательно.
Вот сижу думаю как бы переделать скетч https://github.com/sochkasov/majordomo- ... rWebServer
чтобы отправлял запрос на получение температуры с ds18b20 вот это будет замечательно??? :geek:
paf
Сообщения: 56
Зарегистрирован: Ср янв 09, 2013 7:39 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Начни с примера. Первые шаги

Сообщение paf » Чт янв 31, 2013 3:34 pm

А он в целом работает?
Вот функция работает с библиотекой <OneWire.h> , читает с двух датчиков с нормальным питанием. Не думаю, что это "страшая" проблема протянуть три провода. Взял обычный телефонный удлинитель с четырьмя проводами и все работает. Если датчик не читается то 85.00 если совсем не присутствует то отображается температура оставшегося. Оставшимся в моем случае бывает домашний.

Код: Выделить всё

void temper() 
 { 
   ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp & 0x8000) 
   {   isSubZero = true; 
    Temp = (Temp ^ 0xffff) + 1; 
   } 
   float temp = (6 * Temp) + Temp / 4; 
   if(isSubZero) temp = 0 - temp; 
   ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp1=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp1 & 0x8000) 
   {   isSubZero = true; 
    Temp1 = (Temp1 ^ 0xffff) + 1; 
   } 
   float temp1 = (6 * Temp1) + Temp1 / 4; 
   if(isSubZero) temp1 = 0 - temp1; 
 }  
Работает в этом скетче http://smartliving.ru/forum/viewtopic.p ... =485#p2920
С уважением, Петр.
sochkasov
Сообщения: 21
Зарегистрирован: Ср июл 25, 2012 4:15 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Начни с примера. Первые шаги

Сообщение sochkasov » Пт фев 01, 2013 1:35 pm

ser009 писал(а):Замечательно.
Вот сижу думаю как бы переделать скетч https://github.com/sochkasov/majordomo- ... rWebServer
чтобы отправлял запрос на получение температуры с ds18b20 вот это будет замечательно??? :geek:
Не совсем понял как это должно функционировать. Если опишите что нужно делать, постараюсь сделать.
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Начни с примера. Первые шаги

Сообщение ser009 » Пт фев 01, 2013 2:41 pm

Ну вариантов много вот например:
- передавать данных температуры через промежутки времени (настроить временные задержки в ардуино)
- либо передавать данные по запросу программы: (настроить временные задержки на сервере методом onNewMinute)
===========================
Ещё
- передавать данные о состоянии дискретных входов:
(открытие дверей, датчики движения и т.д.)

вот моя попытка что-то изобразить в виде кода

Код: Выделить всё

void inputcommands()
{
   if(digitalRead(startPin)==HIGH&&flag==0)
   {
   Serial.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1");
   //webserver.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1"); 
   Serial.println();
   flag=1;  
   delay(10);
   }
   if(digitalRead(startPin)==LOW&&flag==1)
   {
   Serial.println("GET /objects/?object=sensorGarage&op=m&m=DInput&status=0");
   //webserver.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=0"); 
   Serial.println();
   flag=0;
   delay(10);
   }
}
- передавать данные о состоянии аналоговых входов:
тут пока не знаю для каких целей
paf
Сообщения: 56
Зарегистрирован: Ср янв 09, 2013 7:39 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Начни с примера. Первые шаги

Сообщение paf » Пт фев 01, 2013 4:12 pm

Ну вот этот скетчик попробуй дописать. Может получится.

Код: Выделить всё

#include <Wire.h>
#include <OneWire.h> 
 
 OneWire  ds(10);  // on pin 10. Датчики DS18b20 в режиме нормального питания
   byte i;   
   byte present = 0; 
   byte data[12]; 
   byte addr[2][8]; 
   bool isSubZero; 
   int Temp1,Temp;    
  
 void temper() 

 { 
   ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp & 0x8000) 
   {   isSubZero = true; 
    Temp = (Temp ^ 0xffff) + 1; 
   } 
   float temp = (6 * Temp) + Temp / 4; 
   if(isSubZero) temp = 0 - temp; 
   ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp1=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp1 & 0x8000) 
   {   isSubZero = true; 
    Temp1 = (Temp1 ^ 0xffff) + 1; 
   } 
   float temp1 = (6 * Temp1) + Temp1 / 4; 
   if(isSubZero) temp1 = 0 - temp1; 
   Serial.print(" Outdoor ");              // Для контроля 
   Serial.print(temp1/100);                // 
   Serial.println(" C");                   // 
   Serial.print(" Home ");                 // 
   Serial.print(temp/100);
   Serial.println(" C");
                	
    Serial.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1");
   
   // Вот куда-то этот самый (temp/100) и (temp1/100) вставить и как бы оно.
   //webserver.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1"); 
   Serial.println();
     
 } 

 void setup()  
 {    
 Serial.begin(9600); 
     if ( !ds.search(addr[0])) 
   { 
    ds.reset_search(); 
   } 
    if ( !ds.search(addr[1])) 
   { 
    ds.reset_search(); 
   } 
  
  
 } 

 void loop()                      
 { 
 temper();  
 
 delay(4000); 
 }
С уважением, Петр.
sochkasov
Сообщения: 21
Зарегистрирован: Ср июл 25, 2012 4:15 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Начни с примера. Первые шаги

Сообщение sochkasov » Пн фев 04, 2013 7:59 am

ser009 писал(а):Ну вариантов много вот например:
- передавать данных температуры через промежутки времени (настроить временные задержки в ардуино)
Думаю, что тут проблем нет. Только вот какие должны быть промежутки времени? У меня на тествой ардуине нет часов реального времени, по этому будет сложно привязаться к точным значениям времени. Ну или надо ставить часы.
На самом деле, я немного отошел от этого проекта. Возможно я конечно к нему вернусь. Но сейчас мне очень интересен проект http://apduino.org (apduino.com). Очень интересные идеи там реализованы. Но он еще в зачаточном состоянии. Рекомендую посмотреть, хотя бы просто для того, что люди делают на ардуине.
- либо передавать данные по запросу программы: (настроить временные задержки на сервере методом onNewMinute)
Жаль, но я так и не разобрался с тем, как на сервере должно все работать. По этому с вариантом onNewMinute не могу помочь
===========================
Ещё
- передавать данные о состоянии дискретных входов:
(открытие дверей, датчики движения и т.д.)
Если я правильно понял, то надо передавать команду на сервер, если изменилось состояние дискретного входа. Верно?
Тут важно предумсотреть защиту от "дребезга" контактов.
Опрос и передача данных на сервер сделаны в другой прошивке https://github.com/sochkasov/majordomo-arduino
Я их как-то не совмещал
вот моя попытка что-то изобразить в виде кода

Код: Выделить всё

void inputcommands()
{
   if(digitalRead(startPin)==HIGH&&flag==0)
   {
   Serial.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1");
   //webserver.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=1"); 
   Serial.println();
   flag=1;  
   delay(10);
   }
   if(digitalRead(startPin)==LOW&&flag==1)
   {
   Serial.println("GET /objects/?object=sensorGarage&op=m&m=DInput&status=0");
   //webserver.print("GET /objects/?object=sensorGarage&op=m&m=DInput&status=0"); 
   Serial.println();
   flag=0;
   delay(10);
   }
}
- передавать данные о состоянии аналоговых входов:
тут пока не знаю для каких целей
нет проблем. Важно понять что читать, в каком виде и в какие моменты времени передавать данные.
Для каких целей? :) У меня например есть датчик давления (воды или газа), у которого выход токовый (4-20мА). Вот его можно например читать. Надо только у специалистов узнать как такое подружить с АЦП.
Ответить