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

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

  1. sergey_67

    sergey_67 Нуб

    Здравствуйте ! Помогите пожалуйста со скейчем . Умом то понимаю , что или чего то нет или что то лишнее , но вот где искать ?
     

    Вложения:

    • 16.png
      16.png
      Размер файла:
      36,2 КБ
      Просмотров:
      672
  2. parovoZZ

    parovoZZ Гуру

    EEPROM.h подключай.
     
  3. b707

    b707 Гуру

    sergey_67 - для начала выложите код -
    а) целиком
    б) не в виде картинки. а в виде кода. Не забудьте правильно вставить его в сообщение)

    В начале каждого раздела есть прикрепленная тема, как правило оформлять сообщения
     
  4. sergey_67

    sergey_67 Нуб

    Проще весь проект отправить . Думаю , что так понятнее будет , но можно только ReadKey..
    //Функция прерывания для работы с меню вызывается раз в сек
    void timerIsr()
    {
    Time_Hallow_Prog++;
    if(Time_Hallow_Prog >= 3) HellowProg = false;
    if(Time_Hallow_Prog >= 200) Time_Hallow_Prog = 0;

    if(CountMenu > 0) //Если счетчик позиции меню не равен 0 то входим в меню
    {
    lcd.clear(); //очищаем экран
    switch(CountMenu) //Выбираем необходимый пункт меню для отображения на экране
    {
    case 1:
    {
    lcd.setCursor(0, 0);
    if(ServicesSTOP) lcd.print("SERVICES ON ");// Пункт меню включения сервисной функции котора отключает все каналы
    else lcd.print("SERVICES OFF");
    break;
    }
    case 2:
    {
    lcd.setCursor(0, 0);
    if(SLIV) lcd.print("SLIV OFF");// Пункт меню включения слива
    else lcd.print("SLIV ON ");// Пункт меню выключения слива
    break;
    }
    case 3:
    {
    lcd.setCursor(0, 0);
    lcd.print("EXIT");//Выход из меню
    break;
    }
    }
    }
    return;
    }

    //==========================================================================================================================

    //Функция чтения клавиатуры
    void ReadKey()
    {
    int Read_Button;
    Read_Button = analogRead(ButtonPin);
    if(Read_Button < 60) {rigt = true; digitalWrite( Feeder_Pin, HIGH);delay(1000);digitalWrite( Feeder_Pin, LOW);} //Если "RIGTH"; кормление с кнопки
    else
    if(Read_Button < 200) //Если "UP";
    {
    up = true; //Устанавливаем флаг нажатия на кнопку UP
    if(updown) //Если флаг отпущеной кнопки установлен то нажатие происходит первый раз
    {
    updown = false; //Сбрасываем флаг
    if(CountMenu != 0) //Если мы в меню
    {
    CountMenu--; //уменьшаем номер пункта меню
    if(CountMenu==0) CountMenu = 3; //Если номер равен 0 то переходим на последний пункт меню
    }
    else //Выбираем вариант экрана
    {
    lcd.clear();
    Displey--;
    if(Displey == 2) SetMessage((tm.Hour*60)+tm.Minute);
    if(Displey == 0) Displey = 3;
    }
    }
    }
    else
    if(Read_Button < 400) //Если "DOWT";
    {
    dow = true; //Устанавливаем флаг нажатия на кнопку DOWN
    if(dowdown) //Если флаг отпущеной кнопки установлен то нажатие происходит первый раз
    {
    dowdown = false; //Сбрасываем флаг
    if(CountMenu != 0) //Если мы в меню
    {
    CountMenu++; //увеличиваем номер пункта меню
    if(CountMenu==4) CountMenu = 1;//Если номер равен 3 то переходим на первый пункт меню
    }
    else //Выбираем вариант экрана
    {
    lcd.clear();
    Displey++;
    if(Displey == 2) SetMessage((tm.Hour*60)+tm.Minute);
    if(Displey == 4) Displey = 1;
    }
    }
    }
    else
    if(Read_Button < 600) lef = true; //Если "LEFT";
    else
    if(Read_Button < 800) //Если "SELECT";
    {
    selup = true; //Устанавливаем флаг нажатия на кнопку SELECT
    if(seldown) //Если флаг отпущеной кнопки установлен то нажатие происходит первый раз
    {
    if(CountMenu==0) CountMenu = 1; //Если указатель на пункт меню равен 0 то переходим на первый пункт меню
    else
    if(CountMenu==1) //Если первый пункт меню включение сервисной функции
    {
    if(ServicesSTOP)
    {
    ServicesSTOP = false; //Сбрасываем разрешающий флаг запрещаем любые действия программе
    EEPROM.write(2886, 0);

    digitalWrite( RelePin_1, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_2, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_3, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_4, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_5, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_6, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_7, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_8, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_9, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_10, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_11, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_12, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_13, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_14, HIGH); //Отключаем все каналы
    digitalWrite( RelePin_15, HIGH); //Отключаем все каналы
    digitalWrite( Cooling_Pin, LOW); //Отключаем все каналы
    digitalWrite( Ventilation_Pin, LOW); //Отключаем все каналы
    lcd.clear(); //очищаем экран и выходим с меню
    lcd.setCursor(2, 1);
    lcd.print("SERVICES ON");
    CountMenu = 0;
    }
    else //Если выключаем сервисной функции
    {
    ServicesSTOP = true; //Устанавливаем флаг разрешающий работу программы
    EEPROM.write(2886, 255);

    //Проверка таблицы времен и включение соответствующего канала
    ReadTabsSetRelay();

    //Определяем и отображаем следующее событие
    SetMessage((tm.Hour*60)+tm.Minute);

    lcd.clear();
    CountMenu = 0;//очищаем экран и выходим с меню
    }
    }
    else
    if(CountMenu==2) //Если второй пункт меню слив
    {
    if(!SLIV)
    {
    Displey = 2;
    SLIV = true;

    SlivStart();
    lcd.clear();
    CountMenu = 0;
    }
    else
    {
    SlivStop();

    lcd.clear();
    CountMenu = 0;
    }
    }
    else
    if(CountMenu==3) {lcd.clear();CountMenu = 0;} //Если установлен пункт меню EXIT очищаем экран и выходим с меню
    seldown = false;
    }
    }
    else {selup = false; seldown = true; lef = false; dow = false; dowdown = true;up = false; updown = true;rigt = false;}
    }

     
  5. SergeiL

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

    В начале файла есть строка:
    Код (C++):
    #include <EEPROM.h>
    Что за плата используется?
     
  6. sergey_67

    sergey_67 Нуб

    Arduino Mega 2560 ... ну и прочие навесы ...
     
  7. parovoZZ

    parovoZZ Гуру

    Где высмотрел? Я не вижу ничего.
     
  8. sergey_67

    sergey_67 Нуб

    Нашёл оригинал ( слава богу сохранился ) ... Только не понятно .... ни чего не делал , не исправлял , а все файлы кастрированные ... Теперь другая проблема :
    /*
    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;


    И все библиотеки нашлись :

    /* Подключаем библиотеку для работы с LCD */
    #include <LiquidCrystal.h>
    #include <Wire.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <DS1307RTC.h>
    #include <Time.h>
    #include <TimerOne.h>
    #include <EEPROM.h>

    #include <SPI.h>
    #include <SD.h>
    #include <Ethernet.h>
    #include <EthernetUdp.h>
     
  9. SergeiL

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

    Да выложите Вы полный код, а то так не понятно.
    С первого взгляда не хватает закрытия комментария " */ "

    Код (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)
    {
    код1.png

    Вставляйте код через кнопку:
    код.png
     
    Последнее редактирование: 14 май 2019
  10. b707

    b707 Гуру

    Сергей_67, вы похоже так и не прочитали прикрепленную тему. Я же просил - код вставлять как код. Раньше вы его картинкой постили, теперь вообще непонятно как. Вы издеваетесь?
     
  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. SergeiL

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

    Закрытие комментария */ поставьте :)
     
  13. b707

    b707 Гуру

    обратите внимание, что у вас весь код красным цветом. Это значит, что это все - комментарий, а кода тут нет вовсе.
     
  14. parovoZZ

    parovoZZ Гуру

    так у тебя в коде нет ни одной строчки кода. Только комментарии)))
     
  15. b707

    b707 Гуру

    Сергей_67 - такое впечатление, что этот код для вас - китайская грамота. Если вы его нашли в инете и в нем ни строчки не понимаете - на помощь особо не рассчитывайте, тут помогают тем, кто пишет код сам.
     
  16. sergey_67

    sergey_67 Нуб

    Дело в том , что три месяца назад этот код работал как часы и проблем не было . Дальше сам буду разбираться ... очередную ошибку выдал .. Но спасибо за помощь ...
     
  17. SergeiL

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

    Закрытие комментария поставили?
    После этого компилируйте. Что получилось?
     
  18. sergey_67

    sergey_67 Нуб

    Поставил , но в следующем файле в самом начале выдал :
    expected initializer before 'void'
     
  19. parovoZZ

    parovoZZ Гуру

    Ладно, давайте поможем. Возраст же. Все в нем будем. Голосуем. Я ЗА!
     
  20. sergey_67

    sergey_67 Нуб

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