Arduino mini pro + W5100+dht22+bmp180+фото датчик+датчик дождя.
- Войдите на сайт для отправки комментариев
Чт, 16/04/2015 - 19:26
Какая то проблема, не могу вывести данные с датчика дождя, датчик дождя выводит напряжение 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();
}
}
тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают.
тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают.
Если есть подозрение на ограничение количества датчиков, я бы попробовал закоммментировать другой датчик, а этот - раскомментировал...
тоесть если я вставляю код датчика дождя строчки 240-263, то на сайт ваще данные не поступают.
Если есть подозрение на ограничение количества датчиков, я бы попробовал закоммментировать другой датчик, а этот - раскомментировал...
делал, работает.
но вопрос, это на сайте ограничение, или у меня в коде?
как можно вставить в этот код.
код ик приёмника. ?
что бы ик приёмник сработал в любой промежуток времени?
#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); } }