Блок автоматики инкубатора

Jovani
Offline
Зарегистрирован: 21.02.2020

Доброго времени суток друзья!Требуется ваша помощь, работаю в школе и по необходимости занимаюсь с детворой на общественных началах ,в общем за спасибо :) В свободное время собираем различные устройства и пробуем сделать что то что нужно для нашей сельской местности,к сожалению познания мои в области програмирования ничтожны и сам я не смог справится с возникшими трудностями.В общем так- было решено сделать инкубатор ,на просторах интернета отыскалась интересная  разработка ,бюджетная и практичная но увы все мои познания потерпели неудачу об ошибку кампиляции скетча.Буду рад любой помощи ,второй месяц пытался решить проблему,обращался и к человеку который создавал проект но тщетно.Может быть комуто тоже пригодится такое устройство. Привожу скетч и ошибки.

#include <PID_v1.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM2.h>
#include "RTClib.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Sensirion.h>
#include <avr/wdt.h>
#include <Encoder.h>

int del = 80;                     // переменная ожидания между выборами меню
unsigned int interval = 300;      // интервал сколько будет длиться цикл while, после чего перейдёт к следующему меню.(кол-во итераций)
//#define EXT_HEATING                  // ИСПОЛЬЗУЕМ ДОП.НАГРЕВАТЕЛЬ ВМЕСТО УВЛАЖНИТЕЛЯ. Если нужен увлажнитель, просто закомментируйте эту строку.
#define heater_pin 13                  // нагреватель
#define humidifer_pin 12               // увлажнитель
#define fan_pin 11                     // вентилятор
#define alarm_pin 14                   // пин аварии
#define beeper_pin 9                   //пищалка по аварии
#define dataPin 5                      //SHT10
#define clockPin 6                     //SHT10 
#define turn_pin 10                    // управление поворотом
#define extend_heater_pin 8          // дополнительный нагреватель
//#define button_minus_pin 2            //пин кнопки "минус"
//#define button_plus_pin 3             //пин кнопки "плюс"
#define button_enter_pin 4            //пин кнопки "enter"
#define DS18B20_Pin 7                 //пин термометра
#define setSampleTime 300            //время цикла ПИД
#define voltmeter_pin 1               //вход А1 через делитель (22к/10к) подключен к питанию модуля. Измеряет до 16В.
#define T_correction -0.1             // коррекция температуры SHT10
#define h_histeresis 1.0              // гистерезис влажности
#define door_pin 16                 // пин открытой двери (А2)

//boolean button_minus;                // статус нажатия кнопок
//boolean button_plus;
//boolean button_enter;
boolean turnFlag = 0;              // флаг поворота для случайного периода
boolean heater_off;               // флаг запрета нагреателя
boolean needFan;					   // флаг аварийной вентиляции
float humidity;                    // Влажность
float temp1Ink;                    // Температура DS18B20
float temp2Ink;                    // Температура SHT10
float needTemp = 37.6;             // нужная для текущего дня температура инкубации (по умолчанию)
float needHum = 60.5;              // ---- влажность
//float dewpoint;                    // Точка росы

unsigned char button_minus;               // статус нажатия кнопок
unsigned char button_plus;
unsigned char button_enter;
long oldPosition  = 500;  			// позиция энкодера
unsigned int rawData;
unsigned long currentTime;            // задаем переменные для тайминга поворота
unsigned long loopTime;
unsigned long serialTime; //this will help us know when to talk with processing
unsigned long now;
unsigned long trhMillis = 0;             // период опроса датчиков
byte measActive = false;
byte measType = TEMP;
const unsigned long TRHSTEP   = 300UL;  // Период опроса датчиков
unsigned int currentDay;                // текущий день в юникс-формате
String birdPrint = "CHICK";

LiquidCrystal_I2C lcd(0x3F, 20, 4);  // инициализация библиотеки дисплея
//SHT1x sht1x(dataPin, clockPin);
OneWire oneWire(DS18B20_Pin);
DallasTemperature sensors(&oneWire);
Sensirion sht = Sensirion(dataPin, clockPin);

double Setpoint, Input, Output;            //объявляем переменные для ПИД
PID myPID(&Input, &Output, &Setpoint, 50, 0.5, 0.1, DIRECT); //Инициализируем ПИД-библиотеку и коэффициенты
int WindowSize = 1000;                  // ширина окна терморегулятора 1 секунда.
unsigned long windowStartTime;
unsigned long alarmDelay;
RTC_DS1307 RTC;
Encoder myEnc(3, 2);

//SimpleTimer timer;

/*  EEPROM1 -     tempInk (float)
    EEPROM(13) -  set_humidity (float)
    EEPROM5 -     +-alarmTemp  (float)
    EEPROM9 -     alarm_fan    (bool)
    EEPROM11 -    turnPeriod   (int)
    EEPROM17 -     bird         (int)
   */


////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);

  RTC.begin();         // Старт часов
  lcd.begin();          // Старт дисплея
  Wire.begin();        // старт I2C
  lcd.backlight();     // Включаем подсветку дисплея
  windowStartTime = millis();
  //  byte stat;
  //  byte error = 0;
  //  float tempInk;
  //  float set_humidity;
  //  float alarmTemp;

  delay(15);
  wdt_enable (WDTO_8S); //взводим сторожевой таймер на 8 секунд.
  myPID.SetOutputLimits(0, WindowSize); //задаем лимиты ширины ПИД-импульса от 0 до 1 секунды.
  myPID.SetMode(AUTOMATIC);             //включаем ПИД-регулирование
  myPID.SetSampleTime(setSampleTime);

  pinMode(extend_heater_pin, OUTPUT);      //пин дополнительного нагревателя. Переводим в 1 чтобы не включать реле.
  digitalWrite(extend_heater_pin, HIGH);
  pinMode(heater_pin, OUTPUT);
  pinMode(turn_pin, OUTPUT);      // устанавливаем выводы
  digitalWrite(turn_pin, HIGH);
  pinMode(humidifer_pin, OUTPUT);
  pinMode(fan_pin, OUTPUT);
  digitalWrite(fan_pin, HIGH);
  pinMode(alarm_pin, OUTPUT);
  digitalWrite(alarm_pin, HIGH);
  //pinMode(button_minus_pin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
  //pinMode(button_plus_pin, INPUT_PULLUP);
  pinMode(button_enter_pin, INPUT_PULLUP);
  pinMode(door_pin, INPUT_PULLUP);
  alarmDelay = millis();
  sensors.begin();
  sensors.setResolution(12);    // установить разрешение (точность)
  sensors.setWaitForConversion(false);  // отключить ожидание
  birdSelect();	// читаем птицу
  //windowStartTime = millis();
  //RTC.adjust(DateTime(__DATE__, __TIME__));   //раскоментируйте для установки системмных даты и времени
}

//////////////////////////////////////////////////////////////////////////
void loop() {
  // Input = getTemp();
  unsigned int startDayUnixtime;          // хранящийся в памяти день старта программы в юникс-формате
  //float needTemp = 37.6;                  // нужная для текущего дня температура инкубации (по умолчанию)
  //float needHum = 60.5;                   // ---- влажность
  int ventTime = 2;                       // длительность проветривания
  boolean needTurn = false;               // нужен ли поворот яиц?
  unsigned int currentTime_day;           //текущий день в юникс-формате (сколько дней минуло с 1 января 1970)
  int bird;                         // выбор птицы
  int r_array[6][4][5] = {
    {{2, 382, 650, 0, 1}, {12, 377, 540, 5, 1}, {18, 374, 480, 20, 1}, {20, 371, 855, 10, 0}},  // chick
    {{2, 382, 600, 0, 1}, {12, 376, 600, 3, 1}, {15, 374, 480, 10, 1}, {18, 370, 855, 10, 0}},  // quail
    {{7, 381, 700, 0, 1}, {13, 376, 600, 3, 1}, {25, 373, 560, 20, 1}, {30, 370, 855, 10, 0}},  // duck
    {{15, 380, 610, 5, 1}, {26, 375, 520, 20, 1}, {27, 374, 690, 10, 0}, {35, 370, 800, 0, 0}}, // muskus
    {{3, 379, 630, 0, 0}, {13, 378, 540, 3, 1}, {26, 375, 560, 20, 1}, {30, 372, 590, 10, 0}},  // goose
    {{6, 379, 560, 0, 1}, {12, 376, 530, 3, 1}, {26, 373, 520, 20, 1}, {30, 370, 855, 10, 0}},  // turkey
  };

  DateTime now = RTC.now();
  currentTime_day = (now.unixtime() / 86400L);
  //timer.run();
  button_read();
  if (button_enter) {
    delay(del);
    lcd.clear();
    menu();
    lcd.clear();
  }
  if (button_minus) {
    delay(del);
    lcd.clear();
    alarmDelay = millis();    // задержка аварии по нажатии кнопки Минус
  }
  if (button_plus) {
    delay(del);
    lcd.clear();
    digitalWrite(turn_pin, !digitalRead(turn_pin));       // включаем/выключаем реле поворота по кнопке Плюс
  }
  if (button_plus && button_plus) {
    delay(del);
    lcd.clear();
    // bottomView = !bottomView;       // переключаем режим показа нижней строки.
  }
  //send-receive with processing if it's time
  if (millis() > serialTime * 5)
  {
    SerialReceive();
    SerialSend();
    serialTime += 500;
  }
  EEPROM_read(1, startDayUnixtime);
  currentDay = (currentTime_day - startDayUnixtime);

  EEPROM_read(17, bird);
  for (int d = 3; d >= 0; d--) {
    if (currentDay < r_array[bird][d][0]) {
      needTemp = float(r_array[bird][d][1] / 10.0);
      needHum = float(r_array[bird][d][2] / 10.0);
      ventTime = r_array[bird][d][3];
      needTurn = r_array[bird][d][4];
    }
  }
  getSensors();
  thermostat(needTemp, needHum);    // влажность передаем только для вывода на дисплей )))
  humidifer(needHum);
  turn(needTurn);
  fan(ventTime);
  alarm(needTemp);
  ext_heater(needTemp);
  //outpuPower();
  wdt_reset();
}


/// чтиаем энкодер ////////////////////////////////////////////////////////////////////////
void button_read() {
  long newPosition = myEnc.read();
  if (newPosition != oldPosition) {
    if (newPosition >= oldPosition + 2) {
      button_plus = 1;
    }
    if (newPosition <= oldPosition - 2) {
      button_minus = 1;
    }
    oldPosition = newPosition;
    //Serial.println(newPosition);
  }
  else {
    button_plus = 0;
    button_minus = 0;
  }

  if (digitalRead(button_enter_pin) == LOW )  {
    delay(del / 2);
    button_enter = 1;
  }
  if (digitalRead(button_enter_pin) == HIGH )  {
    delay(del / 2);
    button_enter = 0;
  }
  if (button_minus || button_plus || button_enter) beeper(50);
  wdt_reset();
}


////меню////////////////////////////////////////////////////////////////
void menu() {
  bird_setup();
  turn_setup();
  alarm_setup();
  vent_setup();
  startInk();
  //data_time_setup();
}


// записываем в память день начала инкубации в юникс-формате////////////
void startInk() {
  unsigned int currentTime_day;
  unsigned int memoryDay;
  DateTime now = RTC.now();
  currentTime_day = (now.unixtime() / 86400L);

  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("START INK");
  delay(1000);
  lcd.clear();
  int x = 0;
  while (1) {
    x++;
    if (x > interval) break;
    button_read();
    EEPROM_read(1, memoryDay);
    //Serial.print(currentTime_day);
    //Serial.print("-");
    //Serial.print(memoryDay);
    //Serial.print("=");
    //Serial.println(currentTime_day-memoryDay);
    if (button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (button_minus) {
      EEPROM_write(1, currentTime_day);
      lcd.clear();
    }
    if (button_plus) {
      EEPROM_write(1, memoryDay - 1);
      lcd.clear();
    }
    EEPROM_read(1, memoryDay);
    lcd.setCursor(5, 0);
    lcd.print("DAY = ");
    lcd.print(currentTime_day - memoryDay);
    lcd.setCursor(2, 1);
    lcd.print("ZERO START +1");
    delay(del);
  }
}


//выбираем птицу /////////////////////////////////////////////////////////
void bird_setup() {
  int birdType;
  lcd.clear();
  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("BIRD SETUP");
  delay(1000);
  lcd.clear();
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    EEPROM_read(17, birdType);
    if (button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (button_plus) {
      x = 0;
      if (birdType >= 5)      //проверяем, если выше или равно 5,
        EEPROM_write(17, 0);  //пишем в память 0
      else EEPROM_write(17, birdType + 1);
      lcd.clear();
    }
    if (button_minus) {
      x = 0;
      if (birdType <= 0)      //проверяем, если ниже или равно 0,
        EEPROM_write(17, 5);  //пишем в память 5
      else EEPROM_write(17, birdType - 1);
      lcd.clear();
    }
    birdSelect();
    lcd.setCursor(6, 0);
    lcd.print(birdPrint);
    lcd.setCursor(1, 1);
    lcd.print("minus NEXT plus");
    delay(del);
  }
}

//выбираем из памяти птицу///////////////////////////////////////
void birdSelect() {
  int birdType;
  EEPROM_read(17, birdType);
  lcd.setCursor(2, 0);
  lcd.print("BIRD - ");
  switch (birdType) {
    case 0:
      //lcd.print("CHICK");  // курица
      birdPrint = "CHICK";
      break;
    case 1:
      //lcd.print("QUAIL");  // перепелка
      birdPrint = "QUAIL";
      break;
    case 2:
      //lcd.print("DUCK");   // утка
      birdPrint = "DUCK";
      break;
    case 3:
      //lcd.print("MUSKUS");  // индоутка
      birdPrint = "MUSKUS";
      break;
    case 4:
      //lcd.print("GOOSE");  // гусь
      birdPrint = "GOOSE";
      break;
    case 5:
      //lcd.print("TURKEY"); // индюк
      birdPrint = "TURKEY";
      break;
  }
}

//устанавливаем поворот/////////////////////////////////////////////////
void turn_setup() {
  int turnPeriod;

  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("TURN SETUP");
  delay(1000);
  lcd.clear();
  int x = 0;
  while (1) {
    x++;
    if (x > interval) {
      break;
    }
    button_read();
    EEPROM_read(11, turnPeriod);
    if (button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (button_plus) {
      x = 0;
      EEPROM_write(11, turnPeriod + 1);
      if (turnPeriod >= 13) {     //проверяем, если выше 13,
        EEPROM_write(11, 13);  //пишем в память 13
      }
      lcd.clear();
    }
    if (button_minus) {
      x = 0;
      EEPROM_write(11, turnPeriod - 1);
      if (turnPeriod <= 0) {     //проверяем, если ниже 0,
        EEPROM_write(11, 0);  //пишем в память 0
      }
      lcd.clear();
    }
    EEPROM_read(11, turnPeriod);
    lcd.setCursor(0, 0);
    lcd.print("PERIOD = ");
    if (turnPeriod < 13)lcd.print(turnPeriod);
    if (turnPeriod > 12) lcd.print("RND");
    lcd.print(" Hour");
    lcd.setCursor(1, 1);
    lcd.print("minus NEXT plus");
    delay(del);
  }
}


//устанавливаем сигнализацию///////////////////////////////////////////////////////////////
void alarm_setup() {
  float alarmTemp;
  delay(del);
  button_read();
  lcd.setCursor(4, 0);
  lcd.print("ALARM SETUP");
  delay(1000);
  lcd.clear();
  int x = 0;
  while (1) {
    x++;
    if (x > interval) break;
    button_read();
    EEPROM_read(5, alarmTemp);
    if (button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (button_plus) {
      x = 0;
      if (alarmTemp >= 10.0)      //проверяем, если больше или равно 10,
        EEPROM_write(5, 10.0);  //пишем в память 10
      else EEPROM_write(5, alarmTemp + 0.1);
    }
    if (button_minus) {
      x = 0;
      if (alarmTemp <= 1.0)     //проверяем, если ниже 1,
        EEPROM_write(5, 1.0);  //пишем в память 1
      else EEPROM_write(5, alarmTemp - 0.1);
    }
    lcd.setCursor(1, 0);
    lcd.print("T.Alarm +-");
    lcd.print(alarmTemp, 1);
    lcd.print((char)223);
    lcd.print("C  ");
    lcd.setCursor(1, 1);
    lcd.print("minus NEXT plus");
    delay(del);
  }
}


//устанавливаем вентиляцию///////////////////////////////////////////////////////////
void vent_setup() {
  boolean fanEnable;
  delay(del);
  button_read();
  lcd.setCursor(3, 0);
  lcd.print("A.FAN SETUP");
  delay(1000);
  lcd.clear();
  int x = 0;
  while (1) {
    x++;
    if (x > interval) break;
    button_read();
    EEPROM_read(9, fanEnable);
    if (fanEnable > 1) fanEnable = 1;
    if (button_enter) {
      delay(del);
      lcd.clear(); //очищаем экран
      break;
    }
    if (button_minus) {
      x = 0;
      EEPROM_write(9, 0);  //пишем в память 0, не включаем принудительную вентиляцию при превышении температуры
    }
    if (button_plus) {
      x = 0;
      EEPROM_write(9, 1);  //пишем в память 1, включаем принудительную вентиляцию при превышении температуры
    }
    lcd.setCursor(2, 0);
    lcd.print("Ext.Fan ");
    if (fanEnable == 0) lcd.print("disable");
    else lcd.print("enable ");
    lcd.setCursor(2, 1);
    lcd.print("OFF  NEXT  ON");
    delay(del);
  }
}


/// читаем датчики //////////////////////////////////////////////////////
void getSensors() {
  unsigned long curMillis = millis();          // Получаем текущее время работы
  if (curMillis - trhMillis >= TRHSTEP) {    // время для нового измерения?
    sensors.requestTemperatures();
    temp1Ink = sensors.getTempCByIndex(0);
    if (temp1Ink == -127.0) temp1Ink = 85.0;
  }
  if (curMillis - trhMillis >= TRHSTEP * 4) {    // время для нового измерения?
    measActive = true;
    measType = TEMP;
    sht.meas(TEMP, &rawData, NONBLOCK);        // измеряем температуру.
    trhMillis = curMillis;
  }
  if (measActive && sht.measRdy()) {           // проверяем статус измерения
    if (measType == TEMP) {                    // обрабатываем температуру или влажность?
      measType = HUMI;
      temp2Ink = sht.calcTemp(rawData);     // Конвертируем сырые данные с сенсора
      temp2Ink = (temp2Ink + (T_correction)); // Корректируем показания текрмометра
      sht.meas(HUMI, &rawData, NONBLOCK);      // измеряем влажность
    }
    else {
      measActive = false;
      humidity = sht.calcHumi(rawData, temp2Ink); // конвертируем данные с сенсора
      //dewpoint = sht.calcDewpoint(humidity, temp2Ink);
    }
  }
}


//используем терморегулятор ////////////////////////////////////////////
void thermostat(float tempPoint, float set_humidity) {
  DateTime now = RTC.now();
  unsigned long now1 = millis();
  float alarmTemp;
  EEPROM_read(5, alarmTemp);
  if (digitalRead(door_pin)) { //дверь закрыта *для концевика закрыто - разомкнуто
    myPID.SetMode(AUTOMATIC);
    heater_off = false;
  }
  else { //дверь открыта
    heater_off = true;
    alarmDelay = millis();
    myPID.SetMode(MANUAL);
    Output = 300;
  }
  Setpoint = tempPoint;
  myPID.Compute();
  if (now1 - windowStartTime > WindowSize) { //время для перещелкивания периода окна
    windowStartTime = windowStartTime + WindowSize;
    //voltmeter();                        //запускаем функцию измерения напряжения
    Input = temp1Ink;
    lcd.setCursor(0, 0);                 // устанавливаем курсор в 0-ом столбце, 0 строка (начинается с 0)
    lcd.print("T1=");
    lcd.print(temp1Ink, 1);              // печать температуры на дисплей
    lcd.print((char)223);
    lcd.setCursor(9, 0);
    lcd.print("H=");
    lcd.print(humidity, 1);           // печать влажности на дисплей
    //lcd.print("%");
    lcd.print(" ");
    lcd.print("D");
    if (currentDay > 100) lcd.print("99");
    else lcd.print(currentDay);      // текущий день инкубации
    lcd.setCursor(0, 1);
    lcd.print("t");
    lcd.print(Setpoint, 1);
    lcd.setCursor(6, 1);
    lcd.print("h");
    lcd.print(set_humidity, 1);
    lcd.setCursor(13, 1);
    lcd.print("[");
    if (RTC.isrunning()) {
      if (now.hour() < 10) lcd.print(" ");
      lcd.print(now.hour(), DEC);
      lcd.print(":");
      if (now.minute() < 10)lcd.print(0);
      lcd.print(now.minute(), DEC);
    }
    lcd.setCursor(19, 1);
    lcd.print("]");
    lcd.setCursor(0, 2);
    lcd.print("T2=");
    lcd.print(temp2Ink, 1);            // печать температуры на дисплей
    lcd.print((char)223);
    lcd.setCursor(9, 2);
    lcd.print("*t");
    lcd.print(temp1Ink - temp2Ink, 1);
    lcd.setCursor(16, 2);
    lcd.print("W");
    if (Output > 990) lcd.print("99");
    else lcd.print(Output / 10, 0);
    lcd.print("%");
    lcd.setCursor(0, 3);
    lcd.print(birdPrint);
    lcd.setCursor(7, 3);
    lcd.print("Al+-");
    lcd.print(alarmTemp, 1);

  }
  if (Output > (now1 - windowStartTime) && temp1Ink < 39.9 && heater_off == false) digitalWrite(heater_pin, HIGH);
  else digitalWrite(heater_pin, LOW);
}


//управляем влажностью///////////////////////////////////////////////////////////////
void humidifer(float set_humidity) {
  //float humidity;
  unsigned long humMillis = 0;
  unsigned long curMillis = millis();
  //  if (curMillis - humMillis >= humStep) {
  //    humMillis = curMillis;
  //    //humidity = sht1x.readHumidity();
  //  }
  if (set_humidity > humidity) digitalWrite(humidifer_pin, HIGH); //сравниваем измеренную влажность с заданной
  if (set_humidity < humidity + h_histeresis) digitalWrite(humidifer_pin, LOW);
}


//управляем поворотом///////////////////////////////////////////////////////////////////
void turn(boolean needTurn) {
  int turnPeriod;                //период поворота лотков в часах
  int turnCommand;
  EEPROM_read(11, turnPeriod);
  //lcd.setCursor(10, 3);
  //lcd.print("P");
  //lcd.print(turnPeriod);
  lcd.setCursor(15, 3);
  lcd.print("R");
  if (turnPeriod == 0)
  { lcd.print(" OFF ");
    return;           //если нулевой период поворота, то не поворачиваем яйца.
  }
  if (turnPeriod < 13) turnCommand = turnPeriod;
  else if (turnPeriod > 12 && turnFlag == 0) { //если произошел поворот (сброшен флаг) и значение в памяти 13, то
    turnCommand = random(1, 6);        //берем случайное значение часов 1-6
    turnFlag = 1;                     //защелкиваем флаг вычисления случайных значений до следующего поворота
  }
  currentTime = millis() / 1000;


  lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
  lcd.print("m");

  if (needTurn == true) {
    if (currentTime > (loopTime + turnCommand * 3600UL)) {  // 3600000 сравниваем текущий таймер с переменной loopTime + период поворота в часах.
      digitalWrite(turn_pin, !digitalRead(turn_pin));       // включаем/выключаем реле поворота
      loopTime = currentTime;    // в loopTime записываем новое значение
      turnFlag = 0;    //сбрасываем флаг поворота
    }
    //lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
    //lcd.print(" ");
  }
}


//управляем авариями///////////////////////////////////////////////////////////////
void alarm(float needTemp) {
  float tempInk = sensors.getTempCByIndex(0);
  float alarmTemp;
  boolean fanState;
  EEPROM_read(5, alarmTemp);
  EEPROM_read(9, fanState);
  //lcd.setCursor(0, 3);
  //lcd.print("A");
  //lcd.print(needTemp + alarmTemp, 1);
  if ((millis() - alarmDelay) > 1800000) {
    if (tempInk > (needTemp + alarmTemp) || tempInk < (needTemp - alarmTemp)) {
      beeper(10);
      digitalWrite(alarm_pin, LOW); //если измеренная температура выше заданной на величину аварии
    }
    else digitalWrite(alarm_pin, HIGH); //то включаем аварийный сигнал.
  }
  if (tempInk > (needTemp + alarmTemp) && fanState == 1) needFan = 1;
  if (tempInk < (needTemp + alarmTemp - 2)) needFan = 0;
}


//пищалка////////////////////////////////////////////////////////////////////////
void beeper(int duration) {
  tone(beeper_pin, 2000, duration);
}


//управляем вентиляторами///////////////////////////////////////////////////////
void fan(int fanTime) {
  //float tempInk = sht1x.readTemperatureC();
  DateTime now = RTC.now();
  if ((now.hour() == 7 && now.minute() < fanTime) || (now.hour() == 19 && now.minute() < fanTime) || needFan == 1) {
    digitalWrite(fan_pin, LOW);
    //если наступило время проветривания или измеренная температура выше заданной на величину аварии, то включаем продувку.
    digitalWrite(extend_heater_pin, HIGH);  // при этом отключаем обогрев
    digitalWrite(heater_pin, LOW);
    heater_off = true;
  }
  else {
    digitalWrite(fan_pin, HIGH); //иначе выключаем.
    heater_off = false;
  }
}

// вольтметр//////////////////////////////////////////////////////////////////////////////
//void voltmeter() {
//  float outputValue = 0;
//  outputValue = float(analogRead(voltmeter_pin)) / 63, 9;
//  //if(outputValue < 4.5) beeper(50);
//  //Serial.print("Voltage = " );
//  //Serial.println(outputValue);
//  lcd.setCursor(14, 3);
//  lcd.print("V");
//  lcd.print(outputValue, 1);
//}
//
//// Печать мощности нагрвателя
//void outpuPower() {
//  lcd.setCursor(14, 3);
//  lcd.print("W");
//  lcd.print(Output, 0);
//  lcd.print(" ");
//}


// дополнительный нагреватель /////////////////////////////////////////////////////////////
void ext_heater(float needTemp) { // управление дополнительным нагревателем на 8 ножке через блок реле.
  float tempInk = sensors.getTempCByIndex(0);
  if (tempInk < (needTemp - 3) && heater_off == false) digitalWrite(extend_heater_pin, LOW);
  else digitalWrite(extend_heater_pin, HIGH);
}


/********************************************
   ПИД и отсылка данных в порт
 ********************************************/

union {                // This Data structure lets
  byte asBytes[24];    // us take the byte array
  float asFloat[6];    // sent from processing and
}                      // easily convert it to a
foo;                   // float array
void SerialReceive()
{
  // read the bytes sent from Processing
  int index = 0;
  byte Auto_Man = -1;
  byte Direct_Reverse = -1;
  while (Serial.available() && index < 26)  {
    if (index == 0) Auto_Man = Serial.read();
    else if (index == 1) Direct_Reverse = Serial.read();
    else foo.asBytes[index - 2] = Serial.read();
    index++;
  }
  // if the information we got was in the correct format,
  // read it into the system
  if (index == 26  && (Auto_Man == 0 || Auto_Man == 1) && (Direct_Reverse == 0 || Direct_Reverse == 1))
  {
    Setpoint = double(foo.asFloat[0]);
    //Input=double(foo.asFloat[1]);       // * the user has the ability to send the
    //   value of "Input"  in most cases (as
    //   in this one) this is not needed.
    if (Auto_Man == 0)                    // * only change the output if we are in
    { //   manual mode.  otherwise we'll get an
      Output = double(foo.asFloat[2]);    //   output blip, then the controller will
    }                                     //   overwrite.
    double p, i, d;                       // * read in and set the controller tunings
    p = double(foo.asFloat[3]);           //
    i = double(foo.asFloat[4]);           //
    d = double(foo.asFloat[5]);           //
    myPID.SetTunings(p, i, d);            //
    if (Auto_Man == 0) myPID.SetMode(MANUAL); // * set the controller mode
    else myPID.SetMode(AUTOMATIC);             //
    if (Direct_Reverse == 0) myPID.SetControllerDirection(DIRECT); // * set the controller Direction
    else myPID.SetControllerDirection(REVERSE);          //
  }
  Serial.flush();                         // * clear any random data from the serial buffer
}


/// шлем данные в порт //////////////////////////////////////////////
void SerialSend() {
  //Serial.print(millis() / 1000);
  //  Serial.print("PID ");
  //  Serial.print(Setpoint);
  //  Serial.print(" ");
  //  Serial.print(Input);
  //  Serial.print(" ");
  //  Serial.print(Output);
  //  Serial.print(" ");
  //  Serial.print(myPID.GetKp());
  //  Serial.print(" ");
  //  Serial.print(myPID.GetKi());
  //  Serial.print(" ");
  //  Serial.print(myPID.GetKd());
  //  Serial.print(" ");
  //  if (myPID.GetMode() == AUTOMATIC) Serial.print("Automatic");
  //  else Serial.print("Manual");
  //  Serial.print(" ");
  //  if (myPID.GetDirection() == DIRECT) Serial.println("Direct");
  //  else Serial.println("Reverse");

  delay(5);
  Serial.print("~Mink/set ");
  Serial.print(Setpoint);
  Serial.print("^~Mink/outpwr ");
  Serial.print(Output / 10);
  Serial.print("^~Mink/t1 ");
  Serial.print(temp1Ink);
  Serial.print("^~Mink/t2 ");
  Serial.print(temp2Ink);
  Serial.print("^~Mink/hum ");

  Serial.println(humidity);

  //Serial.print("^~Mink/alarm ");
  //Serial.print(digitalRead(alarm_pin));
  //Serial.print("^~Mink/extheat ");

  //Serial.print(digitalRead(extend_heater_pin));
  //Serial.print("^~Mink/fan ");
  //Serial.print(digitalRead(fan_pin));

  //Serial.print("^~Mink/door ");
  //Serial.println(!digitalRead(door_pin));
}

И ошибки

Arduino: 1.8.5 (Windows XP), Плата:"Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void loop()':
 
SmartInkubatorV2_4F_auto_all_bird_btn:183: error: 'EEPROM_read' was not declared in this scope
 
   EEPROM_read(1, startDayUnixtime);
 
   ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:183:3: note: suggested alternative: 'EEPROM'
 
   EEPROM_read(1, startDayUnixtime);
 
   ^~~~~~~~~~~
 
   EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:188:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (currentDay < r_array[bird][d][0]) {
 
         ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void startInk()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:265:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:267: error: 'EEPROM_read' was not declared in this scope
 
     EEPROM_read(1, memoryDay);
 
     ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:267:5: note: suggested alternative: 'EEPROM'
 
     EEPROM_read(1, memoryDay);
 
     ^~~~~~~~~~~
 
     EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:279: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(1, currentTime_day);
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:279:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(1, currentTime_day);
 
       ^~~~~~~~~~~~
 
       EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:283: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(1, memoryDay - 1);
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:283:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(1, memoryDay - 1);
 
       ^~~~~~~~~~~~
 
       EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void bird_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:310:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) {
 
         ~~^~~~~~~~~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:314: error: 'EEPROM_read' was not declared in this scope
 
     EEPROM_read(17, birdType);
 
     ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:314:5: note: suggested alternative: 'EEPROM'
 
     EEPROM_read(17, birdType);
 
     ^~~~~~~~~~~
 
     EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:323: error: 'EEPROM_write' was not declared in this scope
 
         EEPROM_write(17, 0);  //пишем в память 0
 
         ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:323:9: note: suggested alternative: 'EEPROM'
 
         EEPROM_write(17, 0);  //пишем в память 0
 
         ^~~~~~~~~~~~
 
         EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:324: error: 'EEPROM_write' was not declared in this scope
 
       else EEPROM_write(17, birdType + 1);
 
            ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:324:12: note: suggested alternative: 'EEPROM'
 
       else EEPROM_write(17, birdType + 1);
 
            ^~~~~~~~~~~~
 
            EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:330: error: 'EEPROM_write' was not declared in this scope
 
         EEPROM_write(17, 5);  //пишем в память 5
 
         ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:330:9: note: suggested alternative: 'EEPROM'
 
         EEPROM_write(17, 5);  //пишем в память 5
 
         ^~~~~~~~~~~~
 
         EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:331: error: 'EEPROM_write' was not declared in this scope
 
       else EEPROM_write(17, birdType - 1);
 
            ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:331:12: note: suggested alternative: 'EEPROM'
 
       else EEPROM_write(17, birdType - 1);
 
            ^~~~~~~~~~~~
 
            EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void birdSelect()':
 
SmartInkubatorV2_4F_auto_all_bird_btn:346: error: 'EEPROM_read' was not declared in this scope
 
   EEPROM_read(17, birdType);
 
   ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:346:3: note: suggested alternative: 'EEPROM'
 
   EEPROM_read(17, birdType);
 
   ^~~~~~~~~~~
 
   EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void turn_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:390:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) {
 
         ~~^~~~~~~~~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:394: error: 'EEPROM_read' was not declared in this scope
 
     EEPROM_read(11, turnPeriod);
 
     ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:394:5: note: suggested alternative: 'EEPROM'
 
     EEPROM_read(11, turnPeriod);
 
     ^~~~~~~~~~~
 
     EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:402: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(11, turnPeriod + 1);
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:402:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(11, turnPeriod + 1);
 
       ^~~~~~~~~~~~
 
       EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:410: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(11, turnPeriod - 1);
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:410:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(11, turnPeriod - 1);
 
       ^~~~~~~~~~~~
 
       EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void alarm_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:441:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:443: error: 'EEPROM_read' was not declared in this scope
 
     EEPROM_read(5, alarmTemp);
 
     ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:443:5: note: suggested alternative: 'EEPROM'
 
     EEPROM_read(5, alarmTemp);
 
     ^~~~~~~~~~~
 
     EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:452: error: 'EEPROM_write' was not declared in this scope
 
         EEPROM_write(5, 10.0);  //пишем в память 10
 
         ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:452:9: note: suggested alternative: 'EEPROM'
 
         EEPROM_write(5, 10.0);  //пишем в память 10
 
         ^~~~~~~~~~~~
 
         EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:453: error: 'EEPROM_write' was not declared in this scope
 
       else EEPROM_write(5, alarmTemp + 0.1);
 
            ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:453:12: note: suggested alternative: 'EEPROM'
 
       else EEPROM_write(5, alarmTemp + 0.1);
 
            ^~~~~~~~~~~~
 
            EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:458: error: 'EEPROM_write' was not declared in this scope
 
         EEPROM_write(5, 1.0);  //пишем в память 1
 
         ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:458:9: note: suggested alternative: 'EEPROM'
 
         EEPROM_write(5, 1.0);  //пишем в память 1
 
         ^~~~~~~~~~~~
 
         EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:459: error: 'EEPROM_write' was not declared in this scope
 
       else EEPROM_write(5, alarmTemp - 0.1);
 
            ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:459:12: note: suggested alternative: 'EEPROM'
 
       else EEPROM_write(5, alarmTemp - 0.1);
 
            ^~~~~~~~~~~~
 
            EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void vent_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:485:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:487: error: 'EEPROM_read' was not declared in this scope
 
     EEPROM_read(9, fanEnable);
 
     ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:487:5: note: suggested alternative: 'EEPROM'
 
     EEPROM_read(9, fanEnable);
 
     ^~~~~~~~~~~
 
     EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:488:19: warning: comparison of constant '1' with boolean expression is always false [-Wbool-compare]
 
     if (fanEnable > 1) fanEnable = 1;
 
         ~~~~~~~~~~^~~
 
SmartInkubatorV2_4F_auto_all_bird_btn:496: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(9, 0);  //пишем в память 0, не включаем принудительную вентиляцию при превышении температуры
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:496:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(9, 0);  //пишем в память 0, не включаем принудительную вентиляцию при превышении температуры
 
       ^~~~~~~~~~~~
 
       EEPROM
 
SmartInkubatorV2_4F_auto_all_bird_btn:500: error: 'EEPROM_write' was not declared in this scope
 
       EEPROM_write(9, 1);  //пишем в память 1, включаем принудительную вентиляцию при превышении температуры
 
       ^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:500:7: note: suggested alternative: 'EEPROM'
 
       EEPROM_write(9, 1);  //пишем в память 1, включаем принудительную вентиляцию при превышении температуры
 
       ^~~~~~~~~~~~
 
       EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void thermostat(float, float)':
 
SmartInkubatorV2_4F_auto_all_bird_btn:548: error: 'EEPROM_read' was not declared in this scope
 
   EEPROM_read(5, alarmTemp);
 
   ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:548:3: note: suggested alternative: 'EEPROM'
 
   EEPROM_read(5, alarmTemp);
 
   ^~~~~~~~~~~
 
   EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:561:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
   if (now1 - windowStartTime > WindowSize) { //время для перещелкивания периода окна
 
       ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void humidifer(float)':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:621:17: warning: unused variable 'humMillis' [-Wunused-variable]
 
   unsigned long humMillis = 0;
 
                 ^~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:622:17: warning: unused variable 'curMillis' [-Wunused-variable]
 
   unsigned long curMillis = millis();
 
                 ^~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void turn(boolean)':
 
SmartInkubatorV2_4F_auto_all_bird_btn:636: error: 'EEPROM_read' was not declared in this scope
 
   EEPROM_read(11, turnPeriod);
 
   ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:636:3: note: suggested alternative: 'EEPROM'
 
   EEPROM_read(11, turnPeriod);
 
   ^~~~~~~~~~~
 
   EEPROM
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void alarm(float)':
 
SmartInkubatorV2_4F_auto_all_bird_btn:674: error: 'EEPROM_read' was not declared in this scope
 
   EEPROM_read(5, alarmTemp);
 
   ^~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_792902\SmartInkubatorV2_4F_auto_all_bird_btn.ino:674:3: note: suggested alternative: 'EEPROM'
 
   EEPROM_read(5, alarmTemp);
 
   ^~~~~~~~~~~
 
   EEPROM
 
exit status 1
'EEPROM_read' was not declared in this scope
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
sadman41
Offline
Зарегистрирован: 19.10.2016

http://www.freeduino.ru/arduino/sample_EEPROM.html
EEPROM2 скачайте и замените ею существующую в каталоге libraries

Jovani
Offline
Зарегистрирован: 21.02.2020

Сделано ошибка пропала но всё равно ошибка компиляции 

Arduino: 1.8.5 (Windows XP), Плата:"Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"
 
Изменены опции сборки, пересобираем все
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void loop()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:188:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (currentDay < r_array[bird][d][0]) {
 
         ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void startInk()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:265:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void bird_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:310:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) {
 
         ~~^~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void turn_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:390:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) {
 
         ~~^~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void alarm_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:441:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void vent_setup()':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:485:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (x > interval) break;
 
         ~~^~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:488:19: warning: comparison of constant '1' with boolean expression is always false [-Wbool-compare]
 
     if (fanEnable > 1) fanEnable = 1;
 
         ~~~~~~~~~~^~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void thermostat(float, float)':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:561:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
   if (now1 - windowStartTime > WindowSize) { //время для перещелкивания периода окна
 
       ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino: In function 'void humidifer(float)':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:621:17: warning: unused variable 'humMillis' [-Wunused-variable]
 
   unsigned long humMillis = 0;
 
                 ^~~~~~~~~
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:622:17: warning: unused variable 'curMillis' [-Wunused-variable]
 
   unsigned long curMillis = millis();
 
                 ^~~~~~~~~
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp: In constructor 'DateTime::DateTime(uint32_t)':
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp:175:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
     if (days < 365 + leap)
 
         ~~~~~^~~~~~~~~~~~
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp: In member function 'char* DateTime::toString(char*)':
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp:314:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 
   for(int i=0;i<strlen(buffer)-1;i++){
 
               ~^~~~~~~~~~~~~~~~~
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp:344:6: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
 
     }else
 
      ^~~~
 
E:\arduino-1.8.5\libraries\RTClib-master\RTClib.cpp:349:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
 
   if(buffer[i] == 'Y'&& buffer[i+1] == 'Y'&& buffer[i+2] == 'Y'&& buffer[i+3] == 'Y'){
 
   ^~
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp: In member function 'uint8_t Sensirion::measure(float*, float*, float*)':
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp:101:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 
   if (error = measTemp(&rawData))
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp:104:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 
   if (error = measHumi(&rawData))
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp: In member function 'uint8_t Sensirion::meas(uint8_t, uint16_t*, bool)':
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp:122:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 
   if (error = putByte(cmd))
 
       ~~~~~~^~~~~~~~~~~~~~
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp: In member function 'uint8_t Sensirion::writeSR(uint8_t)':
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp:188:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 
   if (error = putByte(STAT_REG_W))
 
       ~~~~~~^~~~~~~~~~~~~~~~~~~~~
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp: In member function 'uint8_t Sensirion::readSR(uint8_t*)':
 
E:\arduino-1.8.5\libraries\Sensirion-master\Sensirion.cpp:201:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
 
   if (error = putByte(STAT_REG_R)) {
 
       ~~~~~~^~~~~~~~~~~~~~~~~~~~~
 
C:\Documents and Settings\Admin\Local Settings\Application Data\Arduino15\packages\arduino\hardware\avr\1.8.2\cores\arduino\main.cpp: In function 'main':
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:654:51: warning: 'turnCommand' may be used uninitialized in this function [-Wmaybe-uninitialized]
 
   lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
 
                                                   ^
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_modified_sketch_332566\SmartInkubatorV2_4F_auto_all_bird_btn.ino:635:7: note: 'turnCommand' was declared here
 
   int turnCommand;
 
       ^
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `readScratchPad':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:179: undefined reference to `OneWire::reset()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:183: undefined reference to `OneWire::select(unsigned char const*)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:184: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:200: undefined reference to `OneWire::read()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:203: undefined reference to `OneWire::reset()'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `isConnected':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:172: undefined reference to `OneWire::crc8(unsigned char const*, unsigned char)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `getAddress':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:147: undefined reference to `OneWire::reset_search()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:149: undefined reference to `OneWire::search(unsigned char*)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `validAddress':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:138: undefined reference to `OneWire::crc8(unsigned char const*, unsigned char)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `global constructors keyed to 65535_0_SmartInkubatorV2_4F_auto_all_bird_btn.ino.cpp.o.3046':
 
<artificial>:(.text.startup+0x146): undefined reference to `OneWire::OneWire(unsigned char)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `begin':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:105: undefined reference to `OneWire::reset_search()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:109: undefined reference to `OneWire::search(unsigned char*)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `validAddress':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:138: undefined reference to `OneWire::crc8(unsigned char const*, unsigned char)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `readPowerSupply':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:239: undefined reference to `OneWire::reset()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:240: undefined reference to `OneWire::select(unsigned char const*)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:241: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:242: undefined reference to `OneWire::read_bit()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:244: undefined reference to `OneWire::reset()'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `writeScratchPad':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:210: undefined reference to `OneWire::reset()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:211: undefined reference to `OneWire::select(unsigned char const*)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:212: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:213: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:214: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:218: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:220: undefined reference to `OneWire::reset()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:223: undefined reference to `OneWire::select(unsigned char const*)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:224: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:232: undefined reference to `OneWire::reset()'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `requestTemperatures':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:385: undefined reference to `OneWire::reset()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:386: undefined reference to `OneWire::skip()'
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:387: undefined reference to `OneWire::write(unsigned char, unsigned char)'
 
C:\DOCUME~1\Admin\LOCALS~1\Temp\ccsWoIDk.ltrans0.ltrans.o: In function `isConversionComplete':
 
E:\arduino-1.8.5\libraries\Arduino-Temperature-Control-Library-master/DallasTemperature.cpp:378: undefined reference to `OneWire::read_bit()'
 
collect2.exe: error: ld returned 1 exit status
 
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini.
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Видимо Onewire ещё не установлен.

Jovani
Offline
Зарегистрирован: 21.02.2020

В ардуино есть  E:\arduino-1.8.5\libraries\OneWire сейчас попробую отыскать новую версию

Jovani
Offline
Зарегистрирован: 21.02.2020

Спасибо большое и от меня и от детишек проблема решена скачал новую версию библиотеки OneWire  и всё в порядке-кампиляция завершина :) Неплохо было бы для подростающего поколения на форуме сотворить специально тему для различного рода проектов так сказать на будущее.Могу поделится проектом електропастуха на ардуинке и простого сторожа на сенсорной кнопке и реле если что :) больше ничего не успели сделать:)))) Эщё раз благодарю вас от души .

sadman41
Offline
Зарегистрирован: 19.10.2016

Для средней величины проектов есть соответствующий раздел. А для мелких... Надо у модераторов интересоваться - захотят они такую тему тащить или нет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Если б еще учитель был грамотный... 

b707
Offline
Зарегистрирован: 26.05.2017

Jovani пишет:

Могу поделится проектом електропастуха на ардуинке и простого сторожа на сенсорной кнопке и реле если что :) больше ничего не успели сделать:))))

Какой смысл "делится" проектами , в которых вы ни буквы не понимаете? из гугля мы и сами можем скачать

Jovani
Offline
Зарегистрирован: 21.02.2020

Друзья с критикой в свою сторону я соглашусь к своему стыду.Но ведь согласитесь я честно попросил помощи у тех кто знает.Ведь я не сдался за пять секунд,а пробовал разобраться сам и поверьте это не совсем так и просто .К примеру и библиотеки я искал скачивал с гитхаба но почему то они у меня не заработали,и ИДЕ переустанавливал и новую версию и старую ,грешил на ошибку в коде программы,тем более код программы для меня очень сложный. Что касается проекта в котором я ничего не понимаю то во первых может быть кому и пригодится готовый вариант ,или кто то усовершенствует ,улучшит,а во вторых всё таки у меня получилось обьеденить три проекта ,хоть и с помощью подсказок  +знания по радиоелектронике и изготовить нормально действующий апарат,кстати в отличии от троих вариантов исходных ,мой вариант контролирует линию на обрыв полевиком  и не подставляет под удар статикой контролер, и самое главное что такой агрегат смогли сделать даже дети из сельской деревушки на краю света :) Да и с интернета скачать можно всё что угодно это верно но ведь мы словяне не нация рабов?Терморегулятор можно и купить 42грн= 2долара не цена ,а вот руками сделать не всем под силу неправда ли ?:) Ещё раз поблагодарю и за помощь и за науку.

sadman41
Offline
Зарегистрирован: 19.10.2016

А где не Украине край света? Просто я бывал на севере, где солнце встаёт в 11 утра, а садится в 14...  Но и и это не край света был.

Jovani
Offline
Зарегистрирован: 21.02.2020

Да это херсонская область степи таврии.