'EEPROM' was not declared in this scope во время компиляции

Тема в разделе "Arduino & Shields", создана пользователем sergey_67, 14 май 2019.

  1. parovoZZ

    parovoZZ Гуру

    Бейсик, на сколько я помню, язык не императивный...
     
  2. SergeiL

    SergeiL Оракул Модератор

    В том, что Вы выложили нет включения библиотек.
    Запакуйте каталог, выложите пакованный файл, я посмотрю, попробую скомпилировать.
     
  3. ИгорьК

    ИгорьК Гуру

    Я в этом возрасте еще про МК не знал.
     
    b707 нравится это.
  4. sergey_67

    sergey_67 Нуб

    Чего то не хочет zip файл загружать ... размер всего два метра ...
     
  5. b707

    b707 Гуру

    нифига :) ТС всего-то на пару лет меня старше.Я планирую в его возрасте начать третий иностранный учить :)
     
    ИгорьК нравится это.
  6. b707

    b707 Гуру

    кто не хочет? куда не хочет? а по башке?
    хотя если это форум - то 2 метра точно не сюда, код для ардуины столько быть не может, а всякую "клубничку" сюда нельзя, здесь дети...
     
  7. SergeiL

    SergeiL Оракул Модератор

    И что это?
     
  8. sergey_67

    sergey_67 Нуб

    Ну тогда так :
     

    Вложения:

    • index.zip
      Размер файла:
      600,9 КБ
      Просмотров:
      237
  9. SergeiL

    SergeiL Оракул Модератор

    Смотрю.
     
  10. Igor68

    Igor68 Гуру

    Ну что это Вы? устали?
    Вот... ребята уже сказали - оформить комментарий в начале (файл ChangeWater.ino):
    Код (C++):
    /*
    2887      по каким дням недели осуществлять подмену воды            Байт              
                                                                 7   6   5   4   3   2   1   0
                                                                 0  Пн. Вт. Ср. Чт. Пт. Сб. Вс.  
    время включения слива                                                            
    2888  2889  понедельник час мин
    2890  2891  вторник час мин                                                          
    2892  2893  среда час мин
    2894  2895  четверг час мин
    2896  2897  пятница час мин                                                          
    2898  2899  суббота час мин
    2900  2901  воскресения час мин

    длительность слива
    2902  понедельник
    2903  вторник
    2904  среда
    2905  четверг
    2906  пятница
    2907  суббота
    2908  воскресения
    */
    а в конце уберите это: "*/"
     
  11. sergey_67

    sergey_67 Нуб

    Век учись , век живи , но больному легче не стало :
    Код (C++):
    /*
    2887      по каким дням недели осуществлять подмену воды            Байт              
                                                                 7   6   5   4   3   2   1   0
                                                                 0  Пн. Вт. Ср. Чт. Пт. Сб. Вс.  
    время включения слива                                                            
    2888  2889  понедельник час мин
    2890  2891  вторник час мин                                                          
    2892  2893  среда час мин
    2894  2895  четверг час мин
    2896  2897  пятница час мин                                                          
    2898  2899  суббота час мин
    2900  2901  воскресения час мин

    длительность слива
    2902  понедельник
    2903  вторник
    2904  среда
    2905  четверг
    2906  пятница
    2907  суббота
    2908  воскресения
    */


    void setAutoChangeWater(byte DN, byte Chas, byte Min, int Dlit, bool OK)
    {
      byte temp, DN_Old, M;
      lcd.clear();
      lcd.setCursor(0, 0);lcd.print("AutoChangeWater");
      lcd.setCursor(2, 1);lcd.print("PLEASE WAIT");
      DN_Old = EEPROM.read(2887);

    //Определяем маску для стирания дня недели
      if(DN == 1 && !OK) M = 254; else //Определяем для каналов маску 11111110
      if(DN == 2 && !OK) M = 253; else //Определяем для каналов маску 11111101
      if(DN == 3 && !OK) M = 251; else //Определяем для каналов маску 11111011
      if(DN == 4 && !OK) M = 247; else //Определяем для каналов маску 11110111
      if(DN == 5 && !OK) M = 239; else //Определяем для каналов маску 11101111
      if(DN == 6 && !OK) M = 223; else //Определяем для каналов маску 11011111
      if(DN == 7 && !OK) M = 191;      //Определяем для каналов маску 10111111

    //Определяем маску для установки дня недели
      if(DN == 1 && OK) M = 1; else  //Определяем для каналов маску 00000001
      if(DN == 2 && OK) M = 2; else  //Определяем для каналов маску 00000010
      if(DN == 3 && OK) M = 4; else  //Определяем для каналов маску 00000100
      if(DN == 4 && OK) M = 8; else  //Определяем для каналов маску 00001000
      if(DN == 5 && OK) M = 16; else //Определяем для каналов маску 00010000
      if(DN == 6 && OK) M = 32; else //Определяем для каналов маску 00100000
      if(DN == 7 && OK) M = 64;      //Определяем для каналов маску 01000000

      if(OK)
      {
        if(!(DN_Old & M)) DN_Old += M; //Если день еще не установлен то добавляем
      }
      else
        DN_Old = DN_Old & M; //Удоляем день недели
     
      EEPROM.write(2887, DN_Old);  //Записываем дни недели по которым осуществлять слив после изменения

      if(OK)
      {
        EEPROM.write(2886 + (DN*2), Chas);  //Записываем часы когда начинать слив
        EEPROM.write(2887 + (DN*2), Min);   //Записываем минуты  когда начинать слив
        EEPROM.write(2901 + DN, Dlit);      //Записываем время в течении которого осуществлять слив
        setTimeTad(10, Chas, Min, Chas, Min+1);
      }
      lcd.clear();
      return;
    }


    //==================================================================================================
    void AutoChangeWater(byte Chas, byte Min)
    {
      byte Dn =  EEPROM.read(2887);
      byte M;
      int T =0;

      if(WDAY == 1) M = 1;  //Определяем для каналов маску 00000001
      if(WDAY == 2) M = 2;  //Определяем для каналов маску 00000010
      if(WDAY == 3) M = 4;  //Определяем для каналов маску 00000100
      if(WDAY == 4) M = 8;  //Определяем для каналов маску 00001000
      if(WDAY == 5) M = 16; //Определяем для каналов маску 00010000
      if(WDAY == 6) M = 32; //Определяем для каналов маску 00100000
      if(WDAY == 7) M = 64;      //Определяем для каналов маску 01000000
     
      if(Dn & M)
      {
        if(((M == 1) && (EEPROM.read(2888) == Chas) && (EEPROM.read(2889) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2902);
        } //Если понедельник
         
        if(((M == 2) && (EEPROM.read(2890) == Chas) && (EEPROM.read(2891) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2903);
        } //Если вторник
         
        if(((M == 4) && (EEPROM.read(2892) == Chas) && (EEPROM.read(2893) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2904);
        } //Если среда
         
        if(((M == 8)  && (EEPROM.read(2894) == Chas) && (EEPROM.read(2895) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2905);
        } //Если четверг
         
        if(((M == 16)  && (EEPROM.read(2896) == Chas) && (EEPROM.read(2897) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2906);
        } //Если пятница
         
        if(((M == 32)  && (EEPROM.read(2898) == Chas) && (EEPROM.read(2899) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2907);
        } //Если суббота
         
        if(((M == 64)  && (EEPROM.read(2900) == Chas) && (EEPROM.read(2901) == Min)))
        {
          SLIV = true;
          SlivMin = 0;
          SlivDlit = EEPROM.read(2908);
        } //Если воскресение

        if(SLIV)
        {
          SlivStart();

          T = (Chas*60) +  Min;
          T += SlivDlit;
          lcd.setCursor(0, 1); //Очищаем вторую строку
          lcd.print(String("CLIV  OFF"));  //если бит меняется с 1 на 0 то выклучение
          lcd.setCursor(11, 1); //Очищаем часть экрана где выводится время след события
          lcd.print(String(print2digits(int(T/60))) + String(':') + String(print2digits(T - (int(T/60)*60)))); //Выводим время следующего события
        }
      }
      return;
    }
     
  12. Igor68

    Igor68 Гуру

    С моей точки зрения я заменил бы это:
    Код (C++):
    //Определяем маску для стирания дня недели
      if(DN == 1 && !OK) M = 254; else //Определяем для каналов маску 11111110
      if(DN == 2 && !OK) M = 253; else //Определяем для каналов маску 11111101
      if(DN == 3 && !OK) M = 251; else //Определяем для каналов маску 11111011
      if(DN == 4 && !OK) M = 247; else //Определяем для каналов маску 11110111
      if(DN == 5 && !OK) M = 239; else //Определяем для каналов маску 11101111
      if(DN == 6 && !OK) M = 223; else //Определяем для каналов маску 11011111
      if(DN == 7 && !OK) M = 191;      //Определяем для каналов маску 10111111

    //Определяем маску для установки дня недели
      if(DN == 1 && OK) M = 1; else  //Определяем для каналов маску 00000001
      if(DN == 2 && OK) M = 2; else  //Определяем для каналов маску 00000010
      if(DN == 3 && OK) M = 4; else  //Определяем для каналов маску 00000100
      if(DN == 4 && OK) M = 8; else  //Определяем для каналов маску 00001000
      if(DN == 5 && OK) M = 16; else //Определяем для каналов маску 00010000
      if(DN == 6 && OK) M = 32; else //Определяем для каналов маску 00100000
      if(DN == 7 && OK) M = 64;      //Определяем для каналов маску 01000000
    на это:
    Код (C++):
    switch(DN) {
        case 1:
            if(OK)
                M = 1;        //Определяем для каналов маску 00000001
            else
                M = (~(1));    //Определяем для каналов маску 11111110
            break;
        case 2:
            if(OK)
                M = 2;        //Определяем для каналов маску 00000010
            else
                M = (~(2));    //Определяем для каналов маску 11111101
            break;
        case 3:
            if(OK)
                M = 4;        //Определяем для каналов маску 00000100
            else
                M = (~(4));    //Определяем для каналов маску 11111011
            break;
        case 4:
            if(OK)
                M = 8;        //Определяем для каналов маску 00001000
            else
                M = (~(8));    //Определяем для каналов маску 11110111
            break;
        case 5:
            if(OK)
                M = 16;        //Определяем для каналов маску 00010000
            else
                M = (~(16);    //Определяем для каналов маску 11101111
            break;
        case 6:
            if(OK)
                M = 32;        //Определяем для каналов маску 00100000
            else
                M = (~(32));    //Определяем для каналов маску 11011111
            break;
        case 7:
            if(OK)
                M = 64;        //Определяем для каналов маску 01000000
            else
                M = (~(64));    //Определяем для каналов маску 10111111
            break;
    }
    А где определён "OK", "M","DN" и "DN_Old"?

    А это:
    Код (C++):
    if(OK)
      {
        if(!(DN_Old & M)) DN_Old += M; //Если день еще не установлен то добавляем
      }
      else
        DN_Old = DN_Old & M; //Удоляем день недели
    Если я правильно понял заменил бы на это:
    Код (C++):
    if(OK)
        if(!(DN_Old & M)) DN_Old |= M; //Если день еще не установлен то добавляем
      else
        DN_Old &= M; //Удоляем день недели
    Честно сказать надо вообще проще... сделав всё в swich-case

    А вот дальше надо смотреть...
     
    Последнее редактирование: 15 май 2019
  13. sergey_67

    sergey_67 Нуб

    Это я конечно сделаю , но всё хуже чем казалось ... я по своей глупости решил , что если мне чего то не нужно , то можно тупо поставить слешь ... сейчас всё поубирал - затыкаться стал почти в самом начале ... может с библиотекой include <DS1307RTC.h> что то не так ???
     
  14. Igor68

    Igor68 Гуру

    Ну тогда хоть результат (отчёт) компиляции.
     
  15. Igor68

    Igor68 Гуру

    Ухожу. Работы много. На дом взял.
     
  16. sergey_67

    sergey_67 Нуб

    Слишком много ...
    Код (C++):
    Arduino: 1.8.5 (Windows 7), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    In file included from C:\Users\sergey1967\Desktop\index\index\index.ino:60:0:

    C:\Users\sergey1967\Documents\Arduino\libraries\DS1307RTC-1.4.0/DS1307RTC.h:19:22: error: 'tmElements_t' has not been declared

         static bool read(tmElements_t &tm);

                          ^

    C:\Users\sergey1967\Documents\Arduino\libraries\DS1307RTC-1.4.0/DS1307RTC.h:20:23: error: 'tmElements_t' has not been declared

         static bool write(tmElements_t &tm);

                           ^

    index:143: error: 'tmElements_t' does not name a type

    tmElements_t tm;

    ^

    index:169: error: expected initializer before 'Udp'

    EthernetUDP Udp;

                 ^

    C:\Users\sergey1967\Desktop\index\index\index.ino: In function 'void setup()':

    index:303: error: 'insideThermometer' was not declared in this scope

       sensors.getAddress(insideThermometer, 0);

                          ^

    index:304: error: 'outsideThermometer' was not declared in this scope

       sensors.getAddress(outsideThermometer, 1);

                          ^

    index:318: error: Класс Udp переименован в EthernetUdp.
    С версии Arduino 1.0 класс Udp в библиотеке Ethernet переименован в EthernetUdp.


       Udp.begin(localPort);

       ^

    index:395: error: 'timerIsr' was not declared in this scope

       Timer1.attachInterrupt( timerIsr ); // прерывание РїРѕ таймеру вызывает функцию timerIsr

                               ^

    C:\Users\sergey1967\Desktop\index\index\index.ino: In function 'void loop()':

    index:419: error: 'NightLED' was not declared in this scope

       NightLED(LEDON);

                     ^

    index:424: error: 'ReadEthernetUDP' was not declared in this scope

       ReadEthernetUDP();

                       ^

    index:429: error: 'ReadKey' was not declared in this scope

       ReadKey();

               ^

    index:439: error: expected primary-expression before ')' token

        if (RTC.read(tm))  //Чибаем дату Рё время РёР· RTC    {

                       ^

    index:441: error: 'print2digits' was not declared in this scope

          Dat += String(print2digits(tm.Day));

                                           ^

    index:441: error: expected primary-expression before '(' token

          Dat += String(print2digits(tm.Day));

                       ^

    index:441: error: expected primary-expression before '.' token

          Dat += String(print2digits(tm.Day));

                                       ^

    index:443: error: 'print2digits' was not declared in this scope

          Dat += String(print2digits(tm.Month));

                                             ^

    index:443: error: expected primary-expression before '(' token

          Dat += String(print2digits(tm.Month));

                       ^

    index:443: error: expected primary-expression before '.' token

          Dat += String(print2digits(tm.Month));

                                       ^

    index:445: error: 'tmYearToCalendar' was not declared in this scope

          Dat += String(tmYearToCalendar(tm.Year));

                                                ^

    index:445: error: expected primary-expression before '(' token

          Dat += String(tmYearToCalendar(tm.Year));

                       ^

    index:445: error: expected primary-expression before '.' token

          Dat += String(tmYearToCalendar(tm.Year));

                                           ^

    index:448: error: expected primary-expression before '.' token

          Tim += print2digits(tm.Hour);      //Заносим РІ строку часы если меньше 10 то добавляем 0 пример 09

                                ^

    index:450: error: expected primary-expression before '.' token

          Tim += print2digits(tm.Minute);    //Заносим РІ строку минуты если меньше 10 то добавляем 0 пример 09

                                ^

    index:452: error: expected primary-expression before '.' token

          Tim += print2digits(tm.Second);    //Заносим РІ строку секунды если меньше 10 то добавляем 0 пример 09

                                ^

    index:454: error: expected primary-expression before '.' token

          WDAY = tm.Wday;   //Считываем день недели

                   ^

    index:463: error: 'ReadDS18B20' was not declared in this scope

            ReadDS18B20();

                        ^

    index:468: error: expected primary-expression before '.' token

          if(OldMin != tm.Minute && ServicesSTOP) // Проверяем если прошла минута Рё РЅРµ стоит сервисный запрет то

                         ^

    index:478: error: 'SlivStop' was not declared in this scope

              if(SlivMin >= 15) SlivStop();   //Проверяем РЅРµ вышло ли время слива, если вышло то отключаем слив РІРѕРґС‹

                                         ^

    index:484: error: 'ReadTabsSetRelay' was not declared in this scope

            ReadTabsSetRelay();    

                             ^

    index:489: error: expected primary-expression before '.' token

            if(Displey == 2) SetMessage((tm.Hour*60)+tm.Minute);

                                           ^

    index:489: error: expected primary-expression before '.' token

            if(Displey == 2) SetMessage((tm.Hour*60)+tm.Minute);

                                                       ^

    index:489: error: 'SetMessage' was not declared in this scope

            if(Displey == 2) SetMessage((tm.Hour*60)+tm.Minute);

                                                              ^

    index:493: error: expected primary-expression before '.' token

          OldMin = tm.Minute;  //сохраняем текущее количество РјРёРЅСѓС‚

                     ^

    index:498: error: 'ReadWaterLevelSensor' was not declared in this scope

          ReadWaterLevelSensor();

                               ^

    index:508: error: 'SlivStop' was not declared in this scope

            if(CountWaterLiter >= SlivDlit) {SlivStop(); SetMessage((tm.Hour*60)+tm.Minute+1);} //если слито необходимое количество литров то останавливаем слив

                                                      ^

    index:508: error: expected primary-expression before '.' token

            if(CountWaterLiter >= SlivDlit) {SlivStop(); SetMessage((tm.Hour*60)+tm.Minute+1);} //если слито необходимое количество литров то останавливаем слив

                                                                       ^

    index:508: error: expected primary-expression before '.' token

            if(CountWaterLiter >= SlivDlit) {SlivStop(); SetMessage((tm.Hour*60)+tm.Minute+1);} //если слито необходимое количество литров то останавливаем слив

                                                                                   ^

    index:508: error: 'SetMessage' was not declared in this scope

            if(CountWaterLiter >= SlivDlit) {SlivStop(); SetMessage((tm.Hour*60)+tm.Minute+1);} //если слито необходимое количество литров то останавливаем слив

                                                                                            ^

    index:590: error: expected primary-expression before ')' token

        if (RTC.read(tm))

                       ^

    index:591: error: expected primary-expression before 'else'

        else

        ^

    C:\Users\sergey1967\Desktop\index\index\index.ino: At global scope:

    index:609: error: expected unqualified-id before 'if'

      if(CountMenu==0)

      ^

    index:614: error: expected declaration before '}' token

    }

    ^

    exit status 1
    'tmElements_t' does not name a type

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

    sergey_67 Нуб

    tmElements_t tm; вроде победил ...теперь sensors.getAddress(insideThermometer, 0);
     
  18. SergeiL

    SergeiL Оракул Модератор

    Как победили tmElements_t ?
    Поменяли
    Код (C++):
    include <Time.h>
    на
    Код (C++):
    include <TimeLib.h>
    ?

    Дальше нужно разбираться с тем, что Вы закомментировали.
     
  19. sergey_67

    sergey_67 Нуб

    Нет поменял DS1307RTC на DS1307RTC-master ...
    Я все коменты снял ещё вчера ... но всё же думаю , что проблемы с библиотеками ... их в интернете тьма тьмущая и подозреваю , что название одно и тоже , а содержание разное ...
     
  20. SergeiL

    SergeiL Оракул Модератор

    Я компилировал, но у меня ругается на нехватку закомментированых переменных и функций.