Серводвигатель

andrei555
Offline
Зарегистрирован: 17.11.2020

Помогите знатоки.....есть код который управляет сервомотором по времени....дело в том что когда код делался для часов DS1302 все работает как нужно.....как только переделали код для часов DS1307 не работает.....тоесть сервомотор не стартует по времени как с часами DS1302....что где не так не совсем понятно

#include <Wire.h>  
#include <RTClib.h>         
#include <Stepper_28BYJ.h>   
 
#define knopka 5 // Пин кнопки (можно поменять)  
#define STEPS 3000 // Скорость
 
Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); // пины
unsigned long timing; // Переменная милис
RTC_DS1307 RTC; ;//SDA to analog 4,  SCL to analog 5
int Hour,Min,Sec; // Переменные для часов
int pusk; // Переменная для запуска команды
int schet1; // Переменная для счетчика ложных сработок
 
 
void setup()
{
stepper.setSpeed(30); // Установим скорость вращения об/мин
pinMode (knopka, INPUT); // Пин как вход
Wire.begin();
 RTC.begin();
Serial.begin(9600);
 
}
 
void loop()
{
DateTime now = RTC.now();        // Clock call
 
 
Serial.print(now.year(), DEC);
 
Serial.print('/');
 
Serial.print(now.month(), DEC);
 
Serial.print('/');
 
Serial.print(now.day(), DEC);
 
Serial.print(' ');
 
Serial.print(now.hour(), DEC);
 
Serial.print(':');
 
Serial.print(now.minute(), DEC);
 
Serial.print(':');
 
Serial.print(now.second(), DEC);
 
Serial.println();
 
 
 
 
//Serial.print(Hour); Serial.print(":"); Serial.print(Min); Serial.print(":"); Serial.println(Sec);
//set the time for fish feeding
 
if ((now.hour(), DEC == 0 && now.minute(), DEC == 52 && now.second(), DEC== 0)||(now.hour(), DEC == 0 && now.minute(), DEC == 53 && now.second(), DEC == 0)) {pusk=1;} // Пуск по времени
 
if (digitalRead(knopka) == HIGH) {schet1++;} // Нажали кнопку, сработал счетчик ложных сработок
else schet1=0; 
if (schet1==200) {pusk=1;} // Счетчик дошел до 200 и запустил
 
 
if (pusk==1 && (millis() - timing) >= 2000) {stepper.step(4000); timing = millis(); pusk=2;} // Делаем 4000 шагов в одну строну 
if (pusk==2 && (millis() - timing) >= 2000) {stepper.step(-4000); timing = millis(); pusk=0;} // Делаем 4000 шагов в другую строну 
 
//ЕСЛИ НЕ НУЖНА ЗАДЕРЖКА И КРУТИТЬ В ДРУГУЮ СТОРОНУ УБИРАЕМ 2 СТРОЧКИ ВЫШЕ И ПИШИМ 
 
// if (pusk==1){stepper.step(4000); pusk=0;} // Делаем 4000 шагов в одну строну
}
sadman41
Offline
Зарегистрирован: 19.10.2016

1) Если понятно не все, то что понятно?
2) В чем конкретный вопрос к сообществу?

andrei555
Offline
Зарегистрирован: 17.11.2020

не понятно что в коде не так что не работает от часов 1307

sadman41
Offline
Зарегистрирован: 19.10.2016

Т.е. констатируем: вопросов нет, есть потребность получить рабочий код.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

если переделывать то уж на ds3231

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Вставьте программу по правилам, может кто и поможет. А так - я даже смотреть не буду.

andrei555
Offline
Зарегистрирован: 17.11.2020

Потребность в помощи разобраться что не так прописано в коде

b707
Offline
Зарегистрирован: 26.05.2017

andrei555 пишет:
Потребность в помощи разобраться что не так прописано в коде

код вставьте нормально - укажу вам на ошибку. А коли не вставите - значит вам не очень-то и надо

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

andrei555 пишет:
Потребность в помощи разобраться что не так прописано в коде

Если Вы думаете, что я выёживаюсь - то нет. Мне просто неудобно читать то гуано, что Вы опубликовали. А поскольку помощь нужна не мне, а Вам, сообщаю, что когда мне станет удобно я Вам, возможно, помогу.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrei555, а зачем Вам переделка с 1302 на 1307?

Я надеюсь, Вы понимаете, что стоимость такой переделки существенно выше, чем цена нового 1302?

Так что дешевле купить подходящее железо.

andrei555
Offline
Зарегистрирован: 17.11.2020

1302 не супер точность,,,,,а 1307 поточнее да и лежат без дела

b707
Offline
Зарегистрирован: 26.05.2017

andrei555 пишет:
1302 не супер точность,,,,,а 1307 поточнее да и лежат без дела

 так и не осилил прочитать Правила форума и вставить код как положено?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrei555 пишет:
1302 не супер точность,,,,,а 1307 поточнее да и лежат без дела

Если нужно поточнее, то Вам уже посоветовали в посте №4.

А "лежат без дела" - я также уже писал - дешевле купить, чем использовать те, что "лежат".

Так что ни одного внятного довода за 1307 не прозвучало.

andrei555
Offline
Зарегистрирован: 17.11.2020

Скоро вставлю,,,,,,пока нет возможно добраться до компьютера

andrei555
Offline
Зарегистрирован: 17.11.2020

Зачем какие либо доводы,,,,,лежат у меня часы 1307 которые на другом устройстве отработали более года и отставание было пару секунд примерно,вот и хочу их использовать в новом проекте,,,,,,,а 1302 которые сейчас работают убегают за сутки на 20 минут назад,,,,,,вот и доводы

andrei555
Offline
Зарегистрирован: 17.11.2020
#include <Wire.h>  
#include <RTClib.h>         
#include <Stepper_28BYJ.h>   

#define knopka 5 // Пин кнопки (можно поменять)  
#define STEPS 3000 // Скорость

Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); // пины
unsigned long timing; // Переменная милис
RTC_DS1307 RTC; ;//SDA to analog 4,  SCL to analog 5
int Hour,Min,Sec; // Переменные для часов
int pusk; // Переменная для запуска команды
int schet1; // Переменная для счетчика ложных сработок


void setup()
{
stepper.setSpeed(30); // Установим скорость вращения об/мин
pinMode (knopka, INPUT); // Пин как вход
Wire.begin();
 RTC.begin();
Serial.begin(9600);

}

void loop()
{
DateTime now = RTC.now();        // Clock call


Serial.print(now.year(), DEC);

Serial.print('/');

Serial.print(now.month(), DEC);

Serial.print('/');

Serial.print(now.day(), DEC);

Serial.print(' ');

Serial.print(now.hour(), DEC);

Serial.print(':');

Serial.print(now.minute(), DEC);

Serial.print(':');

Serial.print(now.second(), DEC);

Serial.println();




//Serial.print(Hour); Serial.print(":"); Serial.print(Min); Serial.print(":"); Serial.println(Sec);
//set the time for fish feeding

if ((now.hour(), DEC == 0 && now.minute(), DEC == 52 && now.second(), DEC== 0)||(now.hour(), DEC == 0 && now.minute(), DEC == 53 && now.second(), DEC == 0)) {pusk=1;} // Пуск по времени

if (digitalRead(knopka) == HIGH) {schet1++;} // Нажали кнопку, сработал счетчик ложных сработок
else schet1=0; 
if (schet1==200) {pusk=1;} // Счетчик дошел до 200 и запустил


if (pusk==1 && (millis() - timing) >= 2000) {stepper.step(4000); timing = millis(); pusk=2;} // Делаем 4000 шагов в одну строну 
if (pusk==2 && (millis() - timing) >= 2000) {stepper.step(-4000); timing = millis(); pusk=0;} // Делаем 4000 шагов в другую строну 

//ЕСЛИ НЕ НУЖНА ЗАДЕРЖКА И КРУТИТЬ В ДРУГУЮ СТОРОНУ УБИРАЕМ 2 СТРОЧКИ ВЫШЕ И ПИШИМ 

// if (pusk==1){stepper.step(4000); pusk=0;} // Делаем 4000 шагов в одну строну
}

 

andrei555
Offline
Зарегистрирован: 17.11.2020

Вставил код согласно правил.....надеюсь все так

b707
Offline
Зарегистрирован: 26.05.2017

как обещал, подсказываю - строчка 61 полный бред.

Если у вас был, как вы говорите,  "работающий код" для 1302 - откройте и посмотрите, как это было сделано там. Ничего похожего в коде быть не могло...

Если это вы сами наворотили, когда "переписывали код под 1307" - верните обратно

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

проще конечно если ТС напишет своими словами, что он хочет сделать после вывода времени в монитор порта

andrei555
Offline
Зарегистрирован: 17.11.2020
#include <Wire.h>  
#include <RTClib.h>         
#include <Stepper_28BYJ.h>   

#define knopka 5 // Пин кнопки (можно поменять)  
#define STEPS 3000 // Скорость

Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); // пины
unsigned long timing; // Переменная милис
RTC_DS1307 RTC; ;//SDA to analog 4,  SCL to analog 5
int Hour,Min,Sec; // Переменные для часов
int pusk; // Переменная для запуска команды
int schet1; // Переменная для счетчика ложных сработок


void setup()
{
Serial.begin(9600);
Wire.begin();
RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__)); Для синхронизации времени с комьютером

stepper.setSpeed(30); // Установим скорость вращения об/мин
pinMode (knopka, INPUT); // Пин как вход


}

void loop()
{
DateTime now = RTC.now(); // Для чесов

Hour=(now.hour(), DEC);
Min=(now.minute(), DEC);
Sec=(now.second(), DEC);


//Serial.print(Hour); Serial.print(":"); Serial.print(Min); Serial.print(":"); Serial.println(Sec);


if (Hour == 20 && Min == 00 && Sec > 0 && Sec < 2 || Hour == 20 && Min == 00 && Sec > 0 && Sec < 2) {pusk=1;} // Пуск по времени

if (digitalRead(knopka) == HIGH) {schet1++;} // Нажали кнопку, сработал счетчик ложных сработок
else schet1=0; 
if (schet1==200) {pusk=1;} // Счетчик дошел до 200 и запустил


if (pusk==1 && (millis() - timing) >= 2000) {stepper.step(4000); timing = millis(); pusk=2;} // Делаем 4000 шагов в одну строну 
if (pusk==2 && (millis() - timing) >= 2000) {stepper.step(-4000); timing = millis(); pusk=0;} // Делаем 4000 шагов в другую строну 

//ЕСЛИ НЕ НУЖНА ЗАДЕРЖКА И КРУТИТЬ В ДРУГУЮ СТОРОНУ УБИРАЕМ 2 СТРОЧКИ ВЫШЕ И ПИШИМ 

// if (pusk==1){stepper.step(4000); pusk=0;} // Делаем 4000 шагов в одну строну
}

 

andrei555
Offline
Зарегистрирован: 17.11.2020

переделал код но все равно не работает

sadman41
Offline
Зарегистрирован: 19.10.2016

Hour=(now.hour(), DEC); - "Что бы это значило?". Рубрика такая была в передаче "Вокруг смеха".

 

andrei555
Offline
Зарегистрирован: 17.11.2020

ну так обьясните как нужно.....а не вокруг да около......я не силен в програмировании... новичек

sadman41
Offline
Зарегистрирован: 19.10.2016

А тут не бюро добрых услуг для всех мимокрокодилов.

На ошибку указали, дальше давай сам, учись. Нам твой степпер на часах не нужен, вобщем-то. 

andrei555
Offline
Зарегистрирован: 17.11.2020

умную пиздеж все горазды писать а по делу мало мыслей.....МИМОКРОКОДИЛ ЗАЕБАНЫЙ

b707
Offline
Зарегистрирован: 26.05.2017

Андрей, а вот это уже хамство. Тебе два раза указали на одну и ту же ошибку. Твой код для 1302 такой же бредовый, как для 1307. Не стоило врать, что он "раньше работал". Возьми учебник да разберись.

А ты вместо благодарности поносишь других участников.

Админы, забаньте неадеквата

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrei555 пишет:

ну так обьясните как нужно.....а не вокруг да около......я не силен в програмировании... новичек

Нужно писать осмысленный текст.

А как это преобразовать в нечто осмысленное, никто не знает, т.к. никто кроме Вас не знает, какой смысл Вы пытались вложить в эту строку.

 

Вообще, в программе программист отвечает за каждую букву. Соответственно, может объяснить, что делает каждая конструкция. Вы можете объяснить, что, по Вашему мнению должна делать эта строка? Если "да" - объясните. Если "нет" - расскажите, зачем Вы это вставили в свой скетч.