Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

СергейC
Сообщения: 12
Зарегистрирован: Сб авг 08, 2015 5:03 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение СергейC » Ср фев 17, 2016 11:20 am

Переменная Dec (uidDec), как оказалось уже объявлены через long. Строка из кода:
unsigned long uidDec, uidDecTemp;
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение DAP » Ср фев 17, 2016 12:06 pm

помогите с добавлением в код прошивки многоканального диммера отсюда: http://www.cyber-place.ru/showthread.ph ... 1#post3371 у меня не хватает опыта совместить все функции в одно устройство, не хочется городить 2 платы в щитке.
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение flair » Ср фев 17, 2016 12:41 pm

а зачем Вам такойдиммер? просто подумал куда можно его применить... - но не имею не одной лампы накала....
DAP
Сообщения: 118
Зарегистрирован: Пн апр 06, 2015 10:25 pm
Благодарил (а): 6 раз
Поблагодарили: 16 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение DAP » Ср фев 17, 2016 2:07 pm

У меня лампы накаливания по плану. Т.к. свет от них более правильный и лампы накаливания присоединенные через диммер вместо выключателя не перегорают если: а- включение происходит с прогревом нити(плавное включение) б- если использовать не более 80% мощности лампы. Проверено на собственном санузле где стоит автоматика (датчик движения с прогревом нитей накала) и включённым последовательно нагрузке NTC термистором для подавления скачка тока на нитках, в итоге, дешманские китайские лампочки служат уже 7 лет. Кроме того хотелось бы иметь режим сумеречного света, когда проснулся ночью, то свет яркий неприятен, тогда лампы можно включить на 15%.
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение flair » Ср фев 17, 2016 3:48 pm

уже как лет пять выкинул весь накал из дома... ощущения только положительные...
а по существу в скетче который я выкладывал выше есть блок РГБ - он же и подойдет вам... так как шимит любую нагрузку
а накалы и прогрев можно реализовать или на ардуине или на мажордоме
СергейC
Сообщения: 12
Зарегистрирован: Сб авг 08, 2015 5:03 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение СергейC » Ср фев 17, 2016 6:33 pm

Может кому будет интересно.
Для передачи десятичного числа в диапазоне от -2147483648 до 2147483647 в запросе необходимо использовать код %li:
sprintf(buf, "GET /objects/?object=AC&op=m&m=status&status=%li", Dec);

Для передачи максимального положительного десятичного числа в запросе необходимо использовать код %lu:
sprintf(buf, "GET /objects/?object=AC&op=m&m=status&status=%lu", Dec);

и как уже говорилось выше, объявлять переменную Dec через long или unsigned long соответственно.
Последний раз редактировалось СергейC Ср фев 17, 2016 8:35 pm, всего редактировалось 1 раз.
За это сообщение автора СергейC поблагодарил:
flair (Ср фев 17, 2016 6:53 pm)
Рейтинг: 1.16%
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение flair » Ср фев 17, 2016 7:47 pm

Как нашли эти параметры? Или это фишки php?
СергейC
Сообщения: 12
Зарегистрирован: Сб авг 08, 2015 5:03 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение СергейC » Ср фев 17, 2016 7:55 pm

flair писал(а):Как нашли эти параметры? Или это фишки php?
Помог гугл.
http://lord-n.narod.ru/download/books/w ... printf.htm
В описании функций long и unsigned long тоже, что то есть.
Ну а дальше методом тыка.
Главное, что задача решена.
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение flair » Ср фев 17, 2016 9:49 pm

товарищи может замутить новую тему с наработками... бросать по тиху в шапку важное... топикстартера давно не видно...
в подкреп скетч- в нем реле ,кнопки, датчик движения, пару DHT , таблетка DA1990, датчик освещенности (на солнечной панельки), RGB ...
СпойлерПоказать

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

/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino MEGA + EthernetShield W5100
* IDE: Arduino 1.0.1
* RGB лента (или шим) пины 44 , 45 ,46
* DHt 19 21
* DS18B20 пин 2
* исполнительные устройства (реле) подключены к Digital 3 - 9
* управляющие кнопки  14 - 18 
* обращение по http://xx.xx.xx.xx/ выдаст справочную информацию по этому устройству (нужно для того, чтобы когда обращаешься
* по IP к устройству понять что это за контроллер и пр.)
*
* /state - состояние всех портов
* /command - выполнение команды
*         команды можно вызывать серией в 1 запросе. Например http://xx.xx.xx.xx/command?3=CLICK&4=CLICK&5=ON&6=OFF
*         только длинна строки запроса не должна привышать maxLength
* /getdev - получить список всех устройст на 1-wire
*         формат вывода: 
*                T<номер устройства на шине>:<HEX адрес устройства>:<текущая температура в градусах цельсия>;[...]
*                (пример T0:1060CF59010800E3:24.06;T1:109ABE59010800FE:24.56;)
*
**/
#include "DHT.h"
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h" // Webduino (https://github.com/sirleech/Webduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <math.h>
#define DHTPIN 19     // what pin we're connected to
#define DHTPIN_1 21
#define DHTTYPE DHT22   // DHT 22  (AM2302)


DHT dht(DHTPIN, DHTTYPE);
DHT dht1(DHTPIN_1, DHTTYPE);

const int analogInPin = 9; //аналог пин А9 - подключние солнечной панели +
const int analogPin = 8;  // a 9 датчик движения
int sensorValue = 0;        
int old_temperature1=0;
int old_tempKith = 0;
int old_tempLiv = 0;
int old_humKith = 0;
int old_humLiv = 0;
float solarV = 0;        // переменная солнечной панели
float outputValue = 0; 

byte key1[8] = {0xX, 0xX, 0xX, 0xX, 0x0X, 0xX, 0xX, 0xF5}; // код ключа раз
byte key2[8] = {0x01, 0xX, 0xX, 0xX, 0x0X, 0xX, 0x00, 0xX}; //код ключа два




byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE0, 0xDE, 0x33 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 0, 121 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 0, 1 };
byte dns_server[] = { 192, 168, 0, 1 };
// ip-адрес удалённого сервера
byte server[] = { 192, 168, 0, 104 }; //Адрес сервера MAJORDOMO
char buf[80];
char ipbuff[16];

EthernetClient rclient;
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
  Serial.println(buf); 
  if (rclient.connect(server, 80)) { 
   rclient.print(buf);
   rclient.println(" HTTP/1.0");
   Serial.println("Send http get request");
   Serial.println(buf);
   rclient.print("Host: ");
   sprintf(ipbuff, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
   rclient.println(ipbuff); // ip адрес нашего контроллера в текстовом виде
   rclient.print("Content-Type: text/html\n");
   rclient.println("Connection: close\n");
   delay(1000);
   rclient.stop();
  } else {
   Serial.println("FAILED");     
  }
}

void sendAPin(int a) {
   int DPin = a-11;
if (digitalRead(a)==LOW){//если кнопка нажата и перемення flag равна 0 , то ... 
    digitalWrite(DPin,!digitalRead(DPin)); //Инвертируем выход
    Serial.print("Button: ");
    Serial.print(a);
    Serial.print(" Pin: ");
    Serial.print(DPin);
    Serial.print(" = ");    
    Serial.println(digitalRead(DPin));
    sprintf(buf, "GET /objects/?object=sensor222%i&op=m&m=st&status=%i", DPin, digitalRead(DPin));//Готовим запрос на сервер
    sendHTTPRequest();

}    
}


// Настройки выходов
int startPin=3;
int endPin=9;

// Настройки входов
int startAPin=14;
int endAPin=18;


// Pin controller for connection data pin DS18S20
#define ONE_WIRE_BUS 2 // Digital 2 pin Arduino (куда подключен выход с шины датчиков DS18X20
#define TEMPERATURE_PRECISION 9

#define VERSION_STRING "0.2"
#define COMPILE_DATE_STRING "2015-11-14"

P(Page_info) = "<html><head><title>" COMPILE_DATE_STRING" " VERSION_STRING "</title></head><body>\n";
P(location_info) = "NA";
P(pin_info) = "D2 - 1-wire";
P(version_info) = VERSION_STRING " " COMPILE_DATE_STRING;

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

#define delayClick 1000 // задержка при обычном CLICK
#define delayLClick 3000 // задержка при длинном LCLICK
#define MAX_COMMAND_LEN             (10)
#define MAX_PARAMETER_LEN           (10)
#define COMMAND_TABLE_SIZE          (8)
#define PREFIX ""

WebServer webserver(PREFIX, 80);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Для поиска
DeviceAddress Termometers;
float tempC; 
float humKith;
float tempKith;
float humLiv;
float tempLiv;

#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] = {
//  {"LED",     commandsLed, },
  {"HELP",     commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
  {"ON",     commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
  {"OFF",     commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
  {"STATUS",     commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
                                    // если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
  {"CLICK",     commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
  {"LCLICK",     commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
  {NULL,      NULL }
};

/**********************************************************************************************************************
 *
 * Function:    cliProcessCommand
 *
 * Description: Look up the command in the command table. If the
 *              command is found, call the command's function. If the
 *              command is not found, output an error message.
 *
 * Notes:       
 *
 * Returns:     None.
 *
 **********************************************************************/
void cliProcessCommand(WebServer &server)
{
  int bCommandFound = false;
  int idx;

  gParamValue = strtol(gParamBuffer, NULL, 0);  // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
  for (idx = 0; gCommandTable[idx].name != NULL; idx++) {  // 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].name, gCommandBuffer) == 0) {
      bCommandFound = true;
      break;
    }
  }

  if (bCommandFound == true) {  // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
    (*gCommandTable[idx].function)(server);
  }
  else { // Command not found
    server.print("Command not found");
  }
}


/**********************************************************************************************************************/
/* Обработчики команд */

void commandsOn(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);
  } else ErrorMessage(server);
}

void commandsOff(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,HIGH);
  } else ErrorMessage(server);
}

void commandsClick(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);     
     delay(delayClick);
     digitalWrite(gParamValue,HIGH);
  } else ErrorMessage(server);
}

void commandsLClick(WebServer &server) {
  if (gParamValue>=startPin && gParamValue<=endPin) {
     digitalWrite(gParamValue,LOW);     
     delay(delayLClick);
     digitalWrite(gParamValue,HIGH);
  } else ErrorMessage(server);
}

void commandsStatus(WebServer &server) {
   if  (strcmp(gParamBuffer,  "ALL") == 0) { // выдать состояние всех пинов
          for(int i=startPin;i<=endPin;i++) {
            int st=digitalRead(i);
            char my_st[5];
            itoa(st,my_st,10);
            server.print("P");
            server.print(i);
            server.print("=");
            server.print(my_st);
            server.print(";");
          }
   } else { // выдать состояние только 1 пина
          if (gParamValue>=startPin && gParamValue<=endPin) {
            server.print("P");
            server.print(gParamValue);
            server.print("=");
            server.print(digitalRead(gParamValue));
          } else ErrorMessage(server);
    }
}

void commandsHelp(WebServer &server) {
  int idx;
  for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
    server.print(gCommandTable[idx].name);
    server.print("<br>");
  }
}

/**********************************************************************************************************************/

void ErrorMessage(WebServer &server) {
    server.print("This Pin is not I/O");
}

/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool 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_tail, name, NAMELEN, value, VALUELEN);
      if (rc == URLPARAM_EOS) {
  //      server.printP(Params_end);
      }
       else // Получили параметр (name) и его значение (value)
        {
        // Выполняем команды
        strcpy (gCommandBuffer, value); // параметры (значение)
        strcpy (gParamBuffer, name); // команда
        cliProcessCommand(server);
        }
      }
    }
/*    
  if (type == WebServer::POST)
  {
    server.printP(Post_params_begin);
    while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
    {
      server.print(name);
      server.printP(Parsed_item_separator);
      server.print(value);
      server.printP(Tail_end);
    }
  }
*/

}

void get1wireDevices(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  //TODO получить все устройства на шине и выдать на страницу
   int numberOfDevices = sensors.getDeviceCount();
   sensors.begin();
   sensors.requestTemperatures();
   for(int i=0;i<numberOfDevices; i++) {
      if(sensors.getAddress(Termometers, i))
      {
          server.print("T");
          server.print(i);
          server.print(":");
          for (uint8_t i = 0; i < 8; i++) {
            if (Termometers[i] < 16) server.print("0");
              server.print(Termometers[i], HEX);
          }
          float tempC = sensors.getTempC(Termometers);
          server.print(":");
          server.print(tempC);
          server.print(";");
      } else {
            // not found
            server.print("NOT FOUND");
      }
    }
}


void rgbCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  URLPARAM_RESULT rc;
  char name[32];
  char value[32];
  int pin;
  int r = 0;
  int g = 0;
  int b = 0;

  server.httpSuccess();
  if (type == WebServer::HEAD)
    return;
 
  if (strlen(url_tail))
    {
    while (strlen(url_tail))
      {
      rc = server.nextURLparam(&url_tail, name, 32, value, 32);
      if (rc == URLPARAM_EOS)
        Serial.println("RGB");
       else
        {
          if (String(name) == "r")
           {
             r = atoi(value); 
           }
          if (String(name) == "g")
           {
             g = atoi(value);
           }
          if (String(name) == "b")
           {
             b = atoi(value);
           } 
        }
       analogWrite(44, r);
       analogWrite(45, g);
       analogWrite(46, b); 
      }
    }
}

void stateRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  strcpy (gParamBuffer, "ALL");
  commandsStatus(server);
}

/**********************************************************************************************************************
* Генерация и вывод информации об устройстве
**/
void infoRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
  server.printP(Page_info);
  server.print("IP:");
  server.print(Ethernet.localIP());
  server.print("<br>State: ");
  strcpy (gParamBuffer, "ALL");
  commandsStatus(server);
  server.print("<br><a href='/getdev'>getdev</a>");
  server.print("<hr>Commands:<br>");
  commandsHelp(server);
  server.print("<hr>Version: ");
  server.printP(version_info);
  
}



/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
   Serial.println("Search on 1-wire");
   int numberOfDevices = sensors.getDeviceCount();
   sensors.begin();
   
   for(int i=0;i<numberOfDevices; i++) {
      if(sensors.getAddress(Termometers, i))
      {
          Serial.print("Device ");
            Serial.print(i, DEC);
          Serial.print(" address: ");
          for (uint8_t i = 0; i < 8; i++) {
            if (Termometers[i] < 16) Serial.print("0");
              Serial.print(Termometers[i], HEX);
          }

//          Serial.print(" Resolution actually set to: ");
          Serial.print(" Set to: ");
            Serial.print(sensors.getResolution(Termometers), DEC); 
          Serial.println();
          float tempC = sensors.getTempC(Termometers);
         
          Serial.print(tempC);
          Serial.println("C");
      
      } else {
            // not found
      }
    }
}


/**********************************************************************************************************************/

 void setup() {
  // Для дебага будем выводить отладочные сообщения в консоль
  //TODO Убрать вывод в консоль "за дабаг" (т.е. вывод только если скимпилированно с поддержкой дебага)
  Serial.begin(9600);
  Serial.println("Start");
  Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield
  sprintf(buf, "GET /objects/?script=controller_widget&dev=%u.%u.%u.%u&code=start",ip[0], ip[1], ip[2], ip[3]);//Готовим запрос на сервер
  sendHTTPRequest();  
 dht.begin();
  dht1.begin();
  webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
  webserver.addCommand("command", &parsedRequest); // команды
  webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
  webserver.addCommand("rgb", &rgbCmd); // RGB
  webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
  webserver.begin();
  
  Serial.print("IP ");
  Serial.println(Ethernet.localIP());
  
    // Настройка портов
  for (int thisAPin = startAPin; thisAPin <=endAPin; thisAPin++)  {
    pinMode(thisAPin, INPUT);      
  }
    // Настройка портов
  for (int thisPin = startPin; thisPin <=endPin; thisPin++)  {/////////////////////////////////////////////////////////////////////////////////////////////////////////
    pinMode(thisPin, OUTPUT);      
  }

   pinMode(50, OUTPUT); //____________________________________________ds1990
   digitalWrite(50, HIGH);
  // Настройки 1-wire 
  sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
  sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
  
  searchDevices();
  
}


/**********************************************************************************************************************/
void loop() {
  char buff[64];
  int len = 64;

/**********************************************************************************************************************

/* Работа с выключателями
*/
          
  
  int valid_sensor=0;

 
 
 // TEMP SENSOR 1 --------------------------------------
  float current_temp1=0;
  tempC = sensors.getTempC(Termometers); // Получим температуру от датчика (или ошибку)
{
    // Устройство отдало реальное значение температуры (или осталось старое)
    
    current_temp1 = tempC; // получаем температуру
    
    if ((old_temperature1!=(int)current_temp1) && (current_temp1<79) && (current_temp1>5)) {
      int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
      sprintf(buf, "GET /objects/?object=sensorKomnata&op=m&m=tempChanged&t=%0d.%d", (int)current_temp1, abs(temp1));   
      sendHTTPRequest();
    }
  old_temperature1=(int)current_temp1;
  }


  //dth...................1*****************************************************************************************
    
  
  
  float current_tempKith=0;
  tempKith = dht.readTemperature();// Получим температуру от датчика (или ошибку)
{
    // Устройство отдало реальное значение температуры (или осталось старое)
    
    Serial.print("TemperatureKITH: "); 
    Serial.print(tempKith);
    Serial.println(" *C");
    current_tempKith = tempKith; // получаем температуру
    
    if ((old_tempKith!=(int)current_tempKith) && (current_tempKith<100) && (current_tempKith>1)) {
      int tempKith = (current_tempKith - (int)current_tempKith) * 100; // выделяем дробную часть
      sprintf(buf, "GET /objects/?object=sensorKith&op=m&m=tempChanged&t=%0d.%d", (int)current_tempKith, abs(tempKith));   
      sendHTTPRequest();
    }
  old_tempKith=(int)current_tempKith;
  }



  
//*****hum1

float current_humKith=0;
  humKith = dht.readHumidity();// Получим температуру от датчика (или ошибку)
{
   Serial.print("HumidityKith: "); 
    Serial.print(humKith);
    Serial.print(" %\t");
    // Устройство отдало реальное значение температуры (или осталось старое)
    
    current_humKith = humKith; // получаем температуру
    
    if (old_humKith!=(int)current_humKith)  {
      
      sprintf(buf, "GET /objects/?object=humKith&op=m&m=humChanged&h=%i", (int)current_humKith);   
      sendHTTPRequest();
    }
  old_humKith=(int)current_humKith;
  }

//dth..............................................2******************************************************

 float current_tempLiv=0;
  tempLiv = dht1.readTemperature();// Получим температуру от датчика (или ошибку)
{
    // Устройство отдало реальное значение температуры (или осталось старое)
    Serial.print("TemperatureLIV: "); 
    Serial.print(tempLiv);
    Serial.println(" *C");
    current_tempLiv = tempLiv; // получаем температуру
    
    if (old_tempLiv!=(int)current_tempLiv ) {
      int tempLiv = (current_tempLiv - (int)current_tempLiv) * 100; // выделяем дробную часть
      sprintf(buf, "GET /objects/?object=sensorLiv&op=m&m=tempChanged&t=%0d.%d", (int)current_tempLiv, abs(tempLiv));   
      sendHTTPRequest();
    }
  old_tempLiv=(int)current_tempLiv;
  }
//****hum2  


float current_humLiv=0;

  humLiv = dht1.readHumidity();// Получим температуру от датчика (или ошибку)
{
    // Устройство отдало реальное значение температуры (или осталось старое)
    Serial.print("HumidityLiv: "); 
    Serial.print(humLiv);
    Serial.print(" %\t");
    current_humLiv = humLiv; // получаем температуру
    
    if (old_humLiv!=(int)current_humLiv)  {
      
      
      sprintf(buf, "GET /objects/?object=humLiv&op=m&m=humChanged&h=%i", (int)current_humKith);   
      sendHTTPRequest();
    }
  old_humLiv=(int)current_humLiv;
  }
//****************************************датчик движения

sensorValue = analogRead(analogPin);
    
  if(sensorValue > 500){
     sprintf(buf, "GET /objects/?object=sensorMovKith&op=m&m=statusChanged&status=1");   
      sendHTTPRequest();

  } 
  delay(200);





//**************************************************************************
  
 // ____________________________________________________

   solarV =  float(analogRead(analogInPin))/204,6;            
  
   if( solarV > 0.1){
     sprintf(buf, "GET /objects/?object=sensorSolar&op=m&m=statusChanged&status=1");   
      sendHTTPRequest();
   } else {
    sprintf(buf, "GET /objects/?object=sensorSolar&op=m&m=statusChanged&status=0");   
      sendHTTPRequest();
  } 
  Serial.print("Voltage = " );                      
  Serial.println(solarV); 
  
  //----------------------------------------------------

byte addr[8];
  byte val1 = 0;
  byte val2 = 0;

delay(100);
  if (oneWire.search(addr)) { // если обнаружен, шлем идентификатор на верхний уровень
   Serial.print("#"); // старт пакета
   for (int i=0; i<8; i++) {
       Serial.print(" "); // разделитель пробел
       Serial.print(addr[i], HEX);
 
       // 1-ключ (аппаратная идентификация, например мастер-ключа)
       if (addr[i] == key1[i]) val1++;
       // 2-ключ
       if (addr[i] == key2[i]) val2++;
   }
   Serial.print("@"); // стоп пакета
   Serial.println("");   
  oneWire.reset_search();
  }
 
  // индикация на первом светодиоде
  if (val1 == 8) {
    Serial.println("Evgeni");
      digitalWrite(50, LOW);
     delay(500);
     digitalWrite(50, HIGH);
  }
  // индикация на втором светодиоде
  if (val2 == 8) {
    Serial.println("Anna");
     digitalWrite(50, LOW);
     delay(500);
     digitalWrite(50, HIGH);
  }   

 ///////////////////////////////////////////////////////////////////////////// 

for(int i=startAPin;i<=endAPin;i++) {
 
            int st=digitalRead(i);
            char my_st[5];
            itoa(st,my_st,10);
             if (st==1)
             {
                sendAPin(i);
             }
          }

  webserver.processConnection(buff, &len);  // process incoming connections one at a time forever
sensors.requestTemperatures();
} 
Аватара пользователя
m-malva
Сообщения: 291
Зарегистрирован: Чт фев 26, 2015 1:38 am
Откуда: Санкт-Петербург
Благодарил (а): 16 раз
Поблагодарили: 66 раз
Контактная информация:

Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем

Сообщение m-malva » Чт фев 18, 2016 1:27 am

flair писал(а):товарищи может замутить новую тему с наработками...
Эта тема с 2013 года
За 3 года могло случиться все что угодно. Мне кажется нет смысла плодить сущности.
Через 3 года и новая тема будет как эта. Я думаю надо просить Сергея переназначить автора топика, если текущий не против или не отвечает. Я "сто лет" не поднимал таких форумов и не помню что да как, но мне кажется что возможность есть.
Ответить