Не получается разбить скетч.

wenom86
Offline
Зарегистрирован: 04.11.2012

Здравствуйте. Проблема в том, что в процессе написания мой скетч разросся. Захотел его разбить по файлам в пределах одного проекта (папки с проектом). Сама папка с проектом называется "pogod_stanciya_v09".  В ардуиноIDE v1.0.5r2 есть кнопка справа с созданием новой вкладки. Нажал создание вкладки и появилось сообщение с вводом имени. назвал ""z_ekran". В папке появился этот файл с расширением ino. В программе появилась вкладка с этим названием. В главном скетче никакие дополнительные инклюды не прописывал. Затем я взял небольшой кусок кода из секции void_loop и перекинул в "z_ekran". При компиляции идут ошибки. Вставил этот код обратно - все скомпилировалось. Пробовал на разных учасиках кода. Также пробовал открывать в версии 1.6.0. Не могу понять, в чем дело.

Это основновной рабочий код:

//=================================================================================================
// НАЗВАНИЕ ПРОГРАММЫ: Погодная станция
// ВЕРСИЯ ПРОГРАММЫ: v0.7
// КОМПОНЕНТЫ:Датчик DS18b20 1 шт, Экран 1602 с подсветкой, резистор 4,7ком 1шт, датчик влажности DHT22. 
// ВЕРСИЯ ARDUINO IDE: 1.0.5 r2
// ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ: OneWire.h, Wire.h, LiquidCrystal.h, DS3231.h, DHT.h, 
// ФУНКЦИОНАЛ:
// а) 31.01.16 (+) Считывает текущую дату и время с RTC DS3231, а также отображает их на дисплее на главном экране (экране №1)
// б) 07.02.16 (+) Считывает нажатие кнопок клавиатуры, подключенной на аналоговый вход A5. (5 кнопок)  
// в) 08.02.16 (+) Считывает показания температуры с датчика 1 и отображает их на дисплее на экране №2 в строке Tnar
// г) 08.02.16 (-) v0.4 Добавлена возможность работы с eeprom на основе микросхемы 24с02
// д) 14.02.16 (-) v0.5 Перенос проекта на ардуино 2560. Подключен экран, аналог.клав-ра, 1 датчик темп.
// е) 05.03.16 (+) v0.6 Подключение 1 датчика температуры-влажности DHT22 ко 2 цифр. пину, теперь инф-я о темп. получается с него.
// ё) 13.03.16 (+) v0.7 Внедрение пид-регулирования для обогревателя в гараже. Добавлено сохранение данных в eeprom
// ж) 13.03.16 (+) v0.8 Переработан порядок следования по окнам экрана. Теперь можно выставить любую последовательность, какое окно за каким идет.

// ------
// ОСОБЕННОСТИ:ds18b20 запитан от шины на 5в./ DS3231 запитан от 5в./ 
//             контакт V0 экрана 1602 отвечает за контрастность. Подключил его к ШИМ-пину 9 ардуино.
// С ЧЕМ НУЖНО РАЗОБРАТЬСЯ: / исключить английский из комментариев.
// 
//=================================================================================================

#include <DS3231.h>             //библиотека часов
#include <OneWire.h>
#include <Wire.h>               // I2C
#include <LiquidCrystal.h>      // LCD
#include <DHT.h>                // для датчика темп-влажности.
#include <PID_v1.h>             // библиотека PID
#include <EEPROM.h>             // работа с eeprom, встроенным в ардуину.

#define DHTPIN 2                 // 1-й датчик температуры-влажности подключен к 2 цифр.пину. датчик в гараже
#define DHTPIN2 3                // 2-й датчик температуры-влажности подключен к 3 цифр.пину. датчик в подвале
#define DHTPIN3 4                // 3-й датчик температуры-влажности подключен к 4 цифр.пину. датчик на улице
DHT dht(DHTPIN, DHT22);         // Инициируем датчик, в данном случае DHT22, еслу будет DHT11, то строка примет вид: DHT dht(DHTPIN, DHT11);
int t1,h1,t2,h2,t3,h3;

#define PIN_OUTPUT 13           // ПИД: ПИН ВЫХОДНОГО СИГНАЛА1, 13 цифровой пин.
double Setpoint, Input, Output;  // ПИД: определение переменных
double aggKp=4, aggKi=0.2, aggKd=1;         // ПИД: параметры агрессивного режима
double consKp=1, consKi=0.05, consKd=0.25;  // ПИД: параметры консервативного режима
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);  //ПИД: указываем переменные и начальные параметры настройки
double gap;                      // Переключатель параметров;
int outPercente;                  // переменная пересчета шим в % мощьности. 

int ekran;         //переменная для выбора экрана меню
int m=0;           //переменная для экранов меню 

int tgarust = EEPROM.read(0);    // переменная для хранения желаемой температуры в гараже. Значение хранится в eeprom по адресу 0.
int tpodust = EEPROM.read(1);    // переменная для хранения желаемой температуры в подвале. Значение хранится в eeprom по адресу 1.
int TEMPgarMIN = EEPROM.read(2);    // переменная для хранения минимальной температуры в гараже. Значение хранится в eeprom по адресу 2.
int TEMPgarMAX = EEPROM.read(3);    // -//- максимальной температуры в гараже.
int TEMPpodMIN = EEPROM.read(4);    // -//- минимальной температуры в подвале.
int TEMPpodMAX = EEPROM.read(5);    // -//- максимальной температуры в подвале.
int timezero = EEPROM.read(6);      // значение времени автовозврата к главному экрану.

int r1=0;  // переменная состояния реле 1
int r2=0;  // -//- реле 2
int r3=0;  // -//- реле 3
int r4=0;  // -//- реле 4
int r5=0;  // -//- реле 5
int r6=0;  // -//- реле 6
int r7=0;  // -//- реле 7
int r8=0;  // -//- реле 8

int i=0;           //переменная для мигания на экране изменяемых величин.
int b,c=0;         //переменные для аналоговой клавиатуры.
int analogPin=2;   //пин А2 для аналоговой клавиатуры.

long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen (автоматического возврата к клавному экрану через определенное время)
long interval = 100000;   //задержка автовозврата к MainScreen 30сек


/*
OneWire ds (6); //Пин 6 для подключения датчика температуры по шине 1-wire
byte data[12];  //не знаю что это, пока.
byte addr1[8] = {0x28, 0x92, 0x15, 0xD6, 0x04, 0x00, 0x00, 0xF9}; // ID индивидуально для каждого датчика температуры, было считано 289215D6040000F9.
byte addr2[8] = {0x28, 0xFF, 0xA1, 0x9B, 0x67, 0x14, 0x04, 0xAA}; //!!! Этот id пока нигде не используется
byte addr3[8] = {0x28, 0xFF, 0xA1, 0x9B, 0x67, 0x14, 0x04, 0xAA}; //!!! Этот id пока нигде не используется

unsigned int raw;
float temp1, temp2, temp3;   //переменные для обозначенния температур.
*/

DS3231  rtc(20, 21); //шина, на которую подключены часы (для ардуино нано на 328 чипе, это пины A4/A5)(для меги - пины 20/21)

// LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);   // для УНО. пины подключения к экрану 1602A (A=5v/K=GND)(VSS+VO=GND/VDD=5v/RS=pin12/RW=pin11/E=pin10/D4=pin5/D5=pin4/D6=pin3/D7=pin2)
LiquidCrystal lcd(22, 28, 23, 24, 25, 26, 27);   // для МЕГИ 2560. (A=5v/K=GND)(VSS=GND/VDD=5v/RS=pin22/RW=pin28/E=pin23/D4=pin24/D5=pin25/D6=pin26/D7=pin27)

void setup(){

Input = t1;          //ПИД: получение показаний с датчика1 температуры-влажности.
Setpoint = tgarust;  //ПИД: берем значение из переменной устанавливаемой желаемой температуры гаража.
myPID.SetMode(AUTOMATIC); //ПИД: инициализация в автоматическом режиме.
  
Serial.begin(9600);  // инициализация сериал-монитора, для вывода любой инф-ии в порт.  

pinMode(9, OUTPUT);  //инициализируем 9 выход.
analogWrite(9, 100); // устанавливаем ШИМ-выход управления контрастностью дисплея на значение 100.

rtc.begin();       // инициализация часов на DS3231.
lcd.begin(16, 2);  // инициализация экрана (16 символов в 2 строках).

dht.begin();       // инициализация датчика температуры-влажности.

// Вывод приветствия 
lcd.setCursor(0, 0);
lcd.print( "Pogodnaya" ); // Вывод приветствия
lcd.setCursor(0, 1); 
lcd.print( "stanciya v0.9" );
delay (3000);            // Конец вывода приветствия+задержка.
}


void loop() {
  
float h1 = dht.readHumidity();     //переменная h1 для датчика 1 температуры-влажности.
float t1 = dht.readTemperature();  //переменная t1 для датчика 1 температуры-влажности.

unsigned long currentMillis = millis();         //начало отсчета цикла для возврата к главному экрану
if(currentMillis - previousMillis > interval)   //Если счетчик превысил интервал, 
{ m=0; }                                        //то возврат к главному экрану.


//=================================================================================================
//                   НАЧАЛО РАБОТЫ ПИД-РЕГУЛЯТОРА 1
//=================================================================================================
Input = t1;

  double gap = abs(Setpoint-Input); //distance away from setpoint
  if (gap < 3)
  {  //we're close to setpoint, use conservative tuning parameters
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
     //we're far from setpoint, use aggressive tuning parameters
     myPID.SetTunings(aggKp, aggKi, aggKd);
  }

  myPID.Compute();
  analogWrite(PIN_OUTPUT, Output);
  
  outPercente = (byte)(Output/255*100);// Считаем в процентах мощность вывода ШИМ для отображения на LCD;
  //=================================================================================================
//                   КОНЕЦ РАБОТЫ ПИД-РЕГУЛЯТОРА 1
//=================================================================================================


//=================================================================================================
//                   НАЧАЛО ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВВЕРХ/ВНИЗ.
//=================================================================================================
//Обработка нажатия NEXT (кнопка 3-вниз)
  if (b==3)
  {
  m++;//увеличиваем переменную уровня меню
  previousMillis = currentMillis; //если кнопка была нажата сбросить счетчик автовозврата к главному экрану
  delay (100);
  lcd.clear();
  if (m>18)       //если уровень больше ....
  {
  m=18;            //то оставаться на значении ......
  }
  }
  
//Обработка нажатия кнопки PREV (кнопка 1-вверх)
  if (b==1)
  {
  m--;
  previousMillis = currentMillis;
  delay (100);
  lcd.clear();
  if (m<0)          //если уровень меньше 0
  {
  m=0;              //то оставаться на 0.
  }
  }
//=================================================================================================
//                   КОНЕЦ ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВВЕРХ/ВНИЗ.
//=================================================================================================

//=================================================================================================
//                   НАЧАЛО ОБРАБОТКИ ВЫБОРА ОТОБРАЖАЕМОГО ЭКРАНА В ЗАВИСИМОСТИ ОТ ПЕРЕМЕННОЙ "m"
//=================================================================================================
if (m==0){ ekran = 0; }
if (m==1){ ekran = 1; }
if (m==2){ ekran = 2; }
if (m==3){ ekran = 3; }
if (m==4){ ekran = 14; }
if (m==5){ ekran = 16; }
if (m==6){ ekran = 17; }
if (m==7){ ekran = 11; }
if (m==8){ ekran = 12; }
if (m==9){ ekran = 13; }
if (m==10){ ekran = 4; }
if (m==11){ ekran = 5; }
if (m==12){ ekran = 6; }
if (m==13){ ekran = 7; }
if (m==14){ ekran = 8; }
if (m==15){ ekran = 9; }
if (m==16){ ekran = 10; }
if (m==17){ ekran = 15; }
if (m==18){ ekran = 18; }   //экран установки времени автовозврата к главному экрану.

//=================================================================================================
//                   НАЧАЛО ОБРАБОТКИ ВЫБОРА ОТОБРАЖАЕМОГО ЭКРАНА В ЗАВИСИМОСТИ ОТ ПЕРЕМЕННОЙ "m"
//=================================================================================================

//=================================================================================================
//                   НАЧАЛО ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВЛЕВО/ВПРАВО/ЦЕНТР.
//=================================================================================================
  // ---------------------------- ЭКРАН 0 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 1 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 2 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 3 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 4 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 5 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 6 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 7 (+) ------------------------------------
  if (b==2 && ekran==7) { TEMPgarMIN++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPgarMIN>50) { TEMPgarMIN=50; }}
  if (b==4 && ekran==7) { TEMPgarMIN--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPgarMIN<1){ TEMPgarMIN=1; }}
  
  // ---------------------------- ЭКРАН 8 (+) ------------------------------------
  if (b==2 && ekran==8) { TEMPgarMAX++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPgarMAX>50) { TEMPgarMAX=50; }}
  if (b==4 && ekran==8) { TEMPgarMAX--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPgarMAX<1){ TEMPgarMAX=1; }}
  
  // ---------------------------- ЭКРАН 9 (+) ------------------------------------
  if (b==2 && ekran==9) { TEMPpodMIN++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPpodMIN>50) { TEMPpodMIN=50; }}
  if (b==4 && ekran==9) { TEMPpodMIN--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPpodMIN<1){ TEMPpodMIN=1; }}
  
  // ---------------------------- ЭКРАН 10 (+) ------------------------------------
  if (b==2 && ekran==10) { TEMPpodMAX++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPpodMAX>50) { TEMPpodMAX=50; }}
  if (b==4 && ekran==10) { TEMPpodMAX--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (TEMPpodMAX<1){ TEMPpodMAX=1; }}
  
  // ---------------------------- ЭКРАН 11 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 12 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 13 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 14 (+) ------------------------------------
  if (b==2 && ekran==14)      //если находимся на экране 14, Обработка нажатия кнопки 2-вправо для экрана 
  {
  tgarust++;                  //то при нажатии кнопки вправо увеличиваем переменную tgarust на единицу
  previousMillis = currentMillis;
  delay (100);
  lcd.clear();
  if (tgarust>50) //устанавливаем предел изменения переменной = 50
  {               //если больше предела
  tgarust=50;     //то оставляем значение 50 (тут код условия что делать при достижении пределов)
  }
  }
  
  if (b==4 && ekran==14)       // аналогично Обработка нажатия кнопки 4-влево для экрана 14
  {
  tgarust--;      //то при нажатии кнопки вправо уменьшаем переменную tgarust на единицу
  previousMillis = currentMillis;
  delay (100);
  lcd.clear();
  if (tgarust<1) //устанавливаем предел изменения переменной = 1
  {              //если меньше предела
  tgarust=1;     //то оставляем значение 1 (тут код условия что делать при достижении пределов)
  }
  }
  
  // ---------------------------- ЭКРАН 15 (+) ------------------------------------
if (b==5 && ekran==15)          // если находимся на экране 15 и нажали клавишу 5-центр.
  {
  EEPROM.write(0, tgarust);     // запись всех обьявленных переменных в eeprom.
  EEPROM.write(1, tpodust);
  EEPROM.write(2, TEMPgarMIN);
  EEPROM.write(3, TEMPgarMAX);
  EEPROM.write(4, TEMPpodMIN);
  EEPROM.write(5, TEMPpodMAX);
  EEPROM.write(6, timezero);
  }
  
  // ---------------------------- ЭКРАН 16 (+) ------------------------------------
  if (b==2 && ekran==16) { tpodust++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (tpodust>50) { tpodust=50; }}
  if (b==4 && ekran==16) { tpodust--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (tpodust<1){ tpodust=1; }}
  
  // ---------------------------- ЭКРАН 17 (+) ------------------------------------
  //нет обработок для этого экрана
  
  // ---------------------------- ЭКРАН 18 (+) ------------------------------------
  if (b==2 && ekran==18) { timezero++; previousMillis = currentMillis; delay (100); lcd.clear();
  if (timezero>255) { timezero=255; }}
  if (b==4 && ekran==18) { timezero--; previousMillis = currentMillis; delay (100); lcd.clear();
  if (timezero<1){ timezero=1; }}
//=================================================================================================
//                   КОНЕЦ ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВЛЕВО/ВПРАВО/ЦЕНТР.
//================================================================================================= 

//=================================================================================================
//                   НАЧАЛО ВЫВОДА ЭКРАНОВ МЕНЮ, ОПИСАНИЕ ЭКРАНОВ
//=================================================================================================

if (ekran==0)                  //переменная ekran=0 (+), главный экран.
  {                            //отображаем
  lcd.setCursor(0, 0);  // ******************
  lcd.print("DATE: ");         // *DATE: 08.08.1976*
  lcd.print(rtc.getDateStr()); // *TIME: 22:08:54  *
  lcd.setCursor(0, 1);         // ******************
  lcd.print("TIME: ");         
  lcd.print(rtc.getTimeStr());
  lcd.setCursor(14, 1);         
  lcd.print("  ");
  } 
  
  
else if (ekran==1)              //переменная ekran=1 (+), экран 1
  {                             //отображаем
  lcd.setCursor(0, 0);          //*******************
  lcd.print("Tnar|Vnar|Pnar");  //*Tnar|Vnar|Pnar   *
  lcd.setCursor(0, 1);          //*30C |99% |745mm  *
  lcd.print(t1, 0);             //*******************
  lcd.print("c");
  lcd.setCursor(4, 1);          
  lcd.print("|");
  lcd.print(h1, 0); 
  lcd.print("%");  
  lcd.setCursor(9, 1);
  lcd.print("|");
  lcd.print(t1, 0);
  lcd.print("mm"); 
  }
  
  
else if (ekran==2)              //переменная ekran=2 (+), экран 2
  {                             //отображаем
  lcd.setCursor(0, 0);          //*******************
  lcd.print("Tgar|Vgar|");      //*Tgar|Vgar|       *
  lcd.setCursor(0, 1);          //*30C |99% |       *
  lcd.print(t1, 0);          //*******************
  lcd.print("C");
  lcd.setCursor(4, 1);          
  lcd.print("|");
  lcd.print(t1, 0);
  lcd.print("%");  
  lcd.setCursor(9, 1);
  lcd.print("|"); 
  }
  
  
else if (ekran==3)              //переменная ekran=3 (+), экран 3
  {                             //отображаем
  lcd.setCursor(0, 0);          //*******************
  lcd.print("Tpod|Vpod|");      //*Tpod|Vpod|       *
  lcd.setCursor(0, 1);          //*30C |99% |       *
  lcd.print(t1, 0);          //*******************
  lcd.print("C");
  lcd.setCursor(4, 1);          
  lcd.print("|");
  lcd.print(t1, 0);             
  lcd.print("%");
  lcd.setCursor(9, 1);
  lcd.print("|"); 
  }
  
  
else if (ekran==4)                    //переменная ekran=4 (-), экран 4
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("R1 |R2 |R3 |R4 |");      //*R1 |R2 |R3 |R4 | *
  lcd.setCursor(0, 1);                //*ON |OFF|OFF|ON | *                  
  if (r1==1) {lcd.print("ON");}       //*******************
  if (r1==0) {lcd.print("OFF");}
  lcd.setCursor(3, 1); 
  lcd.print("|");
  if (r2==1) {lcd.print("ON");}
  if (r2==0) {lcd.print("OFF");}
  lcd.setCursor(7, 1); 
  lcd.print("|");
  if (r3==1) {lcd.print("ON");}
  if (r3==0) {lcd.print("OFF");}
  lcd.setCursor(11, 1); 
  lcd.print("|");
  if (r4==1) {lcd.print("ON");}
  if (r4==0) {lcd.print("OFF");}
  lcd.setCursor(15, 1);
  lcd.print("|");
  }
  
  
else if (ekran==5)                    //переменная ekran=5 (-), экран 5
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("R5 |R6 |R7 |R8 |");      //*R5 |R6 |R7 |R8 | *
  lcd.setCursor(0, 1);                //*ON |OFF|OFF|ON | *                  
  if (r5==1) {lcd.print("ON");}       //*******************
  if (r5==0) {lcd.print("OFF");}
  lcd.setCursor(3, 1); 
  lcd.print("|");
  if (r6==1) {lcd.print("ON");}
  if (r6==0) {lcd.print("OFF");}
  lcd.setCursor(7, 1); 
  lcd.print("|");
  if (r7==1) {lcd.print("ON");}
  if (r7==0) {lcd.print("OFF");}
  lcd.setCursor(11, 1); 
  lcd.print("|");
  if (r8==1) {lcd.print("ON");}
  if (r8==0) {lcd.print("OFF");}
  lcd.setCursor(15, 1);
  lcd.print("|");
  }
  
else if (ekran==6)                    //переменная ekran=6 (+), экран 6
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print(" CONFIGURATION ");       //* CONFIGURATION *
  lcd.setCursor(0, 1);                //*   PARAMETER   *
  lcd.print("   PARAMETER   ");       //*******************
  }
  
else if (ekran==7)                    //переменная ekran=7 (-), экран 7
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("CONFIGURATION: ");       //*CONFIGURATION: *
  lcd.setCursor(0, 1);                //*TEMPgarMIN=    *
  lcd.print("TEMPgarMIN=");  //*******************
   if (i == 1) {lcd.print(TEMPgarMIN); }
   if (i == 0){ lcd.print("          "); }
  lcd.setCursor(16, 1);
  lcd.print("C");
  }
  
else if (ekran==8)                    //переменная ekran=8 (-), экран 8
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("CONFIGURATION: ");       //*CONFIGURATION: *
  lcd.setCursor(0, 1);                //*TEMPgarMAX=    *
  lcd.print("TEMPgarMAX=");           //*******************
  lcd.print(TEMPgarMAX);
  lcd.setCursor(16, 1);
  lcd.print("C");
  }


else if (ekran==9)                    //переменная ekran=9 (-), экран 9
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("CONFIGURATION: ");       //*CONFIGURATION: *
  lcd.setCursor(0, 1);                //*TEMPpodMIN=    *
  lcd.print("TEMPpodMIN=");           //*******************
  lcd.print(TEMPpodMIN);
  lcd.setCursor(16, 1);
  lcd.print("C");
  }
  
else if (ekran==10)                    //переменная ekran=10 (-), экран 10
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("CONFIGURATION: ");       //*CONFIGURATION: *
  lcd.setCursor(0, 1);                //*TEMPpodMAX=    *
  lcd.print("TEMPpodMAX=");           //*******************
  lcd.print(TEMPpodMAX);
  lcd.setCursor(16, 1);
  lcd.print("C");
  }  
  
else if (ekran==11)                    //переменная ekran=11 (-), экран 11
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("INFO: DHT22-gar");         //*CONF: DHT22-gar*
  lcd.setCursor(0, 1);                
  if (isnan(h1) || isnan(t1)) {
  Serial.println("NO SIGNAL");
  return;
  }
  lcd.print("H1:"); lcd.print(h1); lcd.print("%"); 
  lcd.print("T1:"); lcd.print(t1); lcd.print("*C");
  }
  
  
else if (ekran==12)                   //переменная ekran=12 (-), экран 12
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*******************
  lcd.print("INFO: DHT22-pod");         //*CONF: DHT22-pod*
  lcd.setCursor(0, 1);                
  if (isnan(h1) || isnan(t1)) {
  Serial.println("NO SIGNAL");
  return;
  }
  lcd.print("H1:"); lcd.print(h1); lcd.print("%"); 
  lcd.print("T1:"); lcd.print(t1); lcd.print("*C");
  }
  
  
else if (ekran==13)                      
  {                                   
  lcd.setCursor(0, 0);                
  lcd.print("INFO: DHT22-ulic");         
  lcd.setCursor(0, 1);                
  if (isnan(h1) || isnan(t1)) {
  Serial.println("NO SIGNAL");
  return;
  }
  lcd.print("H3:"); lcd.print(h1); lcd.print("%"); 
  lcd.print("T2:"); lcd.print(t1); lcd.print("*C");
  }
  
  
else if (ekran==14)                   //переменная ekran=14 (-), экран 14
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*Tgaraj=26/T=24,5*
  lcd.print("Tgaraj=");               //*Out=100%     OFF*
  lcd.print(tgarust);
  lcd.setCursor(9, 0);
  lcd.print("/T=");
  lcd.print(t1);
  lcd.setCursor(0, 1);
  lcd.print("Out=");
  lcd.print(outPercente);
  lcd.print("%");
  lcd.setCursor(13, 1);
  lcd.print("OFF");
  }
  
  
else if (ekran==15)                 //переменная ekran=15, экран 15
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*SAVE CONFIG:press*
  lcd.print("SAVE CONFIG:press");     //*center button*
  lcd.setCursor(0, 1);
  lcd.print("center button");
  }
  
else if (ekran==16)                   //переменная ekran=16 (-), экран 16
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*Tpod=26/T=24,5*
  lcd.print("Tpod=");                 //*Out=100%     OFF*
  lcd.print(tpodust);
  lcd.setCursor(9, 0);
  lcd.print("/T=");
  lcd.print(t1);
  lcd.setCursor(0, 1);
  lcd.print("Out=");
  lcd.print(outPercente);
  lcd.print("%");
  lcd.setCursor(13, 1);
  lcd.print("OFF");
  }  
  
 else if (ekran==17)                   //переменная ekran=17 (-), экран 17
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*INFORMATION*
  lcd.print("INFORMATION");  
  } 
  
  else if (ekran==18)                  //переменная ekran=18 (+), экран 18
  {                                   //отображаем
  lcd.setCursor(0, 0);                //*INFORMATION*
  lcd.print("TIMEzero="); 
  lcd.setCursor(9, 0);
  lcd.print(timezero); 
  lcd.setCursor(11, 1);
  lcd.print("minut");
  }
  
//=================================================================================================
//                   КОНЕЦ ВЫВОДА ЭКРАНОВ МЕНЮ, ОПИСАНИЕ ЭКРАНОВ
//=================================================================================================

//=================================================================================================
//                   НАЧАЛО СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ С ДАТЧИКОВ И ЕЁ ПРЕОБРАЗОВАНИЕ
//=================================================================================================    
/*  temp1 = DS18B20(addr1);
  temp2 = DS18B20(addr2);
  temp3 = DS18B20(addr3);
*/  
}

/*
float DS18B20(byte *adres)
{
  ds.reset();
  ds.select(adres);
  ds.write(0x44, 1); // start conversion, with parasite power on at the end
  ds.reset();
  ds.select(adres);
  ds.write(0xBE); // Read Scratchpad

  for (byte i = 0; i < 9; i++) // можно увеличить точность измерения до 0.0625 *С (от 9 до 12 бит)
  { // we need 9 bytes
    data[i] = ds.read ();
  }
  raw =  (data[1] << 8) | data[0];//=======Пересчитываем в температуру
  float celsius =  (float)raw / 16.0;
  return celsius;
}
*/
//=================================================================================================
//                                  КОНЕЦ СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ
//=================================================================================================

 

wenom86
Offline
Зарегистрирован: 04.11.2012

Если что, то в пути к папке с проектом нет русских символов.

А это кусок кода, который перекидывал во вкладку:

//=================================================================================================
//                   НАЧАЛО СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ
//=================================================================================================
  int c = analogRead(analogPin);
  if      (c>950)          { b=0; } // ни одна клавиша не нажата.
  else if (c>170 && c<200) { b=1; } // нажата кнопка 1 ВВЕРХ
  else if (c<30)           { b=2; } // нажата кнопка 2 ВПРАВО
  else if (c>390 && c<420) { b=3; } // нажата кнопка 3 ВНИЗ
  else if (c>300 && c<330) { b=4; } // нажата кнопка 4 ВЛЕВО
  else if (c>465 && c<505) { b=5; } // нажата кнопка 5 ЦЕНТР 
//=================================================================================================
//                   КОНЕЦ СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ
//=================================================================================================

Сыпятся вот такие ошибки:

Arduino: 1.6.0 (Windows 7), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
 
Build options changed, rebuilding all
 
z_ekran.ino:4:7: error: redefinition of 'int c'
pogod_stanciya_v09.ino:67:7: error: 'int c' previously defined here
z_ekran.ino:5:3: error: expected unqualified-id before 'if'
z_ekran.ino:6:3: error: expected unqualified-id before 'else'
z_ekran.ino:7:3: error: expected unqualified-id before 'else'
z_ekran.ino:8:3: error: expected unqualified-id before 'else'
z_ekran.ino:9:3: error: expected unqualified-id before 'else'
z_ekran.ino:10:3: error: expected unqualified-id before 'else'
Ошибка компиляции.
 
  This report would have more information with
  "Отображать вывод во время компиляции"
  enabled in File > Preferences.
 
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

wenom86, оформи кусок кода, который ты перекидывал в виде функции, а в loop вставь её вызов и будет тебе счастье.

wenom86
Offline
Зарегистрирован: 04.11.2012

Это конечно можно, но, как я понимаю, в функцию потребуется прописывать еще ряд передающих переменных. Это несколько усложняет процесс написания. Просто везде написано, что при разбивании скетча на вкладки он соберется сам при компиляции, а у меня не собирается. 

bwn
Offline
Зарегистрирован: 25.08.2014

Как раз процесс написания усложняет ваш подход, когда все засунуто в один последовательный loop. В виде функции оформляете каждую самодостаточную задачу (считывание кнопки, считывание температуры и т.д.), отлаживаете ее и забываете. В loop-е занимаетесь анализом и принятием решения, какую функцию вызывать.
Дальнейшая доработка сводится к изменениям внутри функций или условий, без необходимости перелопачивать всю гору кода уложенную в loop и судорожных попыток вспомнить: куда ставил грабли?