Опять Ардуино и МД???

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

Модератор: immortal

StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение StryzhakA » Сб фев 20, 2016 12:32 pm

пробовал, не меняет
VGor
Сообщения: 32
Зарегистрирован: Сб янв 23, 2016 12:08 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение VGor » Сб фев 20, 2016 1:09 pm

Может быть для начала проще сделать через вебпеременные. У вас же по гет запросу на страницу выводится информация о состоянии реле. Вот в вебпеременной прописать обращение по данному адресу и распарсить ответ в переменную. И периодичность запроса нужную Вам выставить. Хотя конечно более удобно, чтобы ардуино сама слала данные в МД при изменении статуса.
VGor
Сообщения: 32
Зарегистрирован: Сб янв 23, 2016 12:08 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение VGor » Сб фев 20, 2016 1:14 pm

Судя по Вашему примеру гет запроса у Вас в МД должен быть создан объект "CirculationPump" с методом "status" и свойством "status". проверьте совпадение наименований (регистр, пропущенные буквы). Лучше приложите скриншот с настройками методов и свойств, так проще будет разобраться. Сам с такой проблемой недавно боролся, вся проблема была в кривом коде метода.
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение StryzhakA » Сб фев 20, 2016 1:24 pm

Добавил скрины свойств и методов в обьекте CirculationPump
Вложения
3.png
3.png (171.1 КБ) 7568 просмотров
2.png
2.png (170.66 КБ) 7568 просмотров
1.png
1.png (174.38 КБ) 7568 просмотров
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение StryzhakA » Сб фев 20, 2016 1:26 pm

Настройки метода turnOn по аналогии turnOFF
Вложения
4.png
4.png (174.03 КБ) 7567 просмотров
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Опять Ардуино и МД???

Сообщение flair » Сб фев 20, 2016 1:47 pm

Судя по скринам метода статус у вас нет и в гете у меня нет http 1.0.... Все отлично меняет...
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение StryzhakA » Сб фев 20, 2016 2:06 pm

поменял на метод switch
когда ввожу в браузере то срабатывает и ссответственно включает реле на ардуино
а вот когда ввожу в скетч то статус не меняеться при включении с пульта ардуины
???
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Опять Ардуино и МД???

Сообщение flair » Сб фев 20, 2016 2:16 pm

скиньте скетч... может там дело...
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Опять Ардуино и МД???

Сообщение StryzhakA » Сб фев 20, 2016 4:45 pm

flair писал(а):скиньте скетч... может там дело...

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

#include <SPFD5408_Adafruit_GFX.h>    
#include <SPFD5408_Adafruit_TFTLCD.h> 
#include <SPFD5408_TouchScreen.h>
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h" 
#include <OneWire.h>
#include <DallasTemperature.h>
#include "stDHT.h"
DHT sens(DHT11);
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
 
#define YP A1 
#define XM A2 
#define YM 7
#define XP 6 
OneWire  ds(42); 
#define ONE_WIRE_BUS 42 // Digital 2 pin Arduino (куда подключен выход с шины датчиков DS18X20
#define TEMPERATURE_PRECISION 9

#define MINPRESSURE 1
#define MAXPRESSURE 1000
 
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364); 
 
short TS_MINX = 20;
short TS_MINY = 20;
short TS_MAXX = 850;
short TS_MAXY = 891; 
 
#define LCD_CS A3 
#define LCD_CD A2 
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
 
#define BLACK 0x0000 
#define BLUE 0x001F 
#define RED 0xF800 
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
 
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
 
int X; 
int Y; 
int Z; 

boolean RelayConvStatusNow = 0;
boolean RelayConvStatusOld = 0;
boolean RelayPumpStatusNow = 0;
boolean RelayPumpStatusOld = 0;
unsigned long last_dhts_run = 0;
unsigned long last_convection_run = 0;
boolean SensPr = 0;
boolean ManualPr = 0;
int RelayConv = 39;
int RelayCirc = 40;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 254, 5 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 254, 1 };
byte dns_server[] = { 192, 168, 254, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 254, 3 };

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

#define VERSION_STRING "0.1"
#define COMPILE_DATE_STRING "2015-12-15"

P(Page_info) = "<html><head><title>opalanja home " VERSION_STRING "</title></head><body>\n";
P(location_info) = "floor 0";
P(pin_info) = "D42 - 1-wire (many DS18S20)<br>D36-DHT-sensor1<br>D37-DHT-sensor2<br>D40-Circulation Pump Relay<br>D39-Convection Pump Relay";
P(version_info) = VERSION_STRING ". Compile date: " 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; 

#define NAMELEN 32
#define VALUELEN 32

char gCommandBuffer[MAX_COMMAND_LEN + 1];
char gParamBuffer[MAX_PARAMETER_LEN + 1];
long gParamValue;
char buf[80];


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;)
  {"TEMP",     commandsTemp, }, // Получить температуры цифрового датчика (также влажность) (вызов http://xx.xx.xx.xx/command?8=TEMP ),
  {NULL,      NULL }
};

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("ERROR: Command not found");
  }
}


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

void commandsOn(WebServer &server) {
  if ((gParamValue == 40) && (RelayPumpStatusNow == 0)) {
     RelayPumpStatusNow = !RelayPumpStatusNow;
     ManualPr = 1;
  } 
  else if ((gParamValue == 39) && (RelayConvStatusNow == 0)) {
     RelayConvStatusNow = !RelayConvStatusNow;
  }
  else ErrorMessage(server);
}

void commandsOff(WebServer &server) {
  if ((gParamValue == 40) && (RelayPumpStatusNow == 1) && (SensPr == 0)) {
     RelayPumpStatusNow = !RelayPumpStatusNow;
     ManualPr = 0;
     } 
     else if ((gParamValue == 39) && (RelayConvStatusNow == 1)) {
     RelayConvStatusNow = !RelayConvStatusNow;
  }
  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 commandsTemp(WebServer &server) {
   float t1 = sens.readTemperature(36); 
   float h1 = sens.readHumidity(36);    
   delay(1000);
   float t2 = sens.readTemperature(37); 
   float h2 = sens.readHumidity(37);    
   delay(1000);
         if (gParamValue>= 36 && gParamValue<= 37) {
            server.print("<hr>Temp=");
            server.print(sens.readTemperature (gParamValue));
            server.print("<hr>Humidity=");
            server.print(sens.readHumidity(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("ERROR: Can`t do that");
}

/**********************************************************************************************************************
* Разбор запроса
**/
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))
      {
          float tempC = sensors.getTempC(Termometers);
          server.print(tempC);
          } else {
            // not found
            server.print("NOT FOUND");
      }
    }
}


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>Location:");
  server.printP(location_info);
  server.print("<hr>Pin info:<br>");
  server.printP(pin_info);
  server.print("<hr>Pin current state: ");
  strcpy (gParamBuffer, "ALL");
  commandsStatus(server);
  server.print("<hr>DHT1 sensor temperature: ");
  server.print(sens.readTemperature(36));
  server.print("<hr>DHT1 sensor humidity: ");
  server.print(sens.readHumidity(36));
  delay (2000);
  server.print("<hr>DHT2 sensor temperature: ");
  server.print(sens.readTemperature(37));
  server.print("<hr>DHT2 sensor humidity: ");
  server.print(sens.readHumidity(37));
  delay (4000);
  server.print("<hr><a href='/getdev'>1-wire devices</a>");
  server.print("<hr>Commands:<br>");
  commandsHelp(server);
  server.print("<hr><br>Version info: ");
  server.printP(version_info);
  
}

/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
   Serial.print("Start search on 1-wire");
   int numberOfDevices = sensors.getDeviceCount();
   sensors.begin();
   
   for(int i=0;i<numberOfDevices; i++) {
      if(sensors.getAddress(Termometers, i))
      {
          Serial.print("Found device ");
      Serial.print(i, DEC);
          Serial.print(" with 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(sensors.getResolution(Termometers), DEC); 
          Serial.println();
          float tempC = sensors.getTempC(Termometers);
          Serial.print(tempC);
          Serial.println("C");
      
      } else {
            // not found
      }
    }
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Start");
  
  Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield

  webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
  webserver.addCommand("command", &parsedRequest); // команды
  webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
  webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
  webserver.begin();
  
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  
  // Настройки 1-wire 
  sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
  sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
  
  searchDevices();
  
 pinMode(36, INPUT);
 pinMode(37, INPUT);
 pinMode(39, OUTPUT);
 pinMode(40, OUTPUT);
 digitalWrite(RelayConv, HIGH);
 digitalWrite(RelayCirc, HIGH);
 
 tft.begin(0x9341); 
 tft.fillScreen(CYAN);
 tft.setRotation(45);
 tft.drawRect(5, 10, 145, 220, RED); 
 tft.setCursor(30, 60); 
 tft.setTextSize(2); 
 tft.setTextColor(BLACK); 
 tft.println("SENSORS:"); 

 tft.drawRect(160, 10, 145, 110, RED); 
 tft.setCursor(170, 20); 
 tft.setTextSize(2); 
 tft.setTextColor(RED); 
 tft.println("CIRCULATION");
 tft.setCursor(200, 40);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("PUMP");
 tft.setCursor(200, 60);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("OFF"); 
 
 tft.drawRect(160, 125, 145, 105, RED); 
 tft.setCursor(170, 130); 
 tft.setTextSize(2); 
 tft.setTextColor(RED); 
 tft.println("CONVECTION");
 tft.setCursor(190, 150);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("CHAMBER"); 
 tft.setCursor(190, 170);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("OFF");
}

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

   buttons();
   touch();
   if ( (last_dhts_run == 0) || (millis() - last_dhts_run > 60000) ) 
    { 
      dhts(); 
      last_dhts_run = millis(); 
  }
  if (RelayPumpStatusNow != RelayPumpStatusOld && RelayPumpStatusNow == 1)
  {
    button1on();
    sprintf(buf, "GET http://192.168.254.3/objects/?object=CirculationPump&op=m&m=switch&status=1");
      RelayPumpStatusOld = RelayPumpStatusNow;
}
else if (RelayPumpStatusNow != RelayPumpStatusOld && RelayPumpStatusNow == 0)
{
  button1off();
  sprintf(buf, "GET http://192.168.254.3/objects/?object=CirculationPump&op=m&m=switch&status=0");
    RelayPumpStatusOld = RelayPumpStatusNow;
}
if (RelayConvStatusNow != RelayConvStatusOld && RelayConvStatusNow == 1)
  {
button2on();
sprintf(buf, "GET http://192.168.254.3/objects/?object=ConvectionPump&op=m&m=switch&status=1");
    RelayConvStatusOld = RelayConvStatusNow;
}
else if (RelayConvStatusNow != RelayConvStatusOld && RelayConvStatusNow == 0)
{
  button2off();
  sprintf(buf, "GET http://192.168.254.3/objects/?object=ConvectionPump&op=m&m=switch&status=0");
      RelayConvStatusOld = RelayConvStatusNow;
}
}

void touch() 
 {
   // перша робоча кнопка
   if((X > 90 && X < 135) && (Y > 130 && Y < 220) && (Z > MINPRESSURE && Z < MAXPRESSURE)&& (RelayPumpStatusNow == 0))
 {
 RelayPumpStatusNow = !RelayPumpStatusNow;
 ManualPr = 1;
 }
 else if ((X > 90 && X < 135) && (Y > 130 && Y < 220) && (Z > MINPRESSURE && Z < MAXPRESSURE)&& (RelayPumpStatusNow == 1) && (SensPr == 0))
 {
   RelayPumpStatusNow = !RelayPumpStatusNow;
   ManualPr = 0;
   }
 
 // друга робоча кнопка
 if((X > 210 && X < 330) && (Y > 130 && Y < 220) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (RelayConvStatusNow == 0))
 {
 RelayConvStatusNow = !RelayConvStatusNow;
 last_convection_run = millis();
 delay(60);
 }
 else if ((X > 210 && X < 330) && (Y > 130 && Y < 220) && (Z > MINPRESSURE && Z < MAXPRESSURE) && (RelayConvStatusNow == 1)) 
 {
 RelayConvStatusNow = !RelayConvStatusNow;
 delay(60);
 }
 if (millis() -  last_convection_run > 900000 && RelayConvStatusNow == 1)
  {
   RelayConvStatusNow = !RelayConvStatusNow; 
    delay (60);
    }
 }
 
void buttons()
{
 TSPoint p = ts.getPoint(); // Realizamos lectura de las coordenadas
  
 pinMode(XM, OUTPUT); // La librería utiliza estos pines como entrada y salida
 pinMode(YP, OUTPUT); // por lo que es necesario declararlos como salida justo
 // despues de realizar una lectura de coordenadas. 
 
 // Mapeamos los valores analogicos leidos del panel tactil (0-1023)
 // y los convertimos en valor correspondiente a la medida del LCD 320x240
 X = map(p.x, TS_MAXX, TS_MINX, tft.width(), 0);
 Y = map(p.y, TS_MAXY, TS_MINY, tft.height(), 0);
 Z = p.z;
 }
   
void dhts(void)
{ 
  tmElements_t tm;
  RTC.read(tm);
  int t1 = sens.readTemperature(36); 
  int h1 = sens.readHumidity(36);    
  delay(2000);
  int t2 = sens.readTemperature(37); 
  int h2 = sens.readHumidity(37);    
  delay(4000);
  int d = t1-t2;
  if ((t1>=21) && (d>=3) && (RelayConvStatusNow == 0) && (t2>=5) && ((tm.Hour<=22) || (tm.Hour>=7)) && (tm.Minute<=15))
 { 
 RelayConvStatusNow = !RelayConvStatusNow;
 }
  else if (millis() -  last_convection_run > 900000 && RelayConvStatusNow == 1)
  {
   RelayConvStatusNow = !RelayConvStatusNow; 
   }
    tft.fillRect(6, 11, 143, 218, CYAN); 
    tft.setCursor(30, 20); 
    tft.setTextSize(2); 
    tft.setTextColor(BLUE); 
    tft.print(tm.Hour);
    tft.write(':');
    tft.print(tm.Minute);
    tft.write(':');
    tft.print(tm.Second);
    tft.setCursor(20, 40); 
    tft.setTextSize(2); 
    tft.setTextColor(BLUE);
    tft.print(tm.Day);
    tft.write('/');
    tft.print(tm.Month);
    tft.write('/');
    tft.print(tmYearToCalendar(tm.Year));
    tft.println();
  tft.setCursor(30, 60); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK); 
  tft.println("SENSORS:");
  tft.setCursor(10, 80); 
  tft.setTextSize(1); 
  tft.setTextColor(BLACK); 
  tft.println("MAIN Room-t C");
  tft.setCursor(10, 90); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK);
  tft.println(t1); 
  tft.setCursor(10, 110); 
  tft.setTextSize(1); 
  tft.setTextColor(BLACK);
  tft.println("MAIN Room -h%");
  tft.setCursor(10, 120); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK); 
  tft.println(h1);
  tft.setCursor(10, 140); 
  tft.setTextSize(1); 
  tft.setTextColor(BLACK); 
  tft.println("Second Room -t C");
  tft.setCursor(10, 150); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK); 
  tft.println(t2);
  tft.setCursor(10, 170); 
  tft.setTextSize(1); 
  tft.setTextColor(BLACK); 
  tft.println("Second Room -h%");
  tft.setCursor(10, 180); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK); 
  tft.println(h2);
  delay(1000);
  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  delay(750);
  ds.reset();
  ds.write(0xCC);
  ds.write(0xBE);
  data[0] = ds.read();
  data[1] = ds.read();
  int Temp = (data[1]<< 8)+data[0];
  Temp = Temp>>4;
  tft.setCursor(10, 200); 
  tft.setTextSize(1); 
  tft.setTextColor(BLACK); 
  tft.println("Convection chamber -t C");
  tft.setCursor(10, 210); 
  tft.setTextSize(2); 
  tft.setTextColor(BLACK); 
  tft.println(Temp);
  if (((Temp > 31) && (RelayPumpStatusNow == 0)) || ((Temp < 5) && (RelayPumpStatusNow == 0))) 
{
 RelayPumpStatusNow = !RelayPumpStatusNow;
 SensPr = 1;
  }
  else if (((Temp < 31) && (RelayPumpStatusNow == 1)) && ((Temp > 5) && (RelayPumpStatusNow == 1)) && (ManualPr == 0))
  {
  RelayPumpStatusNow = !RelayPumpStatusNow;
  SensPr = 0;
  }
 }
void button1on ()
{
  tft.fillRect(160, 10, 145, 110, RED); 
 tft.setCursor(170, 20); 
 tft.setTextSize(2); 
 tft.setTextColor(WHITE); 
 tft.println("CIRCULATION");
 tft.setCursor(200, 40);
 tft.setTextSize(2);
 tft.setTextColor(WHITE);
 tft.println("PUMP");
 tft.setCursor(200, 60);
 tft.setTextSize(2);
 tft.setTextColor(WHITE);
 tft.println("ON");
 digitalWrite(RelayCirc, LOW);
 delay(60);
 }
void button1off()
{
  tft.drawRect(160, 10, 145, 110, RED);
 tft.fillRect(161, 11, 143, 108, CYAN); 
 tft.setCursor(170, 20); 
 tft.setTextSize(2); 
 tft.setTextColor(RED); 
 tft.println("CIRCULATION");
 tft.setCursor(200, 40);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("PUMP");
 tft.setCursor(200, 60);
 tft.setTextSize(2);
 tft.setTextColor(RED);
 tft.println("OFF");
 digitalWrite(RelayCirc, HIGH);
 delay(60); 
}
  void button2on()
  {
 digitalWrite (RelayConv, LOW);
 tft.fillRect(160, 125, 145, 105, RED);
 tft.setCursor(170, 130); 
 tft.setTextSize(2); 
 tft.setTextColor(WHITE); 
 tft.println("CONVECTION");
 tft.setCursor(190, 150);
 tft.setTextSize(2);
 tft.setTextColor(WHITE);
 tft.println("CHAMBER"); 
 tft.setCursor(190, 170);
 tft.setTextSize(2);
 tft.setTextColor(WHITE);
 tft.println("ON");
 last_convection_run = millis();
 delay(5);
  }
  void button2off()
  {
    digitalWrite(RelayConv, HIGH);
    tft.drawRect(160, 125, 145, 105, RED);
    tft.fillRect(161, 126, 143, 103, CYAN); 
    tft.setCursor(170, 130); 
    tft.setTextSize(2); 
    tft.setTextColor(RED); 
    tft.println("CONVECTION");
    tft.setCursor(190, 150);
    tft.setTextSize(2);
    tft.setTextColor(RED);
    tft.println("CHAMBER"); 
    tft.setCursor(190, 170);
    tft.setTextSize(2);
    tft.setTextColor(RED);
    tft.println("OFF");
    delay (60);
  }
  void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
    tft.write('0');
  }
  Serial.print(number);
  tft.println(number);
} 
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Опять Ардуино и МД???

Сообщение flair » Сб фев 20, 2016 7:15 pm

после строчки с гетом

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

sprintf(buf, "GET http://192.168.254.3/objects/?object=ConvectionPump&op=m&m=switch&status=0");
ее надо отправить...
для этого нужна функция отправки

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

sendHTTPRequest();
СпойлерПоказать

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

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");     
  }
}
примерно такая

вот мой скетч - там есть отправка гетов на мажордом.. можно сделать по аналогии
СпойлерПоказать

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

/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino MEGA + EthernetShield W5100
* IDE: Arduino 1.6.5
* 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 byte analogInPin = 9; //аналог пин А9 - подключние солнечной панели +
const byte 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 old_solarV = 0;
float current_solarV = 0; 


byte key1[8] =  //МОИ КЛЮЧИ
byte key2[8] = //




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(byte a) {
   byte 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();

}    
}


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

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


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




String url = String(25);
byte 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);


// Для поиска
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 получить все устройства на шине и выдать на страницу

   
     
            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];
  byte pin;
  byte r = 0;
  byte g = 0;
  byte 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.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);
  
  
}



/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
   Serial.println("Search on 1-wire");

   
 
      }
 

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

 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();  
 
  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 (byte thisAPin = startAPin; thisAPin <=endAPin; thisAPin++)  {
    pinMode(thisAPin, INPUT);      
  }
    // Настройка портов
  for (byte thisPin = startPin; thisPin <=endPin; thisPin++)  {/////////////////////////////////////////////////////////////////////////////////////////////////////////
    pinMode(thisPin, OUTPUT);      
  }

   pinMode(50, OUTPUT); //____________________________________________ds1990
   digitalWrite(50, HIGH);
  // Настройки 1-wire 
  dht.begin();
  dht1.begin();
  

  
}
void ledblink() {            //************* мигание Led при считывании ключа
     digitalWrite(50, LOW);
     delay(500);
     digitalWrite(50, HIGH);
}

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

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

/* Работа с выключателями
*/
          
  
  

 
 
 // TEMP SENSOR 1 --------------------------------------
  
  


  //dth...................1*****************************************************************************************
    
  
  
  float current_tempKith=0;
  tempKith = dht.readTemperature();// Получим температуру от датчика (или ошибку)
{
    // Устройство отдало реальное значение температуры (или осталось старое)
    
    Serial.print("TemperatureKITH: "); 
    Serial.println(tempKith);
    
    current_tempKith = tempKith; // получаем температуру
    
    if (old_tempKith!=(int)current_tempKith) {
      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.println(humKith);
    
    // Устройство отдало реальное значение температуры (или осталось старое)
    
    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.println(tempLiv);
    
    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.println(humLiv);
        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;            
  current_solarV = solarV;
  if(old_solarV != current_solarV){
   if( solarV > 0.3){
     sprintf(buf, "GET /objects/?object=sensorSolar&op=m&m=statusChanged&status=1&statusText=%i", (int)current_solarV);   
      sendHTTPRequest();
   } else {
    sprintf(buf, "GET /objects/?object=sensorSolar&op=m&m=statusChanged&status=0&statusText=%i", (int)current_solarV);   
      sendHTTPRequest();
  } 
  Serial.print("Voltage = " );                      
  Serial.println(solarV); 
  }
  old_solarV = current_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("Anna");
     ledblink();
     sprintf(buf, "GET /objects/?object=sensorKey&op=m&m=statusChanged&status=1");   
      sendHTTPRequest();
  }
  // индикация на втором светодиоде
  if (val2 == 8) {
    Serial.println("Evgeni");
     ledblink();
      sprintf(buf, "GET /objects/?object=sensorKey&op=m&m=statusChanged&status=2");   
      sendHTTPRequest();
  }   

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

for(int i=startAPin;i<=endAPin;i++) {
 
            byte 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

}
ПС чисто ИМХО но всеже - зря брали ДХТ 11 - врет собака неимоверно... 22ой сильно точнее
Ответить