Ошибка компиляции

maksfil78
Offline
Зарегистрирован: 02.01.2019

Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А две темы зачем? Две ошибки выдаёт?

maksfil78 пишет:

Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.

Спасибо, принято к сведению.

Когда (и если) у Вас повятся вопросы, не стесняйтесь их задавать. Зависит от характера вопроса, но возможно, потребуется выложить текст скетча и текст сообщения об ошибке. 

Обязательно прочитайте вот эту тему, прежде, чем постить ещё.

maksfil78
Offline
Зарегистрирован: 02.01.2019

maksfil78 пишет:

Вчера программа работала нормально, а сегодня выдает ошибку exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.

В чем может быть ошибка?

 

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

Исходя из имеющихся у нас данных - во времени компиляции. Для подтверждения гипотезы необходимо вновь запустить программу вчера.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Вчера конвеер работал нормально, выдавал продукцию и тд. А сегодня он чё-то даже не запускается, пищит, моргает дисплеем...

Чо может быть???

Нравятся мне такие вопросы.  Блондинко: - а вчера у меня машина ехала, а седня не едит и дёргаеццо... -шо может быть???

Нравиццо мне ваш форум, одно и то-же на куче страниц. Так сказать, юморно )))

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

maksfil78 пишет:

В чем может быть ошибка?

Тут и думать нечего, ошибка очевидна - когда Господь тебя делал, у него мозги закончились, а он не стал ждать пока подвезут, так черепушку запаял.

Тебе в посте #1  как человеку сказали, выкладывй текст программы и текст сообщения об ошибке. Или ты и этого не понял? Что, и на спинном мозге Бог схалтурил?

Только имей в виду, если выложишь не прочитав тему, о которой тебе в том же посте писали, будешь послан "на" сразу и беспопворотно.

Кстати, дай угадаю ... "вот, ничего ведь не менял, а оно, вот так ..." :)

maksfil78
Offline
Зарегистрирован: 02.01.2019
[code]
#include "Adafruit_GFX.h"   // Ядро графической библиотеки
#include "MCUFRIEND_kbv.h"  // Специфика работы с разными чипами 
#include "dht11.h"
dht11 DHT;
#define DHT11_PIN 10
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
 
MCUFRIEND_kbv tft;
int chk;
 
void setup(void) {
  Serial.begin(9600);
  Serial.println(F("TFT LCD test"));
  
  tft.reset();
  uint16_t identifier = tft.readID();
 
    Serial.print(F("LCD driver chip: "));
    Serial.println(identifier, HEX);
 
  tft.begin(identifier);
  Serial.println(F("Benchmark Time (microseconds)"));
  Serial.print(F("Screen fill"));
  delay(500);
 
  Serial.println(F("Done!"));
}
 
void loop(void) {
 
chk = DHT.read(DHT11_PIN);    // READ DATA
 
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);
  
  tft.fillScreen(BLACK);
  tft.setCursor(10, 10);
 
 if (DHT.temperature > 30){
    tft.setTextColor(RED);
  }else if (DHT.temperature > 27 || DHT.temperature < 30) {
    tft.setTextColor(YELLOW);
  } else if(DHT.temperature < 27 || DHT.temperature > 10){
    tft.setTextColor(BLUE);
  } else if (DHT.temperature <10){
    tft.setTextColor(CYAN);
  } else {
    tft.setTextColor(GREEN);
  }
  
  tft.setTextSize(5);
 
  String stringOne = ("Temp "); 
  String stringThree = stringOne + DHT.temperature;
  tft.println(stringThree); 
  
  tft.setTextColor(WHITE);
  tft.setCursor(10, 60);
  String stringTwo = "Hum %";
  String stringFour = stringTwo + DHT.humidity;
  tft.println(stringFour); 
 
  delay(5000);
 
}
[/code]
maksfil78
Offline
Зарегистрирован: 02.01.2019

Примеры такую же ошибку выдают

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Понятно.

1) указанную тему не прочитал (читать не умеешь)
2) код вставил неправильно (не видишь иконок на экране)
3) текст сообщения об ошибке не привёл (мозгов нет от слова совсем)

Так что,всё правильно, так и должно быть. Не дано тебе это. Забей и расслабься.

maksfil78 пишет:

Примеры такую же ошибку выдают

Какую же???? Ты ведь не привёл текст ошибки!!! Вот скажи, тебе какой диагноз ставят «дебильность» или «идиотия»?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, ладно, мужики, может парню 10 лет, а Вы набросились.

maksfil78,

1. Прочитайте, наконец тему, о которой я Вам писал. Если будете игнорировать то, что Вам пишут, то ничего у нас не получится.

2. Вставьте, наконец правильно код (как правильно - написано в той теме)

3. Скопируйте, наконец сюда, сообщение об ошибке. Оно находится там же где Вы видели слова про exit status. Скопипастите то окно сюда целиком.

Если, Вы не можете сделать этих трёх пунктов, то, тогда действительно - не Ваше это, бросьте.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ЕвгенийП пишет:

Да, ладно, мужики, может парню 10 лет, а Вы набросились.

Даже в 10 лет тему из песочницы (на которую давали ссылку два часа назад) можно было прочитать и вставить код правильно. Нет, здесь явно какой-то диагноз.

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

Перемещу-ка поближе к рекомендуемой к прочтению теме.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, уж бестолку, наверное. ТС гордо удалился. Недостойны мы его :(

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

bwn, зачем удалять правильные посты?  *смотрит строго*

я чонить непраильна сказал?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, ладно, дед.

Я вот тут щас накатил за здоровье всех трезвенников, так добрый сразу стал :)

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

Я вот за здоровье трезвенников накатил еще 25 декабря. До сих пор оне мня ниатпускають. 

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

И я изо всех сил надеюсь, что недоразумение исчерпано, и Вы на меня не в обиде. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Хто? ТС? Так он вроди ни на каво ни в абиде! Забил он на нас на всех. Нечутких таких казлов :(

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

DetSimen пишет:

bwn, зачем удалять правильные посты?  *смотрит строго*

я чонить непраильна сказал?

Дида, чес слово не я. Думал ты сам себя чистишь.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Иния! А кто же?

kohopat
Offline
Зарегистрирован: 04.01.2019

Форумчане здрасьте. Я новенький и тоже проблемы с компиляцией. Сейчас знакомлюсь с правилами, но думаю, проблему мою могу и сейчас озвучить. Можеть что подскажете. Месяцев 8 назад, работая с arduino ide, всё было прекрасно. Я готовые проекты повторял. Скетчи загружались, компилировались, загружались в arduino nano и работали. Сейчас же, любой скетч с готового проекта загружаю и при компиляции выдаёт ошибки постоянно. Некоторые победил, а вот последнюю не могу. Программа версии 1.8.7 стоит. Пробовал и на 1.5.7 эффект тотже. Программировать не умею, не студент, с железом дружу (собирал, прошивал микроконтроллеры фирмы atmel, въобщем собирал проекты полностью) Подскажите где копать. Тему новую не хочу открывать.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Для начала поместите текст скетча и сообщение об ошибках в нормальном виде (скетч как "code", а про ошибки скопировать и поместить в текстовом виде)

Евжений
Offline
Зарегистрирован: 04.01.2019

Там у вас кирилица в пути (имя пользователя на русском). Буквы ломаются и не компилируется. 

kohopat
Offline
Зарегистрирован: 04.01.2019
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 
0037LCD5110 myGLCD(8,7,6,4,5);
0038extern uint8_t SmallFont[];
0039extern uint8_t BigNumbers[];
0040//extern unsigned char TinyFont[];
0041byte ledContrast;
0042byte ledLight;
0043 
0044//подключаем заголовочный файл библиотеки EEPROM
0045#include <EEPROM.h>
0046 
0047#include <OneWire.h>
0048OneWire  temp(14);  // on pin 10 (a 4.7K resistor is necessary)
0049float cur_temp = -999;
0050byte temp_type_s;
0051byte temp_data[12];
0052byte temp_addr[8];
0053byte 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
0061DS1307 rtc(3, 2);
0062// Init a Time-data structure
0063Time  time;
0064unsigned long currentTime;
0065unsigned long loopTime;
0066 
0067 
0068byte key = 0;
0069byte prev_key = 0;
0070byte idle_key = 0;
0071//const int max_idle_key = 100; //цыклов не активности перед скринсейвером
0072#define max_idle_key  100 //цыклов не активности перед скринсейвером
0073 
0074int cur_menu = 0;
0075int cur_item = 0;
0076boolean cur_item_edit = false;
0077byte aquaT;                   // Требуемая температура воды
0078boolean CoolingEnabled;             // Разрешено ли охлаждение куллером
0079boolean light1 = false;
0080boolean light2 = false;
0081boolean air = false;
0082boolean CO2 = false;
0083byte kormMin = 0;             // Остаток времени для кормления мин
0084 
0085byte minCool = 0;  // минимальные обороты кулера для вентиляции крышки и охлаждения ламп
0086byte maxCool = 0;  // максимальные обороты для охлаждения воды
0087 
0088void 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//-----------------------------------------------------------------------------------
0208float 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;
0251const byte BUTTON_NONE   = 0;
0252const byte BUTTON_UP     = 1;
0253const byte BUTTON_DOWN   = 2;
0254const byte BUTTON_OK     = 3;
0255const byte BUTTON_CANCEL = 4;
0256 
0257int getPressedButton()
0258{
0259 byte KeyNum=0;
0260 int KeyValue1=0;
0261 int KeyValue2=0;
0262  
0263//Читаем в цикле аналоговый вход, для подавления дребезга и нестабильности читаем по два раза подряд, пока значения не будут равны.
0264//Если значения равны 1023 – значит не была нажата ни  одна клавиша.
0265do {
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//Возвращаем код нажатой клавиши
0284return KeyNum;
0285}
0286 
0287//-----------------------------------------------------------------------------------
0288void 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//-----------------------------------------------------------------------------------
0301void 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 
0337byte menu_hh;
0338byte menu_mi;
0339byte menu_dd;
0340byte menu_mm;
0341int menu_yyyy;
0342byte menu_dow;
0343byte menu_off;
0344byte menu_item_count;
0345int alertAdr;
0346byte curLoad;
0347 
0348byte prMin = 0;
0349//-----------------------------------------------------------------------------------
0350void 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 
0370boolean  new_hour = true;
0371byte secc = 0;
0372byte LED_sunrise = 0;
0373byte LED_cur_pos = 0;
0374byte udo_tim = 0;
0375byte bt;
0376//*****************************************************************************************
0377//*****************************************************************************************
0378void loop() {
0379currentTime = millis();
0380key = getPressedButton();
0381if((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  
1707loopTime = currentTime;  
1708
1709}

 

kohopat
Offline
Зарегистрирован: 04.01.2019

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.

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

kohopat
Offline
Зарегистрирован: 04.01.2019

Получаеться, если путь будет без кирилицы, проблема решиться? Например, если скетч будет находиться на диске С, в папках программы arduino ide. Я правильно понял?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

надо имя пользователя сделать латиницей, а если точнее у вас папка временных файлов в каталоге пользователя, весь бред виндовс из-за этого, IDE туда складывает файлы при компиляции и сложить не может

kohopat
Offline
Зарегистрирован: 04.01.2019

Спасибо,вроде понял свою ошибку. Попробую.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kohopat пишет:

Спасибо,вроде понял свою ошибку. Попробую.


И переменные среды окружения настроить как-то так:

kohopat
Offline
Зарегистрирован: 04.01.2019

Спасибо большое.