Не получается разбить скетч.
- Войдите на сайт для отправки комментариев
Здравствуйте. Проблема в том, что в процессе написания мой скетч разросся. Захотел его разбить по файлам в пределах одного проекта (папки с проектом). Сама папка с проектом называется "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;
}
*/
//=================================================================================================
// КОНЕЦ СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ
//=================================================================================================
Если что, то в пути к папке с проектом нет русских символов.
А это кусок кода, который перекидывал во вкладку:
//================================================================================================= // НАЧАЛО СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ //================================================================================================= 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 ЦЕНТР //================================================================================================= // КОНЕЦ СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ //=================================================================================================Сыпятся вот такие ошибки:
wenom86, оформи кусок кода, который ты перекидывал в виде функции, а в loop вставь её вызов и будет тебе счастье.
Это конечно можно, но, как я понимаю, в функцию потребуется прописывать еще ряд передающих переменных. Это несколько усложняет процесс написания. Просто везде написано, что при разбивании скетча на вкладки он соберется сам при компиляции, а у меня не собирается.
Как раз процесс написания усложняет ваш подход, когда все засунуто в один последовательный loop. В виде функции оформляете каждую самодостаточную задачу (считывание кнопки, считывание температуры и т.д.), отлаживаете ее и забываете. В loop-е занимаетесь анализом и принятием решения, какую функцию вызывать.
Дальнейшая доработка сводится к изменениям внутри функций или условий, без необходимости перелопачивать всю гору кода уложенную в loop и судорожных попыток вспомнить: куда ставил грабли?