Ошибка компиляции
- Войдите на сайт для отправки комментариев
Чт, 03/01/2019 - 13:46
Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.
Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.
А две темы зачем? Две ошибки выдаёт?
Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.
Спасибо, принято к сведению.
Когда (и если) у Вас повятся вопросы, не стесняйтесь их задавать. Зависит от характера вопроса, но возможно, потребуется выложить текст скетча и текст сообщения об ошибке.
Обязательно прочитайте вот эту тему, прежде, чем постить ещё.
Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.
В чем может быть ошибка?
Исходя из имеющихся у нас данных - во времени компиляции. Для подтверждения гипотезы необходимо вновь запустить программу вчера.
Вчера конвеер работал нормально, выдавал продукцию и тд. А сегодня он чё-то даже не запускается, пищит, моргает дисплеем...
Чо может быть???
Нравятся мне такие вопросы. Блондинко: - а вчера у меня машина ехала, а седня не едит и дёргаеццо... -шо может быть???
Нравиццо мне ваш форум, одно и то-же на куче страниц. Так сказать, юморно )))
В чем может быть ошибка?
Тут и думать нечего, ошибка очевидна - когда Господь тебя делал, у него мозги закончились, а он не стал ждать пока подвезут, так черепушку запаял.
Тебе в посте #1 как человеку сказали, выкладывй текст программы и текст сообщения об ошибке. Или ты и этого не понял? Что, и на спинном мозге Бог схалтурил?
Только имей в виду, если выложишь не прочитав тему, о которой тебе в том же посте писали, будешь послан "на" сразу и беспопворотно.
Кстати, дай угадаю ... "вот, ничего ведь не менял, а оно, вот так ..." :)
Примеры такую же ошибку выдают
Понятно.
1) указанную тему не прочитал (читать не умеешь)
2) код вставил неправильно (не видишь иконок на экране)
3) текст сообщения об ошибке не привёл (мозгов нет от слова совсем)
Так что,всё правильно, так и должно быть. Не дано тебе это. Забей и расслабься.
Примеры такую же ошибку выдают
Какую же???? Ты ведь не привёл текст ошибки!!! Вот скажи, тебе какой диагноз ставят «дебильность» или «идиотия»?
Да, ладно, мужики, может парню 10 лет, а Вы набросились.
maksfil78,
1. Прочитайте, наконец тему, о которой я Вам писал. Если будете игнорировать то, что Вам пишут, то ничего у нас не получится.
2. Вставьте, наконец правильно код (как правильно - написано в той теме)
3. Скопируйте, наконец сюда, сообщение об ошибке. Оно находится там же где Вы видели слова про exit status. Скопипастите то окно сюда целиком.
Если, Вы не можете сделать этих трёх пунктов, то, тогда действительно - не Ваше это, бросьте.
Да, ладно, мужики, может парню 10 лет, а Вы набросились.
Даже в 10 лет тему из песочницы (на которую давали ссылку два часа назад) можно было прочитать и вставить код правильно. Нет, здесь явно какой-то диагноз.
Перемещу-ка поближе к рекомендуемой к прочтению теме.
Да, уж бестолку, наверное. ТС гордо удалился. Недостойны мы его :(
bwn, зачем удалять правильные посты? *смотрит строго*
я чонить непраильна сказал?
Да, ладно, дед.
Я вот тут щас накатил за здоровье всех трезвенников, так добрый сразу стал :)
Я вот за здоровье трезвенников накатил еще 25 декабря. До сих пор оне мня ниатпускають.
И я изо всех сил надеюсь, что недоразумение исчерпано, и Вы на меня не в обиде.
Хто? ТС? Так он вроди ни на каво ни в абиде! Забил он на нас на всех. Нечутких таких казлов :(
bwn, зачем удалять правильные посты? *смотрит строго*
я чонить непраильна сказал?
Дида, чес слово не я. Думал ты сам себя чистишь.
Иния! А кто же?
Форумчане здрасьте. Я новенький и тоже проблемы с компиляцией. Сейчас знакомлюсь с правилами, но думаю, проблему мою могу и сейчас озвучить. Можеть что подскажете. Месяцев 8 назад, работая с arduino ide, всё было прекрасно. Я готовые проекты повторял. Скетчи загружались, компилировались, загружались в arduino nano и работали. Сейчас же, любой скетч с готового проекта загружаю и при компиляции выдаёт ошибки постоянно. Некоторые победил, а вот последнюю не могу. Программа версии 1.8.7 стоит. Пробовал и на 1.5.7 эффект тотже. Программировать не умею, не студент, с железом дружу (собирал, прошивал микроконтроллеры фирмы atmel, въобщем собирал проекты полностью) Подскажите где копать. Тему новую не хочу открывать.
Для начала поместите текст скетча и сообщение об ошибках в нормальном виде (скетч как "code", а про ошибки скопировать и поместить в текстовом виде)
Там у вас кирилица в пути (имя пользователя на русском). Буквы ломаются и не компилируется.
1
0001
#include <LCD5110_Graph.h>
0002
0003
// Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins).
0004
// Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5).
0005
#define EXT_FILTER_PIN 12
0006
#define EXT_AIR_PIN 1
0007
#define EXT_HEATER_PIN 13
0008
#define EXT_COOLING_PIN 10
0009
#define EXT_LIGHT_1_PIN 15
0010
#define EXT_LIGHT_2_PIN 16
0011
#define EXT_CO2_PIN 0
0012
0013
#define EXT_POWER_ON_PIN 20
0014
#define EXT_LIGHT_LED_PIN 11
0015
0016
#define EXT_UDO_MICRO_PIN 17
0017
#define EXT_UDO_MACRO_PIN 18
0018
#define EXT_UDO_Fe_PIN 19
0019
0020
#define Key_PIN 7
0021
0022
#define DispLight_min 253 //минимальная подсветка в режиме часов
0023
#define CorrTime -3 // коррекция хода системных часов [Сек] выполняется каждый час
0024
//const int CorrTime = -23; // коррекция хода системных часов [Сек]
0025
// It is assumed that the LCD module is connected to
0026
// the following pins using a levelshifter to get the
0027
// correct voltage to the module.
0028
// SCK - Pin 8
0029
// MOSI - Pin 9
0030
// DC - Pin 10
0031
// RST - Pin 11
0032
// CS - Pin 12
0033
//
0034
#include <LCD5110_Graph.h>
0035
0036
#define LED_LIGHT_PIN 9
0037
LCD5110 myGLCD(8,7,6,4,5);
0038
extern
uint8_t SmallFont[];
0039
extern
uint8_t BigNumbers[];
0040
//extern unsigned char TinyFont[];
0041
byte
ledContrast;
0042
byte
ledLight;
0043
0044
//подключаем заголовочный файл библиотеки EEPROM
0045
#include <EEPROM.h>
0046
0047
#include <OneWire.h>
0048
OneWire temp(14);
// on pin 10 (a 4.7K resistor is necessary)
0049
float
cur_temp = -999;
0050
byte
temp_type_s;
0051
byte
temp_data[12];
0052
byte
temp_addr[8];
0053
byte
temp_cicle = 0;
0054
// I assume you know how to connect the DS1307.
0055
// DS1307: SDA pin -> Arduino Digital 4
0056
// SCL pin -> Arduino Digital 5
0057
0058
#include <DS1307.h>
0059
0060
// Init the DS1307
0061
DS1307 rtc(3, 2);
0062
// Init a Time-data structure
0063
Time time;
0064
unsigned
long
currentTime;
0065
unsigned
long
loopTime;
0066
0067
0068
byte
key = 0;
0069
byte
prev_key = 0;
0070
byte
idle_key = 0;
0071
//const int max_idle_key = 100; //цыклов не активности перед скринсейвером
0072
#define max_idle_key 100 //цыклов не активности перед скринсейвером
0073
0074
int
cur_menu = 0;
0075
int
cur_item = 0;
0076
boolean cur_item_edit =
false
;
0077
byte
aquaT;
// Требуемая температура воды
0078
boolean CoolingEnabled;
// Разрешено ли охлаждение куллером
0079
boolean light1 =
false
;
0080
boolean light2 =
false
;
0081
boolean air =
false
;
0082
boolean CO2 =
false
;
0083
byte
kormMin = 0;
// Остаток времени для кормления мин
0084
0085
byte
minCool = 0;
// минимальные обороты кулера для вентиляции крышки и охлаждения ламп
0086
byte
maxCool = 0;
// максимальные обороты для охлаждения воды
0087
0088
void
setup
()
0089
{
0090
pinMode(EXT_HEATER_PIN, OUTPUT);
// устанавливает режим работы - выход
0091
digitalWrite(EXT_HEATER_PIN, LOW);
// выключает
0092
pinMode(EXT_COOLING_PIN, OUTPUT);
// устанавливает режим работы - выход
0093
digitalWrite(EXT_COOLING_PIN, LOW);
// выключает
0094
pinMode(EXT_LIGHT_1_PIN, OUTPUT);
// устанавливает режим работы - выход
0095
digitalWrite(EXT_LIGHT_1_PIN, HIGH);
// выключает
0096
light1 =
true
;
0097
pinMode(EXT_LIGHT_2_PIN, OUTPUT);
// устанавливает режим работы - выход
0098
digitalWrite(EXT_LIGHT_2_PIN, LOW);
// выключает
0099
light2 =
false
;
0100
pinMode(EXT_FILTER_PIN, OUTPUT);
// устанавливает режим работы - выход
0101
digitalWrite(EXT_FILTER_PIN, HIGH);
// выключает
0102
pinMode(EXT_CO2_PIN, OUTPUT);
// устанавливает режим работы - выход
0103
digitalWrite(EXT_CO2_PIN, LOW);
// выключает
0104
CO2 =
false
;
0105
pinMode(EXT_AIR_PIN, OUTPUT);
// устанавливает режим работы - выход
0106
digitalWrite(EXT_AIR_PIN, HIGH);
// выключает
0107
air =
true
;
0108
CoolingEnabled =
false
;
// Разрешено ли охлаждение куллером
0109
0110
0111
pinMode(EXT_POWER_ON_PIN, OUTPUT);
// устанавливает режим работы - выход
0112
digitalWrite(EXT_POWER_ON_PIN, LOW);
// выключает
0113
pinMode(EXT_LIGHT_LED_PIN, OUTPUT);
// устанавливает режим работы - выход
0114
digitalWrite(EXT_LIGHT_LED_PIN, LOW);
// выключает
0115
pinMode(EXT_UDO_MICRO_PIN, OUTPUT);
// устанавливает режим работы - выход
0116
digitalWrite(EXT_UDO_MICRO_PIN, LOW);
// выключает
0117
pinMode(EXT_UDO_MACRO_PIN, OUTPUT);
// устанавливает режим работы - выход
0118
digitalWrite(EXT_UDO_MACRO_PIN, LOW);
// выключает
0119
pinMode(EXT_UDO_Fe_PIN, OUTPUT);
// устанавливает режим работы - выход
0120
digitalWrite(EXT_UDO_Fe_PIN, LOW);
// выключает
0121
0122
//включит pullup резистор для входа:
0123
// pinMode(Key_PIN, INPUT);
0124
0125
// Init EEPROM
0126
// for(int e = 0; e < 2047; e++) EEPROM.write(e,0);
0127
// EEPROM.write(0,61); // ledContrast !!!!!!! Очень акуратно иначе белый либо черный экран
0128
// EEPROM.write(1,200); // ledLight
0129
// EEPROM.write(2,24); // Требуемая температура воды
0130
// EEPROM.write(3,1); // Разрешено ли охлаждение куллером
0131
0132
ledContrast = EEPROM.read(0);
0133
// первичная установка контраста - иначе при первом запуске нихрена невидно
0134
if
((ledContrast==0)||(ledContrast==255)){
0135
ledContrast = 65;
0136
}
0137
0138
ledLight = EEPROM.read(1);
0139
myGLCD.InitLCD(ledContrast);
0140
pinMode(LED_LIGHT_PIN, OUTPUT);
// устанавливает режим работы - выход
0141
analogWrite(LED_LIGHT_PIN,ledLight);
0142
aquaT = EEPROM.read(2);
// Требуемая температура воды
0143
0144
minCool = EEPROM.read(3);
// минимальные обороты кулера для вентиляции крышки и охлаждения ламп
0145
maxCool = EEPROM.read(4);
// максимальные обороты для охлаждения воды
0146
0147
// Set the clock to run-mode
0148
rtc.halt(
false
);
0149
// rtc.setDOW(SUNDAY); // Set Day-of-Week to SUNDAY
0150
// rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
0151
// rtc.setDate(3, 10, 2010); // Set the date to October 3th, 2010
0152
0153
myGLCD.setFont(SmallFont);
0154
myGLCD.clrScr();
0155
myGLCD.update();
0156
/*
0157
myGLCD.setFont(SmallFont);
0158
myGLCD.clrScr();
0159
myGLCD.print("AQUA controll", CENTER, 3);
0160
myGLCD.print("ALEX", CENTER, 20);
0161
myGLCD.drawRect(28, 18, 56, 28);
0162
for (int i=0; i<6; i++)
0163
{
0164
myGLCD.drawLine(57, 18+(i*2), 83-(i*3), 18+(i*2));
0165
myGLCD.drawLine((i*3), 28-(i*2), 28, 28-(i*2));
0166
}
0167
// myGLCD.setFont(TinyFont);
0168
myGLCD.print("(C) AlexVOK", CENTER, 36);
0169
// myGLCD.print("AlexVOK@gmail.com", CENTER, 42);
0170
myGLCD.update();
0171
delay(1000);
0172
*/
0173
//-------------------------------------------------------------------------------
0174
byte
b = 0;
0175
while
( (!temp.search(temp_addr))&&(b < 10)) {
0176
//Serial.println("Нет больше адресов.");
0177
temp.reset_search();
0178
delay(250);
0179
b++;
0180
}
0181
// if (OneWire::crc8(temp_addr, 7) != temp_addr[7]) {
0182
// Serial.println("CRC не является действительным!");
0183
// }
0184
0185
// Первый байт ROM указывает, какой чип
0186
switch
(temp_addr[0]) {
0187
case
0x10:
0188
// Serial.println(" Chip = DS18S20");
0189
temp_type_s = 1;
0190
break
;
0191
case
0x28:
0192
// Serial.println(" Chip = DS18B20");
0193
temp_type_s = 0;
0194
break
;
0195
case
0x22:
0196
// Serial.println(" Chip = DS1822");
0197
temp_type_s = 0;
0198
break
;
0199
// default:
0200
// Serial.println("Устройство не распознано");
0201
}
0202
0203
currentTime = millis();
0204
loopTime = currentTime;
0205
}
0206
0207
//-----------------------------------------------------------------------------------
0208
float
getTemp(){
0209
// temp.reset();
0210
// temp.select(temp_addr);
0211
// temp.write(0x44, 1); // start conversion, with parasite power on at the end
0212
0213
// delay(1000); // maybe 750ms is enough, maybe not
0214
// we might do a ds.depower() here, but the reset will take care of it.
0215
0216
temp.reset();
0217
temp.select(temp_addr);
0218
temp.write(0xBE);
// Read Scratchpad
0219
0220
for
(
byte
i = 0; i < 9; i++) {
// we need 9 bytes
0221
temp_data[i] = temp.read();
0222
}
0223
// Serial.print(OneWire::crc8(data, 8), HEX);
0224
0225
// Convert the data to actual temperature
0226
// because the result is a 16 bit signed integer, it should
0227
// be stored to an "int16_t" type, which is always 16 bits
0228
// even when compiled on a 32 bit processor.
0229
int16_t raw = (temp_data[1] << 8) | temp_data[0];
0230
0231
if
(temp_type_s) {
0232
raw = raw << 3;
// 9 bit resolution default
0233
if
(temp_data[7] == 0x10) {
0234
// "count remain" gives full 12 bit resolution
0235
raw = (raw & 0xFFF0) + 12 - temp_data[6];
0236
}
0237
}
else
{
0238
byte
cfg = (temp_data[4] & 0x60);
0239
// at lower res, the low bits are undefined, so let's zero them
0240
if
(cfg == 0x00) raw = raw & ~7;
// 9 bit resolution, 93.75 ms
0241
else
if
(cfg == 0x20) raw = raw & ~3;
// 10 bit res, 187.5 ms
0242
else
if
(cfg == 0x40) raw = raw & ~1;
// 11 bit res, 375 ms
0243
//// default is 12 bit resolution, 750 ms conversion time
0244
}
0245
return
((
float
)raw / 16.0);
0246
}
0247
0248
//-----------------------------------------------------------------------------------
0249
// Нажатые кнопки
0250
//int button;
0251
const
byte
BUTTON_NONE = 0;
0252
const
byte
BUTTON_UP = 1;
0253
const
byte
BUTTON_DOWN = 2;
0254
const
byte
BUTTON_OK = 3;
0255
const
byte
BUTTON_CANCEL = 4;
0256
0257
int
getPressedButton()
0258
{
0259
byte
KeyNum=0;
0260
int
KeyValue1=0;
0261
int
KeyValue2=0;
0262
0263
//Читаем в цикле аналоговый вход, для подавления дребезга и нестабильности читаем по два раза подряд, пока значения не будут равны.
0264
//Если значения равны 1023 – значит не была нажата ни одна клавиша.
0265
do
{
0266
// считываем значения с аналогового входа(A0)
0267
KeyValue1=analogRead(Key_PIN);
0268
delay(10);
0269
KeyValue2=analogRead(Key_PIN);
0270
delay(5);
0271
}
while
(KeyValue1!=KeyValue2);
0272
0273
//Интерпретируем полученное значение и определяем код нажатой клавиши
0274
if
(KeyValue2 > 900)
0275
{KeyNum = BUTTON_NONE;}
0276
else
if
(KeyValue2 > 450)
0277
{KeyNum = BUTTON_CANCEL;}
0278
else
if
(KeyValue2 > 250)
0279
{KeyNum = BUTTON_UP;}
0280
else
if
(KeyValue2 > 100)
0281
{KeyNum = BUTTON_DOWN;}
0282
else
{KeyNum = BUTTON_OK;}
0283
//Возвращаем код нажатой клавиши
0284
return
KeyNum;
0285
}
0286
0287
//-----------------------------------------------------------------------------------
0288
void
naviKey(
byte
maxItems){
0289
if
(key == BUTTON_UP){
0290
cur_item--;
0291
if
(cur_item < 1)
0292
cur_item = maxItems;
0293
}
0294
if
(key == BUTTON_DOWN){
0295
cur_item++;
0296
if
(cur_item > maxItems)
0297
cur_item = 1;
0298
}
0299
}
0300
//-----------------------------------------------------------------------------------
0301
void
drawMenu(String mName, String item1, String item2, String item3, String item4){
0302
myGLCD.setFont(SmallFont);
0303
myGLCD.clrScr();
0304
0305
myGLCD.print(mName,1,0);
0306
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
0307
myGLCD.drawLine(0,8,83,8);
0308
myGLCD.drawLine(0,9,83,9);
0309
0310
if
(cur_item == 1){
0311
myGLCD.print(item1,3,12);
0312
myGLCD.drawRoundRect(0,11,83,20);
0313
}
else
0314
myGLCD.print(item1,0,12);
0315
0316
if
(cur_item == 2){
0317
myGLCD.print(item2,3,21);
0318
myGLCD.drawRoundRect(0,20,83,29);
0319
}
else
0320
myGLCD.print(item2,0,21);
0321
0322
if
(cur_item == 3){
0323
myGLCD.print(item3,3,30);
0324
myGLCD.drawRoundRect(0,29,83,38);
0325
}
else
0326
myGLCD.print(item3,0,30);
0327
0328
if
(cur_item == 4){
0329
myGLCD.print(item4,3,39);
0330
myGLCD.drawRoundRect(0,38,83,47);
0331
}
else
0332
myGLCD.print(item4,0,39);
0333
0334
myGLCD.update();
0335
}
0336
0337
byte
menu_hh;
0338
byte
menu_mi;
0339
byte
menu_dd;
0340
byte
menu_mm;
0341
int
menu_yyyy;
0342
byte
menu_dow;
0343
byte
menu_off;
0344
byte
menu_item_count;
0345
int
alertAdr;
0346
byte
curLoad;
0347
0348
byte
prMin = 0;
0349
//-----------------------------------------------------------------------------------
0350
void
drawIntMenu(String mName,
int
minVal,
int
maxVal,
int
Val){
0351
myGLCD.setFont(SmallFont);
0352
myGLCD.clrScr();
0353
0354
myGLCD.print(mName,1,0);
0355
// myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
0356
myGLCD.drawLine(0,8,83,8);
0357
myGLCD.drawLine(0,9,83,9);
0358
0359
myGLCD.setFont(BigNumbers);
0360
myGLCD.printNumI(Val,CENTER,11);
0361
0362
myGLCD.drawRoundRect(0,38,83,47);
0363
0364
int
k = 80*(Val-minVal)/(maxVal - minVal);
0365
for
(
int
i = 2; i < k+2; i++)
0366
myGLCD.drawLine(i,40,i,46);
0367
myGLCD.update();
0368
}
0369
0370
boolean new_hour =
true
;
0371
byte
secc = 0;
0372
byte
LED_sunrise = 0;
0373
byte
LED_cur_pos = 0;
0374
byte
udo_tim = 0;
0375
byte
bt;
0376
//*****************************************************************************************
0377
//*****************************************************************************************
0378
void
loop
() {
0379
currentTime = millis();
0380
key = getPressedButton();
0381
if
((currentTime >= (loopTime + 250))||(key != prev_key)){
// проверяем каждые 5мс (20 Гц)
0382
0383
if
((prev_key != key)&&(key != 0)){
0384
idle_key = 0;
0385
}
else
{
0386
idle_key++;
0387
}
0388
prev_key = key;
0389
0390
0391
if
(key == 0)
// Измереяем температуру только в состоянии простоя
0392
{
0393
if
(temp_cicle == 0){
0394
temp.reset();
0395
temp.select(temp_addr);
0396
temp.write(0x44, 1);
// start conversion, with parasite power on at the end
0397
}
0398
if
(temp_cicle == 4){
0399
cur_temp = getTemp();
0400
// Управление нагревом и охлаждением ----------------------------------------------
0401
if
(cur_temp < (
float
)aquaT){
0402
digitalWrite(EXT_HEATER_PIN, HIGH);
// включает нагреватель
0403
}
else
0404
digitalWrite(EXT_HEATER_PIN, LOW);
// выключает нагреватель
0405
0406
if
(CoolingEnabled) {
0407
if
(cur_temp > ((
float
)aquaT+0.1)){
// Разрешено ли охлаждение куллером
0408
int
coll_cur = minCool+(((
float
)(maxCool - minCool))/100)*(((
float
)(cur_temp-aquaT))/0.5)*100;
0409
if
(coll_cur > maxCool) { coll_cur = maxCool;}
0410
analogWrite(EXT_COOLING_PIN, coll_cur);
// включает куллер
0411
}
else
{
0412
analogWrite(EXT_COOLING_PIN, minCool);
// включаем режим проветривания
0413
}
0414
}
else
{
0415
if
(air||light1){
0416
// if (air||light1||light2){
0417
analogWrite(EXT_COOLING_PIN, minCool);
// включаем режим проветривания
0418
}
else
{
0419
digitalWrite(EXT_COOLING_PIN, LOW);
// выключает куллер
0420
}
0421
}
0422
}
0423
if
(temp_cicle > 51){
0424
temp_cicle = 0;
0425
}
else
{
0426
temp_cicle++;
0427
}
0428
}
0429
0430
// --------------------------------------------------------------------------------
0431
0432
0433
if
(secc > 4){
0434
secc = 0;
0435
}
else
{
0436
secc++;
0437
}
0438
0439
0440
// Get data from the DS1307
0441
time = rtc.getTime();
0442
// коррекция хода системных часов [Сек]
0443
if
(time.min == 0){
0444
new_hour =
true
;
0445
}
0446
if
((time.min == 30)&&(new_hour)){
0447
int
corr_sec = time.sec + CorrTime;
// коррекция хода системных часов [Сек]
0448
byte
corr_min = time.min;
0449
if
(corr_sec < 0){
0450
corr_sec = corr_sec + 60;
0451
corr_min--;
0452
}
0453
if
(corr_sec > 59){
0454
corr_sec = corr_sec - 60;
0455
corr_min++;
0456
}
0457
0458
rtc.setTime(time.hour, corr_min, corr_sec);
// Set the time to 12:00:00 (24hr format)
0459
new_hour =
false
;
0460
}
0461
//-----
0462
// Новая минута ----------------------------------------------
0463
if
(prMin != time.min){
0464
prMin = time.min;
0465
0466
// Время для кормления мин
0467
if
(kormMin > 0){
0468
digitalWrite(EXT_FILTER_PIN, LOW);
// выключает Фильтр
0469
kormMin--;
0470
}
else
{
0471
digitalWrite(EXT_FILTER_PIN, HIGH);
// включает Фильтр
0472
}
0473
// Восход / Закат
0474
if
(LED_sunrise > 0){
0475
byte
led_val = (LED_sunrise&B01111111);
0476
byte
led_tmp = 0;
0477
if
(LED_cur_pos > led_val){
0478
led_tmp = 255;
0479
LED_sunrise = 0;
0480
}
else
{
0481
led_tmp = LED_cur_pos*255/led_val;
0482
}
0483
if
(LED_sunrise&B10000000){
// Восход
0484
}
else
{
// Закат
0485
led_tmp = 255 - led_tmp;
0486
}
0487
// Управляем блоком питания
0488
if
(led_tmp == 0){
0489
digitalWrite(EXT_POWER_ON_PIN, LOW);
0490
}
else
{
0491
digitalWrite(EXT_POWER_ON_PIN, HIGH);
0492
}
0493
0494
analogWrite(EXT_LIGHT_LED_PIN, led_tmp);
// LED
0495
LED_cur_pos++;
0496
}
0497
0498
//-------ALARM-------------------------------------------------------------------------
0499
for
(
int
a = 100; a < 1001; a = a + 4){
0500
byte
b1 = EEPROM.read(a);
0501
// if(((boolean)(b1&B10000000))&((boolean)(_BV(time.dow-1)&b1))){ // активная запись и день недели
0502
if
(b1&B10000000){
0503
if
((1<<(time.dow-1))&b1){
// активная запись и день недели
0504
byte
b2 = EEPROM.read(a+1);
0505
if
(time.hour == (
byte
)(b2&B00011111)){
// сравниваем часы
0506
byte
b3 = EEPROM.read(a+2);
0507
if
(time.min == (
byte
)(b3&B00111111)){
// сравниваем минути
0508
byte
b4 = EEPROM.read(a+3);
0509
switch
((
byte
)((b2>>5)&B00000111)){
// определяем нагрузку
0510
case
0:
0511
// Разрешено ли охлаждение куллером
0512
if
(b4&B00000001){
0513
CoolingEnabled =
true
;
0514
analogWrite(EXT_COOLING_PIN, minCool);
// включаем режим проветривания
0515
}
else
{
0516
CoolingEnabled =
false
;
0517
digitalWrite(EXT_COOLING_PIN, LOW);
0518
}
0519
break
;
0520
case
1:
// Light1
0521
if
(b4&B00000001){
0522
digitalWrite(EXT_LIGHT_1_PIN, HIGH);
0523
light1 =
true
;
0524
}
else
{
0525
digitalWrite(EXT_LIGHT_1_PIN, LOW);
0526
light1 =
false
;
0527
}
0528
break
;
0529
case
2:
// Light2
0530
if
(b4&B00000001){
0531
digitalWrite(EXT_LIGHT_2_PIN, HIGH);
0532
light2 =
true
;
0533
}
else
{
0534
digitalWrite(EXT_LIGHT_2_PIN, LOW);
0535
light2 =
false
;
0536
}
0537
break
;
0538
case
3:
// Air
0539
if
(b4&B00000001){
0540
digitalWrite(EXT_AIR_PIN, HIGH);
0541
air =
true
;
0542
}
else
{
0543
digitalWrite(EXT_AIR_PIN, LOW);
0544
air =
false
;
0545
}
0546
break
;
0547
case
4:
// CO2
0548
if
(b4&B00000001){
0549
digitalWrite(EXT_CO2_PIN, HIGH);
0550
CO2 =
true
;
0551
}
else
{
0552
digitalWrite(EXT_CO2_PIN, LOW);
0553
CO2 =
false
;
0554
}
0555
break
;
0556
case
5:
//LED
0557
// 8 бит 1 восход 0 закат остальные кол мин
0558
LED_sunrise = b4;
0559
LED_cur_pos = 0;
0560
break
;
0561
// case 6: // UDO
0562
// udo_tim = (byte)(b4&B00111111);
0563
// digitalWrite(EXT_POWER_ON_PIN, HIGH);
0564
// delay(100); //Время на выход в режим БП
0565
// switch((byte)((b4>>6)&B00000011)){
0566
// case 0:
0567
// digitalWrite(EXT_UDO_MICRO_PIN, HIGH);
0568
// delay(udo_tim*4.2);
0569
// digitalWrite(EXT_UDO_MICRO_PIN, LOW);
0570
// break;
0571
// case 1:
0572
// digitalWrite(EXT_UDO_MACRO_PIN, HIGH);
0573
// delay(udo_tim*4.2);
0574
// digitalWrite(EXT_UDO_MACRO_PIN, LOW);
0575
// break;
0576
// case 2:
0577
// digitalWrite(EXT_UDO_Fe_PIN, HIGH);
0578
// delay(udo_tim*4.2);
0579
// digitalWrite(EXT_UDO_Fe_PIN, LOW);
0580
// break;
0581
// case 3:
0582
//
0583
// break;
0584
// }
0585
// digitalWrite(EXT_POWER_ON_PIN, LOW);
0586
// break;
0587
case
7:
0588
0589
break
;
0590
}
0591
}
0592
}
0593
}
0594
}
0595
}
0596
}
0597
//------------------------------------------------------------------------------------
0598
if
((idle_key > max_idle_key)&&(cur_menu != 0)){
0599
cur_menu = 0;
0600
cur_item = 0;
0601
cur_item_edit =
false
;
0602
}
0603
0604
switch
(cur_menu){
0605
case
0:
// Time
0606
{
0607
analogWrite(LED_LIGHT_PIN,DispLight_min);
0608
myGLCD.setFont(BigNumbers);
0609
myGLCD.clrScr();
0610
myGLCD.printNumI(time.hour,7,2,2,
'0'
);
0611
myGLCD.drawCircle(42,9,3);
0612
myGLCD.drawCircle(42,19,3);
0613
if
(secc < 2){
0614
myGLCD.drawCircle(42,9,2);
0615
myGLCD.drawCircle(42,19,2);
0616
myGLCD.drawRect(41,8,43,10);
0617
myGLCD.drawRect(41,18,43,20);
0618
myGLCD.setPixel(42,9);
0619
myGLCD.setPixel(42,19);
0620
}
0621
myGLCD.printNumI(time.min,49,2,2,
'0'
);
0622
0623
myGLCD.setFont(SmallFont);
0624
if
(cur_temp < 1){
0625
myGLCD.print(
"T: Error"
,3,38);
0626
}
else
{
0627
myGLCD.print(
"T:"
,3,38);
0628
myGLCD.printNumF(cur_temp,2,15,38);
0629
}
0630
myGLCD.update();
0631
if
(key > 0)
0632
cur_menu = 1;
0633
cur_item = 0;
0634
cur_item_edit =
false
;
0635
// Включаем подсветку LED
0636
// analogWrite(LED_LIGHT_PIN,ledLight);
0637
break
;
0638
}
0639
case
1:
// Main -----------------------------------------------------------------
0640
{
0641
analogWrite(LED_LIGHT_PIN,ledLight);
0642
String ll;
0643
if
(light1||light2){
0644
ll =
"On"
;
0645
}
else
0646
ll =
"Off"
;
0647
0648
String aa;
0649
if
(air){
0650
aa =
"On"
;
0651
}
else
0652
aa =
"Off"
;
0653
0654
if
(cur_item_edit&&(cur_item == 1))
0655
ll =
"["
+ll+
"]"
;
0656
0657
if
(cur_item_edit&&(cur_item == 2))
0658
aa =
"["
+aa+
"]"
;
0659
0660
String lk =
""
;
0661
if
(kormMin > 0){
0662
lk =
" ("
+(String)kormMin+
")"
;
0663
}
0664
drawMenu(
"Main"
,
"Light "
+ll,
"Air "
+aa,
"Kormlenie"
+lk,
"Settings"
);
0665
naviKey(4);
0666
switch
(key){
0667
case
BUTTON_OK:
0668
switch
(cur_item){
0669
case
1:
0670
light1 = !light1;
0671
light2 = light1;
0672
if
(light1){
0673
digitalWrite(EXT_LIGHT_1_PIN, HIGH);
// включает LED
0674
}
else
0675
digitalWrite(EXT_LIGHT_1_PIN, LOW);
// выключает LED
0676
if
(light2){
0677
digitalWrite(EXT_LIGHT_2_PIN, HIGH);
// включает lightTUBE
0678
}
else
0679
digitalWrite(EXT_LIGHT_2_PIN, LOW);
// выключает lightTUBE
0680
break
;
0681
case
2:
0682
air = !air;
0683
if
(air){
0684
digitalWrite(EXT_AIR_PIN, HIGH);
// включает
0685
}
else
0686
digitalWrite(EXT_AIR_PIN, LOW);
// выключает
0687
break
;
0688
case
3:
0689
kormMin = 20;
0690
digitalWrite(EXT_FILTER_PIN, LOW);
// выключает Фильтр
0691
break
;
0692
case
4:
0693
cur_menu = 13;
0694
cur_item = 0;
0695
break
;
0696
}
0697
break
;
0698
case
BUTTON_CANCEL:
0699
cur_item_edit =
false
;
0700
cur_menu = 0;
0701
cur_item = 0;
0702
break
;
0703
}
0704
break
;
0705
}
0706
case
13:
// Settings -----------------------------------------------------------------
0707
{
0708
drawMenu(
"Settings"
,
"System"
,
"Termostat"
,
"Tasker"
,
"Tasker"
);
0709
naviKey(4);
0710
switch
(key){
0711
case
BUTTON_OK:
0712
switch
(cur_item){
0713
case
1:
0714
cur_menu = 131;
0715
cur_item = 0;
0716
break
;
0717
case
2:
0718
cur_menu = 132;
0719
cur_item = 0;
0720
break
;
0721
case
3:
0722
cur_menu = 130;
0723
cur_item = 1;
0724
break
;
0725
case
4:
0726
cur_menu = 130;
// 134 UDO
0727
cur_item = 0;
0728
break
;
0729
}
0730
break
;
0731
case
BUTTON_CANCEL:
0732
cur_menu = 1;
0733
cur_item = 3;
0734
break
;
0735
}
0736
break
;
0737
}
0738
// case 134: // UDO -----------------------------------------------------------------
0739
// { String uu;
0740
// if (CO2){
0741
// uu = "On";
0742
// }else{
0743
// uu = "Off";
0744
// }
0745
// drawMenu("UDO", "CO2", "UDO","CO2 "+uu,"");
0746
// naviKey(3);
0747
// switch(key){
0748
// case BUTTON_OK:
0749
// switch(cur_item){
0750
// case 1:
0751
// cur_menu = 133;
0752
// cur_item = 1;
0753
// menu_off = 1;
0754
// menu_item_count = 25;
0755
// curLoad = 4;
0756
// break;
0757
// case 2:
0758
// cur_menu = 133;
0759
// cur_item = 1;
0760
// menu_off = 1;
0761
// menu_item_count = 25;
0762
// curLoad = 6;
0763
// break;
0764
// case 3:
0765
// CO2 = !CO2;
0766
// if (CO2){
0767
// digitalWrite(EXT_CO2_PIN, HIGH);
0768
// }else{
0769
// digitalWrite(EXT_CO2_PIN, LOW);
0770
// }
0771
// break;
0772
// case 4:
0773
//// cur_menu = 130;
0774
//// cur_item = 1;
0775
// break;
0776
// }
0777
// break;
0778
// case BUTTON_CANCEL:
0779
// cur_menu = 13;
0780
// cur_item = 4;
0781
// break;
0782
// }
0783
// break;
0784
// }
0785
case
130:
// Tasker -----------------------------------------------------------------
0786
{
0787
drawMenu(
"Tasker"
,
"Light 1"
,
"Light 2"
,
"LED"
,
"Air"
);
0788
naviKey(4);
0789
switch
(key){
0790
case
BUTTON_OK:
0791
switch
(cur_item){
0792
case
1:
0793
cur_menu = 133;
0794
cur_item = 1;
0795
menu_off = 1;
0796
menu_item_count = 25;
0797
curLoad = 1;
0798
break
;
0799
case
2:
0800
cur_menu = 133;
0801
cur_item = 1;
0802
menu_off = 1;
0803
menu_item_count = 25;
0804
curLoad = 2;
0805
break
;
0806
case
3:
0807
cur_menu = 133;
0808
cur_item = 1;
0809
menu_off = 1;
0810
menu_item_count = 25;
0811
curLoad = 5;
0812
break
;
0813
case
4:
0814
cur_menu = 133;
0815
cur_item = 1;
0816
menu_off = 1;
0817
menu_item_count = 25;
0818
curLoad = 3;
0819
break
;
0820
}
0821
break
;
0822
case
BUTTON_CANCEL:
0823
cur_menu = 13;
0824
cur_item = 3;
0825
break
;
0826
}
0827
break
;
0828
}
0829
case
133:
// Tasker Menu List -----------------------------------------------------------------
0830
{
0831
myGLCD.setFont(SmallFont);
0832
myGLCD.clrScr();
0833
int
offf;
0834
switch
(curLoad){
0835
case
0:
0836
myGLCD.print(
"CoolTime"
,1,0);
0837
offf = 400;
0838
break
;
0839
case
1:
0840
myGLCD.print(
"Light 1"
,1,0);
0841
offf = 100;
0842
break
;
0843
case
2:
0844
myGLCD.print(
"Light 2"
,1,0);
0845
offf = 200;
0846
break
;
0847
case
3:
0848
myGLCD.print(
"Air"
,1,0);
0849
offf = 300;
0850
break
;
0851
case
4:
0852
myGLCD.print(
"CO2"
,1,0);
0853
offf = 500;
0854
break
;
0855
case
5:
0856
myGLCD.print(
"LED"
,1,0);
0857
offf = 600;
0858
break
;
0859
case
6:
0860
myGLCD.print(
"UDO"
,1,0);
0861
offf = 700;
0862
break
;
0863
}
0864
0865
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
0866
myGLCD.drawLine(0,8,83,8);
0867
myGLCD.drawLine(0,9,83,9);
0868
0869
String tt;
0870
byte
vy;
0871
for
(
byte
j = menu_off; j <= min(menu_off+3,menu_item_count); j++){
0872
vy = 3+9*(j-menu_off+1);
0873
0874
alertAdr = offf+(j-1)*4;
0875
bt = EEPROM.read(alertAdr+1)&B00011111;
0876
tt = (String)(j) +
" "
;
0877
if
(bt < 10){
0878
tt = tt +
"0"
;
0879
}
0880
tt = tt + (String)bt +
":"
;
0881
0882
bt = EEPROM.read(alertAdr+2)&B00111111;
0883
if
(bt < 10){
0884
tt = tt +
"0"
;
0885
}
0886
tt = tt + (String)bt +
" "
;
0887
0888
byte
bt = EEPROM.read(alertAdr+3);
0889
switch
(curLoad){
0890
case
5:
// "TimerLED"
0891
if
(bt&B10000000){
0892
tt = tt +
"On"
;
0893
}
else
{
0894
tt = tt +
"Off"
;
0895
}
0896
break
;
0897
case
6:
// "TimerUDO"
0898
switch
((
byte
)((bt>>6)&B00000011)){
0899
case
0:
// Micro
0900
tt = tt +
"Micro"
;
0901
break
;
0902
case
1:
// Macro
0903
tt = tt +
"Macro"
;
0904
break
;
0905
case
2:
// Fe+
0906
tt = tt +
"Fe+"
;
0907
break
;
0908
case
3:
// Ka
0909
tt = tt +
"Ka"
;
0910
break
;
0911
}
0912
break
;
0913
default
:
0914
if
(bt > 0){
0915
tt = tt +
"On"
;
0916
}
else
{
0917
tt = tt +
"Off"
;
0918
}
0919
break
;
0920
}
0921
0922
// tt = "Time "+(String)(j);
0923
// if(EEPROM.read(offf+(j-1)*4)&B10000000){
0924
// tt = tt+" Active";
0925
// }
0926
if
(cur_item == j){
0927
myGLCD.print(tt,3,vy);
0928
myGLCD.drawRoundRect(0,vy-1,83,vy+8);
0929
}
else
0930
myGLCD.print(tt,0,vy);
0931
0932
// перечеркиваем не активные таймера
0933
if
(!(EEPROM.read(offf+(j-1)*4)&B10000000)){
0934
myGLCD.drawLine(0,vy+5,83,vy+5);
0935
}
0936
0937
}
0938
0939
switch
(key){
0940
case
BUTTON_UP:
0941
if
(cur_item == 1){
0942
cur_item = menu_item_count;
0943
menu_off = menu_item_count - 3;
0944
}
else
{
0945
cur_item--;
0946
if
(cur_item < menu_off){
0947
menu_off = cur_item;
0948
}
0949
}
0950
break
;
0951
case
BUTTON_DOWN:
0952
if
(cur_item == menu_item_count){
0953
cur_item = 1;
0954
menu_off = 1;
0955
}
else
{
0956
cur_item++;
0957
if
(cur_item > menu_off+3){
0958
menu_off = cur_item-3;
0959
}
0960
}
0961
break
;
0962
case
BUTTON_OK:
0963
alertAdr = offf+(cur_item-1)*4;
0964
cur_menu = 1330;
0965
cur_item = 1;
0966
cur_item_edit =
false
;
0967
break
;
0968
case
BUTTON_CANCEL:
0969
switch
(curLoad){
0970
case
0:
0971
//"CoolTime"
0972
cur_menu = 132;
0973
cur_item = 2;
0974
break
;
0975
case
1:
0976
//"Light1",
0977
cur_menu = 130;
0978
cur_item = 1;
0979
break
;
0980
case
2:
0981
//"Light2"
0982
cur_menu = 130;
0983
cur_item = 2;
0984
break
;
0985
case
3:
0986
//"Air"
0987
cur_menu = 130;
0988
cur_item = 4;
0989
break
;
0990
case
4:
0991
//"CO2"
0992
cur_menu = 134;
0993
cur_item = 1;
0994
break
;
0995
case
5:
0996
//"LED"
0997
cur_menu = 130;
0998
cur_item = 3;
0999
break
;
1000
case
6:
1001
//"UDO"
1002
cur_menu = 134;
1003
cur_item = 2;
1004
break
;
1005
}
1006
1007
cur_item_edit =
false
;
1008
break
;
1009
}
1010
myGLCD.update();
1011
break
;
1012
}
1013
case
1330:
// Tasker Menu -----------------------------------------------------------------
1014
{
1015
myGLCD.setFont(SmallFont);
1016
myGLCD.clrScr();
1017
1018
switch
(curLoad){
1019
case
0:
1020
myGLCD.print(
"CoolTime"
,1,0);
1021
break
;
1022
case
1:
1023
myGLCD.print(
"Light1"
,1,0);
1024
break
;
1025
case
2:
1026
myGLCD.print(
"Light2"
,1,0);
1027
break
;
1028
case
3:
1029
myGLCD.print(
"Air"
,1,0);
1030
break
;
1031
case
4:
1032
myGLCD.print(
"CO2"
,1,0);
1033
break
;
1034
case
5:
1035
myGLCD.print(
"LED"
,1,0);
1036
break
;
1037
case
6:
1038
myGLCD.print(
"UDO"
,1,0);
1039
break
;
1040
}
1041
1042
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
1043
myGLCD.drawLine(0,8,83,8);
1044
myGLCD.drawLine(0,9,83,9);
1045
byte
b1 = EEPROM.read(alertAdr);
1046
bt = b1;
1047
myGLCD.print(
"MoTuWeThFrSaSu"
,0,11);
1048
for
(
int
j = 1; j < 8; j++){
1049
// if((cur_item == j)&cur_item_edit){
1050
if
(cur_item == j){
1051
myGLCD.drawRect(j*12-10,20,j*12-2,28);
1052
}
1053
myGLCD.drawCircle(j*12-6,24,3);
1054
if
(bt&B00000001){
1055
myGLCD.drawCircle(j*12-6,24,2);
1056
myGLCD.drawCircle(j*12-6,24,1);
1057
}
1058
bt = bt >> 1;
1059
}
1060
String stat =
""
;
1061
if
(cur_item == 8){
1062
stat = stat +
"["
;
1063
}
1064
if
(EEPROM.read(alertAdr)&B10000000){
1065
stat = stat +
"Act"
;
1066
}
else
1067
stat = stat +
"Pas"
;
1068
if
(cur_item == 8){
1069
stat = stat +
"]"
;
1070
}
1071
1072
stat = stat +
"."
;
1073
if
(cur_item == 9){
1074
stat = stat +
"["
;
1075
}
1076
byte
tmpb = EEPROM.read(alertAdr+3);
1077
switch
(curLoad){
1078
case
5:
// "TimerLED"
1079
if
(tmpb&B10000000){
1080
stat = stat +
"On"
;
1081
}
else
{
1082
stat = stat +
"Off"
;
1083
}
1084
stat = stat +
" "
+ (tmpb&B01111111)+
"min"
;
1085
break
;
1086
case
6:
// "TimerUDO"
1087
switch
((
byte
)((tmpb>>6)&B00000011)){
1088
case
0:
// Micro
1089
stat = stat +
"Micro"
;
1090
break
;
1091
case
1:
// Macro
1092
stat = stat +
"Macro"
;
1093
break
;
1094
case
2:
// Fe+
1095
stat = stat +
"Fe+"
;
1096
break
;
1097
case
3:
// Ka
1098
stat = stat +
"Ka"
;
1099
break
;
1100
}
1101
stat = stat + (tmpb&B00111111)+
"mil"
;
1102
break
;
1103
default
:
1104
if
(tmpb > 0){
1105
stat = stat +
"On"
;
1106
}
else
{
1107
stat = stat +
"Off"
;
1108
}
1109
break
;
1110
}
1111
1112
if
(cur_item == 9){
1113
stat = stat +
"]"
;
1114
}
1115
myGLCD.print(stat,0,29);
1116
1117
stat =
"Time: "
;
1118
if
(cur_item == 10){
1119
stat = stat +
"["
;
1120
}
1121
bt = EEPROM.read(alertAdr+1)&B00011111;
1122
if
(bt < 10){
1123
stat = stat +
"0"
;
1124
}
1125
stat = stat + (String)bt;
1126
if
(cur_item == 10){
1127
stat = stat +
"]"
;
1128
}
1129
1130
stat = stat +
":"
;
1131
1132
if
(cur_item == 11){
1133
stat = stat +
"["
;
1134
}
1135
bt = EEPROM.read(alertAdr+2)&B00111111;
1136
if
(bt < 10){
1137
stat = stat +
"0"
;
1138
}
1139
stat = stat + (String)bt;
1140
if
(cur_item == 11){
1141
stat = stat +
"]"
;
1142
}
1143
myGLCD.print(stat,0,39);
1144
1145
switch
(key){
1146
case
BUTTON_UP:
1147
if
(cur_item_edit){
1148
if
((cur_item == 9)&&(curLoad > 4)){
1149
bt = EEPROM.read(alertAdr+3);
1150
//if(bt == 255){
1151
// bt = 0;
1152
//}else
1153
bt++;
1154
EEPROM.write(alertAdr+3,bt);
1155
}
1156
if
(cur_item == 10){
1157
bt = (EEPROM.read(alertAdr+1)&B00011111);
1158
if
(bt == 23){
1159
bt = 0;
1160
}
else
1161
bt++;
1162
EEPROM.write(alertAdr+1,bt^(curLoad<<5));
1163
}
1164
if
(cur_item == 11){
1165
bt = EEPROM.read(alertAdr+2)&B00111111;
1166
if
(bt == 59){
1167
bt = 0;
1168
}
else
1169
bt++;
1170
EEPROM.write(alertAdr+2,bt);
1171
}
1172
}
else
1173
if
(cur_item == 1){
1174
cur_item = 11;
1175
}
else
1176
cur_item--;
1177
break
;
1178
case
BUTTON_DOWN:
1179
if
(cur_item_edit){
1180
if
((cur_item == 9)&&(curLoad > 4)){
1181
bt = EEPROM.read(alertAdr+3);
1182
//if(bt == 0){
1183
// bt = 255;
1184
//}else
1185
bt--;
1186
EEPROM.write(alertAdr+3,bt);
1187
}
1188
if
(cur_item == 10){
1189
bt = EEPROM.read(alertAdr+1)&B00011111;
1190
if
(bt == 0){
1191
bt = 23;
1192
}
else
1193
bt--;
1194
EEPROM.write(alertAdr+1,bt^(curLoad<<5));
1195
}
1196
if
(cur_item == 11){
1197
bt = EEPROM.read(alertAdr+2)&B00111111;
1198
if
(bt == 0){
1199
bt = 59;
1200
}
else
1201
bt--;
1202
EEPROM.write(alertAdr+2,bt);
1203
}
1204
}
else
1205
if
(cur_item == 11){
1206
cur_item = 1;
1207
}
else
1208
cur_item++;
1209
break
;
1210
case
BUTTON_OK:
1211
EEPROM.write(alertAdr+1,((EEPROM.read(alertAdr+1)&B00011111)^(curLoad<<5)));
// сохраняем номер нагрузки
1212
switch
(cur_item){
1213
case
8:
1214
EEPROM.write(alertAdr,(EEPROM.read(alertAdr)^B10000000));
1215
break
;
1216
case
9:
1217
if
(curLoad < 5){
1218
//EEPROM.write(alertAdr+3,(EEPROM.read(alertAdr+3)^B00000001));
1219
EEPROM.write(alertAdr+3,((EEPROM.read(alertAdr+3)&B00000001)^B00000001));
1220
}
else
{
1221
cur_item_edit = !cur_item_edit;
1222
}
1223
break
;
1224
case
10:
1225
cur_item_edit = !cur_item_edit;
1226
break
;
1227
case
11:
1228
cur_item_edit = !cur_item_edit;
1229
break
;
1230
default
:
1231
EEPROM.write(alertAdr,(EEPROM.read(alertAdr)^(1<<(cur_item-1))));
1232
break
;
1233
}
1234
break
;
1235
case
BUTTON_CANCEL:
1236
switch
(curLoad){
1237
case
0:
1238
//CoolTime
1239
cur_menu = 132;
1240
cur_item = 2;
1241
break
;
1242
case
1:
1243
//"Light1",
1244
cur_menu = 130;
1245
cur_item = 1;
1246
break
;
1247
case
2:
1248
//"Light2"
1249
cur_menu = 130;
1250
cur_item = 2;
1251
break
;
1252
case
3:
1253
//"Air"
1254
cur_menu = 130;
1255
cur_item = 4;
1256
break
;
1257
case
4:
1258
//"CO2"
1259
cur_menu = 134;
1260
cur_item = 1;
1261
break
;
1262
case
5:
1263
//"LED"
1264
cur_menu = 130;
1265
cur_item = 3;
1266
break
;
1267
case
6:
1268
//"UDO"
1269
cur_menu = 134;
1270
cur_item = 2;
1271
break
;
1272
}
1273
cur_item_edit =
false
;
1274
break
;
1275
}
1276
myGLCD.update();
1277
break
;
1278
}
1279
case
132:
// Termostat -----------------------------------------------------------------
1280
{
1281
drawMenu(
"Termostat"
,
"Aqua T ["
+(String)aquaT+
"]"
,
"CoolTime"
,
"minCool"
,
"maxCool"
);
1282
naviKey(4);
1283
switch
(key){
1284
case
BUTTON_OK:
1285
switch
(cur_item){
1286
case
1:
1287
cur_menu = 1321;
1288
cur_item = 0;
1289
break
;
1290
case
2:
//CoolTime
1291
cur_menu = 133;
1292
cur_item = 1;
1293
menu_off = 1;
1294
menu_item_count = 8;
1295
curLoad = 0;
1296
break
;
1297
case
3:
//minCool // минимальные обороты кулера для вентиляции крышки и охлаждения ламп
1298
cur_menu = 1323;
1299
break
;
1300
case
4:
//maxCool // максимальные обороты для охлаждения воды
1301
cur_menu = 1324;
1302
break
;
1303
}
1304
break
;
1305
case
BUTTON_CANCEL:
1306
cur_menu = 13;
1307
cur_item = 2;
1308
cur_item_edit =
false
;
1309
break
;
1310
}
1311
break
;
1312
}
1313
case
1321:
// Aqua Temperature -----------------------------------------------------------------
1314
{
1315
drawIntMenu(
"Aqua Temperat"
,18,35,aquaT);
1316
switch
(key){
1317
case
BUTTON_UP:
1318
aquaT++;
1319
aquaT = min(aquaT, 35);
1320
break
;
1321
case
BUTTON_DOWN:
1322
aquaT--;
1323
aquaT = max(aquaT, 18);
1324
break
;
1325
case
BUTTON_OK:
1326
EEPROM.write(2,aquaT);
// Требуемая температура воды
1327
cur_menu = 132;
1328
cur_item = 1;
1329
break
;
1330
case
BUTTON_CANCEL:
1331
aquaT = EEPROM.read(2);
// Требуемая температура воды
1332
cur_menu = 132;
1333
cur_item = 1;
1334
break
;
1335
}
1336
break
;
1337
}
1338
case
1323:
// minCool // минимальные обороты кулера для вентиляции крышки и охлаждения ламп ------------------------------------------
1339
{
1340
drawIntMenu(
"minCool"
,0,maxCool,minCool);
1341
switch
(key){
1342
case
BUTTON_UP:
1343
minCool++;
1344
minCool = min(minCool, maxCool);
1345
analogWrite(EXT_COOLING_PIN, minCool);
1346
break
;
1347
case
BUTTON_DOWN:
1348
minCool--;
1349
minCool = max(minCool, 0);
1350
analogWrite(EXT_COOLING_PIN, minCool);
1351
break
;
1352
case
BUTTON_OK:
1353
EEPROM.write(3,minCool);
// минимальные обороты кулера для вентиляции крышки и охлаждения ламп
1354
cur_menu = 132;
1355
cur_item = 3;
1356
break
;
1357
case
BUTTON_CANCEL:
1358
minCool = EEPROM.read(3);
// минимальные обороты кулера для вентиляции крышки и охлаждения ламп
1359
cur_menu = 132;
1360
cur_item = 3;
1361
break
;
1362
}
1363
break
;
1364
}
1365
case
1324:
// maxCool // максимальные обороты для охлаждения воды ------------------------------------------
1366
{
1367
drawIntMenu(
"maxCool"
,0,255,maxCool);
1368
switch
(key){
1369
case
BUTTON_UP:
1370
maxCool++;
1371
maxCool = min(maxCool, 255);
1372
analogWrite(EXT_COOLING_PIN, maxCool);
1373
break
;
1374
case
BUTTON_DOWN:
1375
maxCool--;
1376
maxCool = max(maxCool, minCool);
1377
analogWrite(EXT_COOLING_PIN, maxCool);
1378
break
;
1379
case
BUTTON_OK:
1380
EEPROM.write(4,maxCool);
// максимальные обороты для охлаждения воды
1381
cur_menu = 132;
1382
cur_item = 4;
1383
break
;
1384
case
BUTTON_CANCEL:
1385
maxCool = EEPROM.read(4);
// максимальные обороты для охлаждения воды
1386
cur_menu = 132;
1387
cur_item = 4;
1388
break
;
1389
}
1390
break
;
1391
}
1392
case
131:
// System -----------------------------------------------------------------
1393
{
1394
drawMenu(
"System"
,
"Time"
,
"Date"
,
"LED Contrast"
,
"LED Light"
);
1395
naviKey(4);
1396
switch
(key){
1397
case
BUTTON_OK:
1398
switch
(cur_item){
1399
case
1:
1400
cur_menu = 1311;
1401
cur_item = 0;
1402
menu_hh = time.hour;
1403
menu_mi = time.min;
1404
break
;
1405
case
2:
1406
cur_menu = 1312;
1407
cur_item = 0;
1408
menu_dd = time.date;
1409
menu_mm = time.mon;
1410
menu_yyyy = time.year;
1411
menu_dow = time.dow;
1412
break
;
1413
case
3:
1414
cur_menu = 1313;
1415
cur_item = 0;
1416
break
;
1417
case
4:
1418
cur_menu = 1314;
1419
cur_item = 0;
1420
break
;
1421
}
1422
break
;
1423
case
BUTTON_CANCEL:
1424
cur_menu = 0;
1425
cur_item = 0;
1426
break
;
1427
}
1428
break
;
1429
}
1430
case
1311:
// Time -----------------------------------------------------------------
1431
{
1432
myGLCD.setFont(SmallFont);
1433
myGLCD.clrScr();
1434
1435
myGLCD.print(
"Time"
,1,0);
1436
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
1437
myGLCD.drawLine(0,8,83,8);
1438
myGLCD.drawLine(0,9,83,9);
1439
if
((cur_item == 1)&&cur_item_edit)
1440
myGLCD.invertText(
true
);
1441
myGLCD.printNumI(menu_hh,26,20,2,
'0'
);
1442
myGLCD.invertText(
false
);
1443
myGLCD.print(
":"
,39,20);
1444
if
((cur_item == 2)&&cur_item_edit)
1445
myGLCD.invertText(
true
);
1446
myGLCD.printNumI(menu_mi,46,20,2,
'0'
);
1447
myGLCD.invertText(
false
);
1448
1449
if
(cur_item == 1)
1450
myGLCD.drawRoundRect(25,18,39,28);
1451
if
(cur_item == 2)
1452
myGLCD.drawRoundRect(45,18,59,28);
1453
1454
switch
(key){
1455
case
BUTTON_UP:
1456
if
(!cur_item_edit){
1457
cur_item--;
1458
if
(cur_item < 1)
1459
cur_item = 2;
1460
}
else
{
1461
if
(cur_item == 1){
1462
menu_hh++;
1463
if
(menu_hh == 24)
1464
menu_hh = 0;
1465
}
1466
if
(cur_item == 2){
1467
menu_mi++;
1468
if
(menu_mi == 60)
1469
menu_mi = 0;
1470
}
1471
}
1472
break
;
1473
case
BUTTON_DOWN:
1474
if
(!cur_item_edit){
1475
cur_item++;
1476
if
(cur_item > 2)
1477
cur_item = 1;
1478
}
else
{
1479
if
(cur_item == 1){
1480
if
(menu_hh == 0)
1481
menu_hh = 23;
1482
else
1483
menu_hh--;
1484
}
1485
if
(cur_item == 2){
1486
if
(menu_mi == 0)
1487
menu_mi = 59;
1488
else
1489
menu_mi--;
1490
}
1491
}
1492
break
;
1493
case
BUTTON_OK:
1494
if
(cur_item_edit){
1495
switch
(cur_item){
1496
case
1:
1497
rtc.setTime(menu_hh, time.min, 0);
// Set the time to 12:00:00 (24hr format)
1498
break
;
1499
case
2:
1500
rtc.setTime(time.hour, menu_mi, 0);
// Set the time to 12:00:00 (24hr format)
1501
break
;
1502
}
1503
cur_item_edit =
false
;
1504
}
else
1505
cur_item_edit =
true
;
1506
break
;
1507
case
BUTTON_CANCEL:
1508
cur_item_edit =
false
;
1509
cur_menu = 131;
1510
cur_item = 1;
1511
break
;
1512
}
1513
myGLCD.update();
1514
break
;
1515
}
1516
case
1312:
// Date -----------------------------------------------------------------
1517
{
1518
myGLCD.setFont(SmallFont);
1519
myGLCD.clrScr();
1520
1521
myGLCD.print(
"Date"
,1,0);
1522
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0);
1523
myGLCD.drawLine(0,8,83,8);
1524
myGLCD.drawLine(0,9,83,9);
1525
1526
if
((cur_item == 1)&&cur_item_edit)
1527
myGLCD.invertText(
true
);
1528
myGLCD.printNumI(menu_dd,12,20,2,
'0'
);
1529
myGLCD.invertText(
false
);
1530
1531
myGLCD.print(
"."
,24,20);
1532
1533
if
((cur_item == 2)&&cur_item_edit)
1534
myGLCD.invertText(
true
);
1535
myGLCD.printNumI(menu_mm,30,20,2,
'0'
);
1536
myGLCD.invertText(
false
);
1537
1538
myGLCD.print(
"."
,42,20);
1539
1540
if
((cur_item == 3)&&cur_item_edit)
1541
myGLCD.invertText(
true
);
1542
myGLCD.printNumI(menu_yyyy,48,20,4,
'0'
);
1543
myGLCD.invertText(
false
);
1544
1545
myGLCD.print(
"Day of week"
,0,32);
1546
if
((cur_item == 4)&&cur_item_edit)
1547
myGLCD.invertText(
true
);
1548
myGLCD.printNumI(menu_dow,68,32);
1549
myGLCD.invertText(
false
);
1550
1551
switch
(cur_item){
1552
case
1:
1553
myGLCD.drawRoundRect(11,18,25,28);
1554
break
;
1555
case
2:
1556
myGLCD.drawRoundRect(29,18,44,28);
1557
break
;
1558
case
3:
1559
myGLCD.drawRoundRect(47,18,73,28);
1560
break
;
1561
case
4:
1562
myGLCD.drawRoundRect(67,30,75,40);
1563
break
;
1564
}
1565
1566
switch
(key){
1567
case
BUTTON_UP:
1568
if
(!cur_item_edit){
1569
cur_item--;
1570
if
(cur_item < 1)
1571
cur_item = 4;
1572
}
else
{
1573
if
(cur_item == 1){
1574
menu_dd++;
1575
if
(menu_dd > 31)
1576
menu_dd = 1;
1577
}
1578
if
(cur_item == 2){
1579
menu_mm++;
1580
if
(menu_mm > 12)
1581
menu_mm = 1;
1582
}
1583
if
(cur_item == 3){
1584
menu_yyyy++;
1585
}
1586
if
(cur_item == 4){
1587
menu_dow++;
1588
if
(menu_dow > 7)
1589
menu_dow = 1;
1590
}
1591
}
1592
break
;
1593
case
BUTTON_DOWN:
1594
if
(!cur_item_edit){
1595
cur_item++;
1596
if
(cur_item > 4)
1597
cur_item = 1;
1598
}
else
{
1599
if
(cur_item == 1){
1600
menu_dd--;
1601
if
(menu_dd < 1)
1602
menu_dd = 31;
1603
}
1604
if
(cur_item == 2){
1605
menu_mm--;
1606
if
(menu_mm < 1)
1607
menu_mm = 12;
1608
}
1609
if
(cur_item == 3){
1610
menu_yyyy--;
1611
menu_yyyy = max(menu_yyyy,2013);
1612
}
1613
if
(cur_item == 4){
1614
menu_dow--;
1615
if
(menu_dow < 1)
1616
menu_dow = 7;
1617
}
1618
}
1619
break
;
1620
case
BUTTON_OK:
1621
if
(cur_item_edit){
1622
switch
(cur_item){
1623
case
1:
1624
rtc.setDate(menu_dd, time.mon, time.year);
// Set the date
1625
break
;
1626
case
2:
1627
rtc.setDate(time.date, menu_mm, time.year);
// Set the date
1628
break
;
1629
case
3:
1630
rtc.setDate(time.date, time.mon, menu_yyyy);
// Set the date
1631
break
;
1632
case
4:
1633
rtc.setDOW(menu_dow);
// Set Day-of-Week
1634
break
;
1635
}
1636
cur_item_edit =
false
;
1637
}
else
1638
cur_item_edit =
true
;
1639
break
;
1640
case
BUTTON_CANCEL:
1641
cur_item_edit =
false
;
1642
cur_menu = 131;
1643
cur_item = 2;
1644
break
;
1645
}
1646
myGLCD.update();
1647
break
;
1648
}
1649
case
1313:
// LED Contrast -----------------------------------------------------------------
1650
{
1651
drawIntMenu(
"LED Contrast"
,45,80,ledContrast);
1652
switch
(key){
1653
case
BUTTON_UP:
1654
ledContrast++;
1655
ledContrast = min(ledContrast, 80);
1656
break
;
1657
case
BUTTON_DOWN:
1658
ledContrast--;
1659
ledContrast = max(ledContrast, 45);
1660
break
;
1661
case
BUTTON_OK:
1662
EEPROM.write(0,ledContrast);
1663
cur_menu = 131;
1664
cur_item = 3;
1665
break
;
1666
case
BUTTON_CANCEL:
1667
ledContrast = EEPROM.read(0);
1668
cur_menu = 131;
1669
cur_item = 3;
1670
break
;
1671
}
1672
myGLCD.setContrast(ledContrast);
1673
break
;
1674
}
1675
case
1314:
// LED Light -----------------------------------------------------------------
1676
{
1677
drawIntMenu(
"LED Light"
,0,255,ledLight);
1678
switch
(key){
1679
case
BUTTON_UP:
1680
ledLight++;
1681
ledLight = min(ledLight, 255);
1682
break
;
1683
case
BUTTON_DOWN:
1684
ledLight--;
1685
ledLight = max(ledLight, 0);
1686
break
;
1687
case
BUTTON_OK:
1688
EEPROM.write(1,ledLight);
1689
cur_menu = 131;
1690
cur_item = 4;
1691
break
;
1692
case
BUTTON_CANCEL:
1693
ledLight = EEPROM.read(1);
1694
cur_menu = 131;
1695
cur_item = 4;
1696
break
;
1697
}
1698
analogWrite(LED_LIGHT_PIN,ledLight);
1699
break
;
1700
}
1701
1702
default
:
1703
cur_menu = 0;
1704
cur_item = 0;
1705
}
1706
1707
loopTime = currentTime;
1708
}
1709
}
Arduino: 1.8.7 (Windows 7), Плата:"Arduino Nano, ATmega328P"
exec: "C:\\Users\\Серж\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\5.4.0-atmel3.6.1-arduino2/bin/avr-g++": file does not exist
Ошибка компиляции для платы Arduino Nano.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Получаеться, если путь будет без кирилицы, проблема решиться? Например, если скетч будет находиться на диске С, в папках программы arduino ide. Я правильно понял?
надо имя пользователя сделать латиницей, а если точнее у вас папка временных файлов в каталоге пользователя, весь бред виндовс из-за этого, IDE туда складывает файлы при компиляции и сложить не может
Спасибо,вроде понял свою ошибку. Попробую.
Спасибо,вроде понял свою ошибку. Попробую.
И переменные среды окружения настроить как-то так:
Спасибо большое.