Arduino mini pro + W5100+dht22+bmp180+фото датчик+датчик дождя.

777Andrej
Offline
Зарегистрирован: 09.04.2014


Какая то проблема, не могу вывести данные с датчика дождя, датчик дождя выводит напряжение 0-5в на А1 , такое впечатление что в коде есть ограничение на количество датчиков до 6 штук. 



#include <dht.h>
dht DHT;
#define DHT22_PIN 3
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>
#include <SPI.h>
#include <Wire.h>
#include <BMP085.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BMP085 bmp;
int sensorPin = A0;            // Датчик света фотодатчик
unsigned int sensorValue = 0;  // цифровое значение фоторезистора
int analogPin = 1; // датчик дождя
int val = 0;       // переменная для хранения значения датчика дождя /от 0-5в
const unsigned long postingInterval = 300000;  // интервал между отправками данных в миллисекундах (5 минут)
unsigned long lastConnectionTime = 0;           // время последней передачи данных
boolean lastConnected = false;                  // состояние подключения
int HighByte, LowByte, TReading, SignBit, Tc_100;
char replyBuffer[106];
char CurTemp[8], CurHum[8], Dav[8], Temp1[8], Temp3[8], Foto[8], Dojd[8];

// ========================Задаем данные сети======================
byte mac[] = {
 мак адресс
}; //mac - адрес ethernet shielda
EthernetClient client; //
//int ledPin = 9; // указываем что светодиод будет управляться через 9 Pin
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //изначальный статус светодиода - выключен
IPAddress server(94, 19, 113, 221); // IP сервера narodmon.ru
// ===============================================================

void setup()
{
  delay(4000);
  // Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    //Serial.println("Failed to configure Ethernet using DHCP");
    // ничего не делаем. doing nothing
    for (;;);
  }
  // пара секунд для инициализации Ethernet. Couple of seconds just to warm up Ethernet.
  delay(2000);
  lastConnectionTime = millis() - postingInterval + 15000; //первое соединение через 15 секунд после запуска. First connection after 15 sec timeout.
  bmp.begin();
  sensors.begin();
}

void loop()
{
  sensors.requestTemperatures();
  // READ DATA
  int chk = DHT.read22(DHT22_PIN);
  switch (chk)
    delay (1000);
  // TempDig = DHT.temperature;
  dtostrf(DHT.temperature, 4, 1, CurTemp);
  delay (1000);
  dtostrf(DHT.humidity, 4, 1, CurHum);
  delay(50000);
  if (client.available()) {
    char c = client.read();
  }
  if (client.connected() && lastConnected)
  {
    client.stop();
  }
  if (!client.connected() && (millis() - lastConnectionTime > postingInterval))
  {
    //формирование HTTP-запроса. Preparing http request.
    memset(replyBuffer, 0, sizeof(replyBuffer));
    strcpy(replyBuffer, "ID=");
    //Конвертируем MAC-адрес. Converting mac address.
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    //конвертируем адрес термодатчика. Converting first sensor address.

    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    strcat(replyBuffer, "01"); //01  темп улица DHT22

    //конвертируем адрес датчика влажности. Converting secong sensor address.
    strcat(replyBuffer, "=");
    if (SignBit)
    {
      strcat(replyBuffer, "-");
    }
    strcat(replyBuffer, CurTemp);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    strcat(replyBuffer, "2");//12 влажность улица DHT22

    strcat(replyBuffer, "=");

    strcat(replyBuffer, CurHum);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    strcat(replyBuffer, "03");//11 давление 085

    strcat(replyBuffer, "=");

    dtostrf(bmp.readPressure(), 4, 1, Dav);
    strcat(replyBuffer, Dav);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }

    strcat(replyBuffer, "04");//10 температура 085
    strcat(replyBuffer, "=");
    dtostrf(bmp.readTemperature(), 4, 1, Temp1);
    strcat(replyBuffer, Temp1);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    strcat(replyBuffer, "5");//8 температура 1820
    strcat(replyBuffer, "=");
    dtostrf(sensors.getTempCByIndex(0), 4, 1, Temp3);
    strcat(replyBuffer, Temp3);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }

    /*strcat(replyBuffer, "07"); //23 Датчик дождя++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    strcat(replyBuffer, "=");
    if (SignBit)
    val = analogRead(analogPin);
    dtostrf(val, 4, 1, Dojd);
    strcat(replyBuffer, Dojd);
    strcat(replyBuffer, "&");
    for (int k = 0; k < 6; k++)
    {
      int b1 = mac[k] / 16;
      int b2 = mac[k] % 16;
      char c1[2], c2[2];

      if (b1 > 9) c1[0] = (char)(b1 - 10) + 'A';
      else c1[0] = (char)(b1) + '0';
      if (b2 > 9) c2[0] = (char)(b2 - 10) + 'A';
      else c2[0] = (char)(b2) + '0';

      c1[1] = '\0';
      c2[1] = '\0';

      strcat(replyBuffer, c1);
      strcat(replyBuffer, c2);
    }
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      */
    strcat(replyBuffer, "06"); //Фото датчик 05
    strcat(replyBuffer, "=");
    sensorValue = analogRead(sensorPin);
    dtostrf(sensorValue, 4, 1, Foto);
    strcat(replyBuffer, Foto);
    strcat(replyBuffer, "&");

    httpRequest();
  }

  lastConnected = client.connected();

}

void httpRequest() {
  if (client.connect(server, 80)) {

    // send the HTTP POST request:
    client.println("POST http://narodmon.ru/post.php HTTP/1.0");
    //Serial.println("POST http://narodmon.ru/post.php HTTP/1.0");
    client.println("Host: narodmon.ru");
    // Serial.println("Host: narodmon.ru");
    //client.println("User-Agent: arduino-ethernet");
    //client.println("Connection: close");
    client.println("Content-Type: application/x-www-form-urlencoded");
    // Serial.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(strlen(replyBuffer));
    // Serial.print("Content-Length: ");
    // Serial.println(strlen(replyBuffer));
    client.println();
    // Serial.println();
    client.println(replyBuffer);
    // Serial.println(replyBuffer);
    client.println();
    lastConnectionTime = millis();
    delay(1000);
  }
  else {
    // Serial.print("http request failed - client not connected");
    client.stop();
  }
}

 

777Andrej
Offline
Зарегистрирован: 09.04.2014

тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают. 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

777Andrej пишет:

тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают. 

Если есть подозрение на ограничение количества датчиков, я бы попробовал закоммментировать другой датчик, а этот - раскомментировал...

777Andrej
Offline
Зарегистрирован: 09.04.2014

Andrey_Y_Ostanovsky пишет:

777Andrej пишет:

тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают. 

Если есть подозрение на ограничение количества датчиков, я бы попробовал закоммментировать другой датчик, а этот - раскомментировал...

делал, работает. 
но вопрос, это на сайте ограничение, или у меня в коде?

777Andrej
Offline
Зарегистрирован: 09.04.2014

как можно вставить в этот код.
код ик приёмника. ? 
что бы ик приёмник сработал в любой промежуток времени?



#include <IRremote.h>
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определнного порта
decode_results results; //Переменная, хранящая результат
int r = 0; // переменная переключения режима, при нажатии кнопки она принимает значение +1


void setup()
{
 
  irrecv.enableIRIn(); // Начинаем прием
  irrecv.enableIRIn(); // включить приемник
  pinMode(12, OUTPUT);

}

void loop() {

  if (irrecv.decode(&results)) //При получении сигнала...
  {
    
    irrecv.resume(); // Получаем следующее значение
  }
delay(50); //пауза между повторами //
  if (irrecv.decode(&results)) {
    delay(300); // задержка перед выполнением определения кнопок, чтобы избежать быстрое двойное нажатие
    if (results.value == 0x9C455CBF) {r = r + 1;}

    // начинаем включать светодиоды на пинах
    if (r == 1) {digitalWrite(12, HIGH);} 
    else {digitalWrite(12, LOW);r = 0;}

   // { 
     // delay(50); //пауза между повторами //
  //  } //
    irrecv.resume(); //
    //delay(20);
    
  }
}