Как вращать сервопривод каждые 12 часов с помощью модуля RTC?

Я пытаюсь сделать автоматическую кормушку для рыб, чтобы кормить рыб каждые 6 часов. Я хочу внедрить модуль RTC в свой код. До сих пор я использовал только Arduino и сервопривод, используя это как код:

#include <Servo.h>

Servo myservo;  // создаем сервообъект для управления сервоприводом
// на большинстве плат можно создать двенадцать сервообъектов

int pos = 0;    // переменная для хранения положения сервопривода

void setup() {
  myservo.attach(9);  // присоединяем сервопривод к контакту 9 к объекту сервопривода
  myservo.write(15);
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // переход от 0 градусов к 180 градусам
    // с шагом в 1 градус
    myservo.write(pos);              // сообщаем сервоприводу перейти в позицию в переменной 'pos'
    delay(15);                       // ждем 15 мс, пока сервопривод не достигнет позиции
  }
  for (pos = 180; pos >= 0; pos -= 1) { // переход от 180 градусов к 0 градусам
    myservo.write(pos);              // сообщаем сервоприводу перейти в позицию в переменной 'pos'
    delay(15);                       // ждем 15 мс, пока сервопривод не достигнет позиции
  }
      // ждем 12 часов
    delay(6 * 3600000);
}

У меня есть модуль RTC DS1302. Эту библиотеку можно скачать здесь Код часов таков:

// DS1302_Serial_Hard
// Copyright (C) Rinky-Dink Electronics, 2015 г., Хеннинг Карлсен. Все права защищены
// Интернет: http://www.RinkyDinkElectronics.com/
//
// Быстрая демонстрация того, как использовать мою библиотеку DS1302 для
// получаем время и дату-дату, чтобы вы могли манипулировать ими.
//
// Я предполагаю, что вы знаете, как подключить DS1302.
// DS1302: вывод CE -> Ардуино цифровой 2
// Контакт ввода/вывода -> Ардуино цифровой 3
// контакт SCLK -> Ардуино цифровой 4

#include <DS1302.h>

// Запускаем DS1302
DS1302 rtc(2, 3, 4);

// Инициируем структуру данных времени
Time t;

void setup()
{
  // Установить часы в режим работы и отключить защиту от записи
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Настройка последовательного соединения
  Serial.begin(9600);

  // Следующие строки можно закомментировать, чтобы использовать значения, уже сохраненные в DS1302
  rtc.setDOW(FRIDAY);        // Установить день недели на ПЯТНИЦУ
  rtc.setTime(12, 0, 0);     // Установите время на 12:00:00 (24-часовой формат)
  rtc.setDate(6, 8, 2010);   // Установите дату на 6 августа 2010 г.
}

void loop()
{
  // Получить данные от DS1302
  t = rtc.getTime();
  
  // Отправляем дату по последовательному соединению
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Отправляем день недели и время
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Отправляем разделитель для удобства чтения
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Подождите одну секунду, прежде чем повторить :)
  delay (1000);
}

Итак, вопрос в том, как мне настроить свой код для работы с RTC, чтобы сервопривод перемещался каждые 6 часов?

, 👍1

Обсуждение

если вы можете распечатать время, то вы можете управлять сервоприводом, когда время равно заданному значению ... непонятно, что вас беспокоит, @jsotola

У меня проблемы с кодированием, если честно. Как вы думаете, вы могли бы помочь мне с этим?, @Tiago Kotryk

начните с нижнего кода... вставьте строку, которая печатает "привет", когда секунды равны 10, @jsotola

Спасибо за помощь, попробую разобраться с вашими советами..., @Tiago Kotryk

Стари, сделав простейшую модификацию существующего кода... печать сообщения, когда секунда имеет определенное значение, научит вас, как запускать команду, когда переменная содержит определенное значение... выбор секунд означает, что вам не нужно долго ждать для результатов... затем вы добавляете код, который перемещает сервопривод... который также будет двигаться каждые 60 секунд... когда он будет работать правильно, затем измените отслеживаемую переменную на часы, @jsotola

Это мой первый раз, когда я пытаюсь кодировать, те коды, которые вы видите, найдены с открытым исходным кодом, хахаха ... То, что вы сказали, звучит сложно для меня. Но я думаю, это будет мой лучший шанс, если никто больше не появится, чтобы помочь мне выбраться из этого хахаха. Спасибо дружище., @Tiago Kotryk

Если вы думаете, что можете помочь мне в дальнейшем, изменив этот код для меня, я был бы очень признателен! Я и моя рыба! хахаха, @Tiago Kotryk

начните с опробования примеров кода, включенных в IDE arduino... узнайте, как работает условный код, используя операторы if, @jsotola

Отвечает ли это на ваш вопрос? [Как объединить 2 разных скетча вместе], @sempaiscuba

Отвечает ли это на ваш вопрос? [Код для автоматической подачи не работает](https://arduinoprosto.ru/q/77999/code-for-fish-auto-feeder-not-working), @Delta_G


1 ответ


1

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

,