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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.03.2013, 09:36   #21
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Если устраивает скорость реакции короткого нажатия на выключатель, то можно оставить 0,1мкф
Admin вне форума   Ответить с цитированием
Старый 10.03.2013, 17:47   #22
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

Экспериментирую с кнопкой и реле, нахожу всякие интересные ошибочки свойственные новичку. Например долго не мог понять почему сразу после запуска программа работает, а потом глючит. Понадобилось некоторое время чтоб понять - чтоб понять -какой-то гад переполняется, а так как в тестовых программах переменных немного, то вычислил что переменную сохраняющую значение функции millis() при нажатии на кнопку объявил как int (ну просто потому что о других видах я читал, но раньше не использовал), ну и она через 30 секунд переполнялась и не выполняла своих функций, исправил на Long. Так сказать другим новичкам пример-наука.
От самостоятельного устранения дребезга отказался, воспользовался библиотекой <Bounce.h>, достаточно пока удобно и подходит для моих целей
Bulatovor вне форума   Ответить с цитированием
Старый 10.03.2013, 19:24   #23
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

Написал вот программку для управления Реле, решил отказаться от таймеров и использовать многозадачность, просто для изучения, хотя и вполне сюда подошли, устранил дребезг (кнопка на стенде за 15 рублей -дребезг страшный) при помощи спец библиотеки Bounce
Умеет :
Одно нажатие -включение-выключение реле
Два нажатия - запуск выключение по таймеру, по умолчанию 10 секунд
Три нажатия - изменение времени таймера - каждое следующее нажатия после трех первых - это 10 секунд работы таймера, максимум определяется типом данной переменной int и составляет 3,5 суток или 50 часов. Правда для этого кнопку придется нажать 31 тысячу раз

Проверено на тестовом железе, осталос прикрутить радиомодуль RF2400(жду пока) и можно считать данный блок для розеток готовым. Кстати, а если писать программу для nRF24L01 (они у меня уже есть), потом под RF2400 её сильно придется менять или у них есть общие библиотеки?
PHP код:
 // Управление реле
#include <nanopins.h>      //подключаем библиотеку быстрого управления пинами
#include <Bounce.h>        // библиотека для устранения дребезга  
#include <leOS.h>          // библиотека многозадачности

int qbutton1 ;        //  начальное значение счетчика нажатий на кнопку 1
int t 10;               // переменная количество секунд таймера
unsigned long b1millis;   // время последнего пррывания по кнопке 1


int tcl 1500// время, после которого считается что кнопка нажата
int tc0 3000// время, после которого считается что серия нажатий на кнопки окончена 

Bounce bouncer Bounce(95); //создаем экземпляр класса Bounce для 9 вывода   
leOS myOS;                     //создать экземпляр класса 

void setup() {
  
D4_Out//Настраиваем порт на выход реле 1
  
D13_Out//Настраиваем порт на выход светодиода
  
D4_HighD13_Low;  //установить на выходах  уровень сигнала
  
D9_In//настраиваем порт на вход для кнопки 1
  
D9_High;  //установить на входах высокий уровень и подключить резистор 
  
Serial.begin(9600);//поднимаем соединение для передачи на терминал 
  
myOS.begin();      // поднимаем задачи
  
  
}

 
void loop() {
    if (
bouncer.update()) {     //если состояние кнопки изменилось
    
if (bouncer.read()==0//если кнопка нажата
    
{//если кнопка нажата
      
b1millis=millis();
      
Serial.println(b1millisDEC);
      
qbutton1++;
      
Serial.println("pressed");  //вывод сообщения о нажатии
      //bouncer.rebounce(500);      //повторить событие через 500мс
    

  }
   
// Обработка количества нажатий кнопки 1
    // если переменная количества нажатий кнопки не равна 0 - 
    // можно и без этого, но это существенно ускорит программу, 
    // так как не будут обрабатываться последующие "если", если кнопка не нажималась
  
if(qbutton1!=0)
 { 
              
      
//если было одно нажатие и с момента последнего нажатия прошло время заданное переменной tc1
      
Serial.println("1 click"); // например здесь печатаем в терминал "1 клик"
      
qbutton1=0;                  // и обнуляем преременную количества нажатий
      
D4_Inv;// инвертируем  состояние выхода для реле 1
       
// соответственно переключаем реле                                             
                   
      //если было два нажатия и с момента последнего нажатия прошло время заданное переменной tc1
      
if(qbutton1==&& millis()-b1millis>tcl)
      
// значит это короткое нажатие и принимаем соответствующие действия для него
      
Serial.println("2 click"); // например здесь печатаем в терминал "2 клик"
      
qbutton1=0;                  // и обнуляем преременную количества нажатий
      
if(D4_Read==0){myOS.addTask(Relay_Timer1000*tONETIME);;}} // запускаем таймер отсчёта перед выключением         
  
     //если было 3 и более нажатия и с момента последнего нажатия прошло время заданное переменной tc1
      
if(qbutton1>&& millis()-b1millis>tcl)
      
// значит это кроткое нажатие и принимаем соответствующие действия для него
      
t=(qbutton1-3)*10// изменяем переменую таймера
        
Serial.print("Programm "); Serial.print(t,DEC);Serial.println(" Sec"); // печатаем время таймера
       
qbutton1=0;  }                // и обнуляем преременную количества нажатий           
   
     
};


if (
D4_Read==0) {D13_Low;}
else {
D13_High;};
}
 
void Relay_Timer()
 {
D4_High// выключение реле 1 
 
myOS.pauseTask (Relay_Timer);
 
Serial.println("Timer Yes!!!");
 } 
Еще раз подумалось, здесь наверное светодиод должен зажигаться когда реле включено и сигнализировать о наличии напряжения, я чет алгоритм как для выключателя сделал, ну да ладно это легко поправимо в следующей редакции, главное не забыть
Bulatovor вне форума   Ответить с цитированием
Старый 10.03.2013, 20:18   #24
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Кстати, а если писать программу для nRF24L01 (они у меня уже есть), потом под RF2400 её сильно придется менять или у них есть общие библиотеки?
Библиотека общая для обоих модулей
Admin вне форума   Ответить с цитированием
Старый 10.04.2013, 09:04   #25
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

Ну так сказать продолжение, чем был занят месяц.
Месяц прошел в учебе - научился создавать сайты - основы HTML, PHP. В перспективе изучение Java. Эксперименты показали что без него не получится создать по настоящему интерактивную систему управления. Зарегил доменное имя и хостинг можно посмотреть что получилось и сайт на котором экспериментирую. Bulatovor.ru/
Научился связывать WEB с базой MySQL - данные о состоянии устройств решил хранить в MySQL и получать информацию отттуда.
Дальше начал изучать Lazarus и его язык Паскаль, на Lazaruse остановился потому-что это близкий родственник Delphi ( а с ним когда-то я немного экспериментировал), но умеет компилировать программы как в винду так и в Линукс, а сервер все-таки предполагается строить на линуксе, как более устойчивой системе.
Написал программку для обмена данными между MySQL и ком портом

Умеет связываться с базами данных, автоматически заполняет comboBox -сы с перечнем доступных баз, таблиц в них, было и заполнение названий столбцов, но потом убрал за ненадобностью, выявляет доступные Com порты и связывается с ними, по таймеру(например раз в 3 сек) проверяет наличие изменений в БД, при наличии изменений в базе данных передает изменения в ком(в дальнейшем к кому будет прикручен радиомодуль для общения с удаленными ардуинками), в режиме реального времени(настолько насколько это понятие применимо к винде) проверяет состояние порта, при появлении там данных автоматически считывает их. Программа носит тестовый характер, в окончательном варианте я её вижу как демон для линукса, без всяких выборов значений(значения будут задаваться перед компиляцией) -просто отслеживание MySQL и при их изменении передача в порт или GPIO и соответственно обратное действие.
Дальше зашел в тупик. Т.е. сейчас система такая - Страница передает нажатия кнопки в транзитную таблицу базы, программа отслеживает изменения в транзитной таблице и при наличии таких изменений предает их в ком, от ком передает в ардуину и получает ответ о выполнении команды, далее обратно com-программа. Программа вносит изменения в таблицу. После чего страница управления обновляется и показывает новое состояние устройства. Вся эта процедура занимает 5-6 секунд, что очень долго. Можно и быстрее, но тогда страница будет бесконечно обновляться, что утомляет, да и хостеры будут ругаться. Данные со страницы все же должны передавться непосредственно в порт, а co внешнего хостинга, не буду говорить что невыполнимо, но уж очень сложно. Т.е. настала пора создания собственного сервера для этой цели -внешний хостинг свою функцию выполнил и изжил себя.
Встал вопрос о железе сервера, с одной стороны хочется малопотребляющее и не дорогое, долго думал над основным роутером этого форума, но все-таки уж очень он слабенький - видеонаблюдение он не потянет. Учитывая мои небольшие навыки в сфере программирования, ограничения по производительности могут стать для меня на данном этапе непреодолимыми. Линейка выбора выглядит примерно так: Роутеры на OpenWRT, тонкие клиенты, нетбуки, обычные PC, специализированные серверы. На сегодняшний день считаю оптимальными по цена-производительность для текущих задач и с перспективой тонкие клиенты, что-то типа такого
http://www.ebay.com/itm/360542415969...84.m1423.l2649
или такого
http://www.aliexpress.com/item/QOTOM...518610590.html
Вообщем проект движется потихоньку, закажу себе сервер, а пока продолжу учится связывать com по радиоканалу с ардуинками и прикручивать это к диммеру и релейному модулю

Последний раз редактировалось Bulatovor; 10.04.2013 в 09:12.
Bulatovor вне форума   Ответить с цитированием
Старый 18.04.2013, 12:26   #26
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

Заказал в качестве центрального сервера вот такую штуку http://www.ebay.com/itm/321106536755...84.m1439.l2649
путем двухдневных переговоров удалось уболтать продавца на скидку в 10 евро, так что получилось очень не дорого, отправка DHL так что скоро жду с нетерпением.
По нему возник такой вопрос - есть LPT порт, штука хороша и интересная. Только вот я не нашел ни одного примера его использования с технологиями WEB. Кто подскажет как к нему обращаться из PHP или что-то аналогичное?
Bulatovor вне форума   Ответить с цитированием
Старый 18.04.2013, 13:50   #27
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

PHP не может обращаться к портам.
В линуксе доступ к устройствам реализован в виде файлов.
Находишь нужное устройство в папке /dev и обращайся к нему как файлу.
Пример есть в теме "Пример простой HTML кнопки"
Таким же способом можно читать видеопоток с камери, или аудиопоток со звуковой карты
Admin вне форума   Ответить с цитированием
Старый 24.02.2014, 16:22   #28
juroku
Junior Member
 
Регистрация: 24.12.2013
Сообщений: 14
Вес репутации: 0
juroku is an unknown quantity at this point
По умолчанию Re: Моя (для других очередная) версия умного дома на Adruino

Подскажите как подправить код master arduino+nrf24 для управления через tl-w703n код взял от сюда http://homes-smart.ru/index.php/obor...l01-i-nrf24le1
PHP код:
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h"
#include "nRF24L01.h"
#include "RF24.h"

#define ch_max 2 // количество клиентов nRF

uint8_t chsl=0// запоминаем канал

#define ch_len 32
byte nfserver[ch_max][5]; // массив для отправки

// вариант структуры номер 1
typedef struct{
  
uint8_t identifier;// номер передатчика.МЕНЯТЬ НЕЛЬЗЯ

  
int Analog;
  
uint8_t test_data;
  
int Error_Message// счетчик ошибок
  
long count;// счетчик передач для контроля качества канала
#if nofloat
int temperature_Sensor//передаём температуру.
int Humidity_Sensor;// передаём влажность
#else
 
float temperature_Sensor;// передаём температуру.
 
float Humidity_Sensor;// передаём влажность
#endif
}
nf1;
// вариант структуры номер 2
typedef struct{
  
uint8_t identifier;// номер передатчика.МЕНЯТЬ НЕЛЬЗЯ
  
int Analog;
  
int Error_Message// счетчик ошибок
  
long count;// счетчик передач для контроля качества канала
}
nf3;
// задаем каждому клиенту структуру:
nf1 clientnf1
nf1 clientnf2;
nf3 clientnf3;


RF24 radio(46,53); // для Arduino MEGA
// RF24 radio(9,10); // Для остальных
//--
// настройка IP адрес ,шлюз,DNS:
byte mac[] = { 0xDE0xAD0xBE0xE40xDE0x33 }; // MAC-адрес нашего устройства
byte ip[] = { 19216810170 };
byte subnet[] = { 255255255};
byte gateway[] = { 19216810,};
byte dns_server[] = { 19216811};
// ip-адрес удалённого сервера
byte rserver[] = { 1921681154 };

#define VERSION_STRING "0.1"

P(Page_info) = "<html><head><title>controller " VERSION_STRING "</title></head><body>\n";
P(location_info) = "server room";

P(version_info) = VERSION_STRING ". Compile date: " __DATE__ " "__TIME__;

String url String(25);
int maxLength=25// Максимальная длинна строки запроса

#define MAX_COMMAND_LEN             (10)
#define MAX_PARAMETER_LEN           (10)
#define COMMAND_TABLE_SIZE          (8)
#define PREFIX ""

WebServer webserver(PREFIX80);

#define NAMELEN 32
#define VALUELEN 32

char gCommandBuffer[MAX_COMMAND_LEN 1];
char gParamBuffer[MAX_PARAMETER_LEN 1];
long gParamValue;

typedef struct {
  
char const    *name;
  
void          (*function)(WebServer &server);
command_t;

command_t const gCommandTable[COMMAND_TABLE_SIZE] = { // таблица команд

  
{"cmdnrf",     cmdnrf, },
  {
"cmdnrfoff",     cmdnrfoff, },
  {
"cmdnrfon",     cmdnrfon, },
  {
"chselect",chselect, },
  {
"val1",     val1, },
  {
"val2",     val2, },
  {
"val3",     val3, },
  {
"val4",     val4, },

//  {NULL,      NULL }
};
//------Заполнение массива для отправки--------
void chselect(WebServer &server) {
  
nfserver[chsl-1][0]=gParamValue;
  
chsl=gParamValue
}
void val1    (WebServer &server) {nfserver[chsl-1][1]=gParamValue;}
void val2    (WebServer &server) {nfserver[chsl-1][2]=gParamValue;}
void val3    (WebServer &server) {nfserver[chsl-1][3]=gParamValue;}
void val4    (WebServer &server) {nfserver[chsl-1][4]=gParamValue;}


 
//**********************************************************************/
void cliProcessCommand(WebServer &server)
{
  
int bCommandFound false;
  
int idx;

  
gParamValue strtol(gParamBufferNULL0);  // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
  
for (idx 0gCommandTable[idx].name != NULLidx++) {  // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
    
if (strcmp(gCommandTable[idx].namegCommandBuffer) == 0) {
      
bCommandFound true;
      break;
    }
  }

  if (
bCommandFound == true) {  // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
    
(*gCommandTable[idx].function)(server);
  }
  else { 
// Command not found
    
server.print("ERROR: Command not found");
  }
}
/*******************************************************************/
/* Загрузка массива для отправки */
void sendcmd (byte ch,byte data1,byte data2,byte data3,byte data4){
/* порядок команд: номер канала,дата1(10 - управление выходами),дата2 (номер выхода) ,дата3 (состояние 1 или 0) */
  
nfserver[ch-1][0]=ch;
nfserver[ch-1][1]=data1;
nfserver[ch-1][2]=data2;
nfserver[ch-1][3]=data3;
nfserver[ch-1][4]=data4
}

/***************************************************************************************/
/* Обработчики команд */
bool stpin1=0;
bool stpin2=0;

void cmdnrf(WebServer &server) { // пример последовательного вкл/выкл

if (gParamValue==1) {
stpin1=!stpin1;
sendcmd(1,10,0,stpin1,0);
}

if (
gParamValue==2) {
stpin2=!stpin2;
sendcmd(2,10,6,stpin2,0);
}


}

void cmdnrfon(WebServer &server) { // команда на включение

if (gParamValue==1sendcmd(1,10,0,1,0);
if (
gParamValue==2sendcmd(2,10,6,1,0);
}

void cmdnrfoff(WebServer &server) { // команда на выключение

if (gParamValue==1sendcmd(1,10,0,0,0);
if (
gParamValue==2sendcmd(2,10,6,0,0);
}
/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &serverWebServer::ConnectionType typechar *url_tailbool tail_complete)
{
  
URLPARAM_RESULT rc;
  
char name[NAMELEN];
  
int  name_len;
  
char value[VALUELEN];
  
int value_len;

  
server.httpSuccess();  // this line sends the standard "we're all OK" headers back to the browser

  /* if we're handling a GET or POST, we can output our data here.
     For a HEAD request, we just stop after outputting headers. */
  
if (type == WebServer::HEAD)
    return;

  if (
strlen(url_tail))
    {
    while (
strlen(url_tail)) // Разбор URI на составные части (выборка параметров)
      
{
      
rc server.nextURLparam(&url_tailnameNAMELENvalueVALUELEN);
      if (
rc == URLPARAM_EOS) {
  
//      server.printP(Params_end);
      
}
       else 
// Получили параметр (name) и его значение (value)
        
{
        
// Выполняем команды
        
strcpy (gCommandBuffername); // параметры (значение)
        
strcpy (gParamBuffervalue); // команда
        
cliProcessCommand(server);
        }
      }
    }


}

//--

void stateRequest(WebServer &serverWebServer::ConnectionType typechar *url_tailbool tail_complete)
{


server.print("identifier:");
server.print(clientnf1.identifier);

server.print(" Analog:");
server.print(clientnf1.Analog);

server.print(" test_data:");
server.print(clientnf1.test_data);

server.print(" count:");
server.print(clientnf1.count);

server.print(" Error_Message:");
server.print(clientnf1.Error_Message);

server.print(" temp:");
server.print(clientnf1.temperature_Sensor);

server.print(" Humidity:");
server.println(clientnf1.Humidity_Sensor);


server.print("identifier:");
server.print(clientnf2.identifier);

server.print(" Analog:");
server.print(clientnf2.Analog);

server.print(" test_data:");
server.print(clientnf2.test_data);

server.print(" count:");
server.print(clientnf2.count);

server.print(" Error_Message:");
server.print(clientnf2.Error_Message);

server.print(" temp:");
server.print(clientnf2.temperature_Sensor);

server.print(" Humidity:");
server.print(clientnf2.Humidity_Sensor);
}

/**********************************************************************************************************************
* Главная страница
**/
void infoRequest(WebServer &serverWebServer::ConnectionType typechar *url_tailbool tail_complete)
{
  
server.printP(Page_info);
  
server.print("IP:");
  
server.print(Ethernet.localIP());
  
server.print("<br>Location:");
  
server.printP(location_info);
  
  
server.print("<hr><a href='/state'>nRF devices</a>");
  
server.print("<hr>Version info: ");
  
server.printP(version_info);
 
}

void setup() {
  
    
Ethernet.begin(macipdns_servergatewaysubnet); // Инициализируем Ethernet Shield

  
webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
  
webserver.addCommand("command", &parsedRequest); // команды
  
webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств

  
webserver.begin();
  
  
radio.begin();
  
// выбор скорости
//  radio.setDataRate(RF24_250KBPS);
   
radio.setDataRate(RF24_1MBPS);
// radio.setDataRate(RF24_2MBPS);
   
  
radio.setPALevel(RF24_PA_MAX);
  
radio.setChannel(25); //тут установка канала
  
radio.setCRCLength(RF24_CRC_16);

// radio.setAutoAck(false); // выключить аппаратное потверждение

radio.setRetries(15,15);

  
radio.openWritingPipe(0xF0F0F0F0E1LL);
  
radio.openReadingPipe(1,0xF0F0F0F0D2LL);
  
radio.startListening();
}

int pipewr=0;

void loop() {
  
  
char buff[64];
  
int len 64;
  
webserver.processConnection(buff, &len);  // process incoming connections one at a time forever
  

       
byte pipe 0;
      if ( 
radio.available(&pipe) ) {
  
   
char tempdata[ch_len];   
    
    
bool done false;
        
    while (!
done)
    {
    
done radio.read( &tempdatach_len );

// описываем каждого клиента,назначем каждому свою структуру
switch(tempdata[0]){
case 
1  :
memcpy(&clientnf1,tempdatasizeof(clientnf1));
    break;
    
case 
2   :
memcpy(&clientnf2,tempdatasizeof(clientnf2));
    break;
    
case 
3   :
memcpy(&clientnf3,tempdatasizeof(clientnf3));
    break;
    
  }

    }

    
radio.stopListening();

    
radio.write( &nfserver[pipewr], sizeof(nfserver[pipewr]) );   

    
radio.startListening();
    
        
pipewr++;
        if ( 
pipewr ch_max pipewr 0;
  }
  

juroku вне форума   Ответить с цитированием
Старый 07.07.2015, 09:54   #29
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Моя (для других очередная) версия умного дома на Adruino

Чтоб никому не показалось, что свой проект за забросил, сообщаю что перехожу от теории к практике.
Начало реализации проекта умный дом в отдельно-взятой квартире

Последний раз редактировалось Bulatovor; 07.07.2015 в 09:57.
Bulatovor вне форума   Ответить с цитированием
Старый 07.07.2015, 11:02   #30
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Моя (для других очередная) версия умного дома на Adruino

Знакомая картинка , проходил через такое.
Admin вне форума   Ответить с цитированием
Ответ


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

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

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

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

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


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


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