Здраствуйте. Идея следующая: необходимо чтобы сервопривод поворачивался в определенно заданное время на 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); } } } }
1. В коде два loop-а. Компилятор заматерится на это. 2. Вам что надо - чтобы сервы срабатывали через определенный интервал времени, или в определенное время суток ? Если через интервал, то готовьтесь к нарастающей погрешности относительно времени суток.
послушайте, вы этот код уже запостили в 3 или 4 ветки на разных форумах. Вопрос-то в чем? "Не выходит" - это не вопрос. Если вам нужна помощь - задавайте конкретные вопросы. А если хотите, чтобы за вас написали код - тогда обращайтесь в платный раздел
Обычные часы с будильником только вместо Куку поворачиваем Серву. Можно вместе с Куку. Скетчей будильников в инете море. У того же Пушного Звера. А вот 1302 г@вно редкостное. Я бы взял чтото другое получше
Вопрос у меня следующий: Правильно ли я обращаюсь к модулю часов? Или по другому это пишется? Я просмотрел подобные программы что к модулю 1307 так обращаются. Про 2 loop'a я понял.
Установите Протеус 8.6 и симулируйте в нем. В 99% случаев (НО НЕ ВСЕГДА !!!) работает однохренственно что в симуляторе, что в реале. А конкретно по вашему вопросу ответ - либо вы лезете в даташит и пишете код сами (там в основном "ногодрыг" - digitalWrite() и digitalRead() ), либо берете чью-то библиотеку. Как захотел разработчик библы - так и будет правильно. Обычно с библой идут примеры, ими и пользуйтесь. ПС. Например в Протеусной модели Ардуины - не работает прием на softSerial - е !!!
Antony, ваш вопрос опять абсолютно не по делу. Вы этот код пробовали компилировать? - уверен что нет. Если бы вы попробовали - вы бы сами убедились, что к часам обращаетесь неверно.. Но вы поленились что-либо делать сами и вместо этого пишете на форум. Так вот - запомните - выкладывать на форум код. который даже не компилится - это неужение к участникам. Прежде чем задавать вопрос - вы должны сделать все, чтобы решить проблему самостоятельно. Попытайтесь скомпилировать код, почитайте сообщения об ошибках. попробуйте их исправить. А вот когда это все сделаете - только тогда приходите.