Сохранение позиции Servo в EEPROM

Тема в разделе "Arduino & Shields", создана пользователем Otto, 4 янв 2017.

  1. Otto

    Otto Нерд

    Не получается сделать сохранение и чтение позиции Серво в EEPROM.
    Что бы при включении Автоповоротов Серво не уходил в позицию Ноль или 180 градусов.....

    Код (C++):
    /*тут глобальные переменные */
    int S;       // переменная для преобразования автоповоротов серво
    nt E_1;   // переменная для экономии ресурсов ОЗУ EEPROM

    /*Тут переменные из класса...(локальные)*/
    Servo ServoPovoroti;   // сервопривод
    int pos;                  // текущее положение сервы
    int AutoIncrement;        // увеличиваем перемещение на каждом шаге для Автоповоротов
    nt updateInterval;       // промежуток времени между обновлениями
    unsigned long lastUpdate; // последнее обновление положения

        Sweeper (int interval) //часть кода из класса...
        {
          updateInterval = interval;
          AutoIncrement = 1; // шаг приращения положения сервы для Автоповоротов
    }

    // тут идёт другой  код...

    void Update() //Функция отвечающая за Автоповороты серво
        {
    //      if (Auto_Povorot ==  true) E_2 = 1;
    //      if (Auto_Povorot == false && E_2 == 1)EEPROM.write(3, S / 118), E_2 = 0;
         
          if ((millis() - lastUpdate) > updateInterval)  // время обновлять
          {
            lastUpdate = millis();     // записываем в lastUpdate новое значение
            pos += AutoIncrement;      // AutoIncrement прибавляем +1 и присваиваем pos'у
            ServoPovoroti.write(pos);  // Поворачиваем положение Сервы в соответствии с pos.
            if ((pos >= 130) || (pos <= 0)) // конец вращения и обратно...
            {
              // обратное направление сервы
              AutoIncrement = -AutoIncrement;
            }
          }
        }


    void setup() {
      ServoPovoroti.Attach(9);     // Servo подключён на цифровой вход (pin 9)
      /* После подключения питания или перезагрузки, читаем значение из ячейки №1 ОЗУ
        умножаем это значение на 118 и записываем его в переменную L
        делаем это в void setup то бишь только один раз в момент подключения питания*/

      S = EEPROM.read(3) * 118;
    }


    void loop() {
      if (Auto_Povorot == true) {   //Если Auto_Povorot истина...
        ServoPovoroti.Update();     // ...тогда включаем Автоповороты серво
      } // бла бла бла...
    }