Помогите с программой

Тема в разделе "Arduino & Shields", создана пользователем Antony89, 4 июл 2021.

  1. Antony89

    Antony89 Нуб

    Здраствуйте. Идея следующая: необходимо чтобы сервопривод поворачивался в определенно заданное время на 90 градусов на 1,5 сек и возвращался обратно два раза в день. Использую ардуино UNO , сервопривод, модуль реального времени DS 1302. Все отдельно работает, а как прописать чтобы это происходило в определенное время не выходит. И я решил без лишних заморочек(кнопок настройки, дисплеев вывода), а просто сразу вшить интервал и время работы.

    Код (C++):
    #include <Servo.h>
    #include <iarduino_RTC.h>                               // подключение библиотеки
    iarduino_RTC time(RTC_DS1302,8,6,7);         // Задаем правильно название нашего модуля, а также указываем к каким цифровым пинам его подключаем(в нашем случае – 8,6,7)
    #include <Wire.h>                             // библиотека для устройств I2C
    #include <LiquidCrystal_I2C.h>       // подключаем библиотеку для дисплея
    #define feed_period
    LiquidCrystal_I2C LCD(0x27,16,2);
    Servo servo1;
    void setup() {
        servo1.attach(5);
        delay(300);                                            // задержка в 300мс перед началом инициализации
        Serial.begin(9600);                              // устанавливаем скорость передачи данных с модулей в 9600 бод
        LCD.init();            // инициализация LCD дисплея
        LCD.backlight();  // включение подсветки дисплея
        time.begin();                                       // функция служит для инициализации работы модуля
    // Ниже у нас прописываются временные значения в виде секунд, минут, часов, даты, включая месяц и год, и также можете указать день недели
        //time.settime(25,20,19,13,6,21,6);  // 10  сек, 10 мин, 10 час, 4 , октября, 2017 года, среда
    }
    void loop(){

     
           if(millis()%1000==0) {           //  задержка в одну секунду перед выводом времени в последовательный порт
          Serial.println(time.gettime("d-m-Y, H:i:s, D"));   // выводим время
          LCD.setCursor(0,0);
          LCD.print(time.gettime("d M Y, D"));
          LCD.setCursor(4,1);
          LCD.print(time.gettime("H:i:s"));
          delay(1);  // делаем небольшую задержку, чтобы не выводить время слишком часто
     
    {
    getTime () ;
      if (Hour = 7 && Minute = 0 && Second = 0)
      {
      servo1.write(0);
      delay(1500);
      servo1.write(90);
      delay(1500);
    }
    }
          }
    }
     
    Последнее редактирование: 5 июл 2021
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. В коде два loop-а. Компилятор заматерится на это.
    2. Вам что надо - чтобы сервы срабатывали через определенный интервал времени, или в определенное время суток ? Если через интервал, то готовьтесь к нарастающей погрешности относительно времени суток.
     
    Последнее редактирование: 4 июл 2021
  3. b707

    b707 Гуру

    откуда возьмется погрешность. если у ТС серво запускается всегда ровно в 7 часов по RTC ?
     
  4. b707

    b707 Гуру

    послушайте, вы этот код уже запостили в 3 или 4 ветки на разных форумах. Вопрос-то в чем? "Не выходит" - это не вопрос. Если вам нужна помощь - задавайте конкретные вопросы. А если хотите, чтобы за вас написали код - тогда обращайтесь в платный раздел
     
    Andrey12 нравится это.
  5. Airbus

    Airbus Радиохулиган Модератор

    Обычные часы с будильником только вместо Куку поворачиваем Серву. Можно вместе с Куку. Скетчей будильников в инете море. У того же Пушного Звера.


    А вот 1302 г@вно редкостное. Я бы взял чтото другое получше
     
    Последнее редактирование: 5 июл 2021
    Andrey12 нравится это.
  6. Antony89

    Antony89 Нуб

    Вопрос у меня следующий: Правильно ли я обращаюсь к модулю часов? Или по другому это пишется? Я просмотрел подобные программы что к модулю 1307 так обращаются.

    Про 2 loop'a я понял.
     
  7. ivan_alexoff

    ivan_alexoff Гик

    Открываете примеры идущие с библиотекой и смотрите
     
    Andrey12 нравится это.
  8. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Установите Протеус 8.6 и симулируйте в нем. В 99% случаев (НО НЕ ВСЕГДА !!!) работает однохренственно что в симуляторе, что в реале. А конкретно по вашему вопросу ответ - либо вы лезете в даташит и пишете код сами (там в основном "ногодрыг" - digitalWrite() и digitalRead() ), либо берете чью-то библиотеку. Как захотел разработчик библы - так и будет правильно. Обычно с библой идут примеры, ими и пользуйтесь.
    ПС. Например в Протеусной модели Ардуины - не работает прием на softSerial - е !!!
     
    Последнее редактирование: 5 июл 2021
  9. b707

    b707 Гуру

    Antony, ваш вопрос опять абсолютно не по делу.
    Вы этот код пробовали компилировать? - уверен что нет.
    Если бы вы попробовали - вы бы сами убедились, что к часам обращаетесь неверно.. Но вы поленились что-либо делать сами и вместо этого пишете на форум.
    Так вот - запомните - выкладывать на форум код. который даже не компилится - это неужение к участникам.
    Прежде чем задавать вопрос - вы должны сделать все, чтобы решить проблему самостоятельно.
    Попытайтесь скомпилировать код, почитайте сообщения об ошибках. попробуйте их исправить. А вот когда это все сделаете - только тогда приходите.
     
    Последнее редактирование: 5 июл 2021
    Airbus и Andrey12 нравится это.