Main

Код прошивки контроллера 1

Схема контроллера 1

Код делался "на скорую руку" (а точнее собирался по интернетам), но, как водится, остался надолго :)

Для компиляции использовалась версия оболочки Arduino 017. Если при компиляции возникнут ошибки нехватки библиотек, то можно сравнить содержимое папки hardware/libraries с данным архивом и скопировать недостающее.

#include <Ethernet.h>
#include <SPI.h>

// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.
// придётся её скопировать.
#include <DallasTemperature.h>

// MAC-адрес нашего устройства
byte mac[] = { 0x00, 0x2A, 0xF6, 0x12, 0x68, 0xFC };
// ip-адрес устройства
byte ip[] = { 192, 168, 0, 72 };
// ip-адрес удалённого сервера
byte server[] = { 192, 168, 0, 17 }; // измените на свой

int old_temperature1=0;
int old_temperature2=0;
int old_garage=0;
int old_entry=0;
int old_movement_1=0;
int old_movement_2=0;
int old_light=0;
char buf[80];

Client rclient(server, 80); // 80-порт.
DallasTemperature tempSensor1;
DallasTemperature tempSensor2;

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
  Serial.println(buf); 
  if (rclient.connect()) { 
   Serial.println("OK"); 
   rclient.println(buf);
   rclient.println("Host: 192.168.0.17");
   rclient.println();   
   delay(2000);
   rclient.stop();
  } else {
   Serial.println("FAILED");     
  }

}


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

 tempSensor1.begin(2); // Датчик температуры на 2-й пин (котёл)
 tempSensor2.begin(3); // Датчик температуры на 3-й пин (зал)

 pinMode(4, INPUT); // Датчик гаражной двери на 7-ый пин
 old_garage=digitalRead(4);

 pinMode(5, INPUT); // Датчик въездных ворот на 8-ый пин 
 old_entry=digitalRead(5);

 pinMode(6, INPUT); // Датчик движения 1
 old_movement_1=digitalRead(6);

 pinMode(7, INPUT); // Датчик движения 2
 old_movement_2=digitalRead(7);

 pinMode(8, INPUT); // Датчик света
 old_light=digitalRead(8);

 Serial.begin(115200); // Скорость консольного порта 115200 (пригодится для отладки)
}

void loop()
{

  int valid_sensor=0;

  delay(1000); // задержка в 1 сек.  

  // TEMP SENSOR 1
  float current_temp1=0;
  // Соединяемся
  // Обработчик ошибок датчика
  valid_sensor=1;
  switch(tempSensor1.isValid())
   {
     case 1:
       Serial.println("Err T1"); // ошибка контрольной суммы
       tempSensor1.reset(); // сбросить девайс
       valid_sensor=0;
     case 2:
       Serial.println("Err T1"); // какой-то "левый" датчик :)
       tempSensor1.reset(); // сбросить девайс
       valid_sensor=0;
   }


if (valid_sensor==1) {  
   Serial.println("T1");
   current_temp1=tempSensor1.getTemperature(); // получаем температуру
   Serial.println(current_temp1);

  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=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));   
   sendHTTPRequest();

}
 old_temperature1=(int)current_temp1;

}


  // TEMP SENSOR 2
  float current_temp2=0;

  // Соединяемся
  // Обработчик ошибок датчика
  valid_sensor=1;
  switch(tempSensor2.isValid())
   {
     case 1:
       Serial.println("Err T2"); // ошибка контрольной суммы
       tempSensor2.reset(); // сбросить девайс
       valid_sensor=0;
     case 2:
       Serial.println("Err T2"); // какой-то "левый" датчик :)
       tempSensor2.reset(); // сбросить девайс
       valid_sensor=0;
   }

 if (valid_sensor==1) {
   Serial.println("T2");
   current_temp2=tempSensor2.getTemperature(); // получаем температуру
   Serial.println(current_temp2);

  if ((old_temperature2!=(int)current_temp2) && (current_temp2<50) && (current_temp2>5)) {
   int temp1 = (current_temp2 - (int)current_temp2) * 100; // выделяем дробную часть
   sprintf(buf, "GET /objects/?object=sensorZal&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp2, abs(temp1));   
   sendHTTPRequest();

}
 old_temperature2=(int)current_temp2;  
 }

  //GARAGE GATES SENSOR
  Serial.println("G");
  int current_garage=digitalRead(4);
  //Serial.println(current_garage);
  if (current_garage!=(int)old_garage) {
    old_garage=(int)current_garage;
    sprintf(buf, "GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_garage);
    sendHTTPRequest();
  }

 //ENTRY GATES SENSOR

  Serial.println("E");
  int current_entry=digitalRead(5);
  //Serial.println(current_entry);
  if (current_entry!=(int)old_entry) {
    old_entry=(int)current_entry;
    sprintf(buf, "GET /objects/?object=sensorEntry&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_entry);
    sendHTTPRequest();
  }

 //MOVEMENT 1 SENSOR
  Serial.println("M1");
  int current_movement_1=digitalRead(6);
  //Serial.println(current_movement_1);
  if (current_movement_1!=(int)old_movement_1) {
    old_movement_1=(int)current_movement_1;
    sprintf(buf, "GET /objects/?object=sensorMovement1&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_1);
    sendHTTPRequest();
  }

 //MOVEMENT 2 SENSOR
  Serial.println("M2");
  int current_movement_2=digitalRead(7);
  //Serial.println(current_movement_2);
  if (current_movement_2!=(int)old_movement_2) {
    old_movement_2=(int)current_movement_2;
    sprintf(buf, "GET /objects/?object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_2);
    sendHTTPRequest();
  }


 //LIGHT SENSOR

  Serial.println("L");
  int current_light=digitalRead(8);
  //Serial.println(current_light);
  if (current_light!=(int)old_light) {
    old_light=(int)current_light;
    sprintf(buf, "GET /objects/?object=sensorLight&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_light);
    sendHTTPRequest();
  }  


}

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki