не изменяется время

WasaBisa
Offline
Зарегистрирован: 24.11.2021

Столкнулся с такой проблемой: DS1302, не идет. при таком коде выводит на экране 00-00-2000, что надо вписать,что бы пошел отсчет и как задать время?

 

 

 

======================================
AlexTLN
Offline
Зарегистрирован: 14.05.2016

Функция millis() это отдельный таймер-счетчик, который не связан с циклом loop. Очень маловероятно, что " if (millis() % 1000 == 0)" будет верно, так как при обращении к millis() будет 998, а следующей итерацией loop() 25(как пример).

int timerDelay=0;
void loop()
{
:begin
timerDelay=millis();
:timer
if(millis()-timerDelay>1000)
 {
  lcd.print(что-то);//и потом курсор поставить в 0
  goto begin;
 }
goto timer;
}

Вот как-то так должно выглядеть. Можно помидорами покидать за goto :D

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

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

Почему не полностью украли код ? Где вызов ... .settime( .... ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AlexTLN пишет:
Можно помидорами покидать за goto :D
А за задом наперёд написанные метки можно?

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

ЕвгенийП пишет:

AlexTLN пишет:
Можно помидорами покидать за goto :D
А за задом наперёд написанные метки можно?

нет! метки пишем по арабски )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

метки пишем по арабски )))

Вона как! А я то думал, что это "по-еврейски" :(

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

ЕвгенийП пишет:

Вона как! А я то думал, что это "по-еврейски" :(

тут мои компетенции равны нулю, это к дракуле )))

Green
Offline
Зарегистрирован: 01.10.2015

ЕвгенийП пишет:

Вона как! А я то думал, что это "по-еврейски" :(


Я бы попросил... Когда меня жена обзывает евреем, я вынужден отбиваться.( Вот так и здесь.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Почему отбиваться? Вы не еврей?

Меня вот приятели евреи регулярно антисемитом обзывают, так я уже и не отбиваюсь :-)

Green
Offline
Зарегистрирован: 01.10.2015

ЕвгенийП пишет:

Почему отбиваться? Вы не еврей


Об этом история умалчивает.)
Но жене я отвечаю, что может быть я и еврей, но видать я не настоящий еврей, ибо ты жила бы в шоколаде.)

WasaBisa
Offline
Зарегистрирован: 24.11.2021
попробовал такой код,но все без изменений,только при отключении rst от rts1302 начинают меняться параметры но рандомные

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302, 10, 11, 12);

#include <Wire.h>
#include "LiquidCrystal.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 7, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
  delay(300);                                            // задержка в 300мс перед началом инициализации
  Serial.begin(9600);                              // устанавливаем скорость передачи данных с модулей в 9600 бод
  time.begin();                                       // функция служит для инициализации работы модуля
  // Ниже у нас прописываются временные значения в виде секунд, минут, часов, даты, включая месяц и год
  time.settime(10, 10, 10, 4, 10, 17, 3);
  lcd.begin(16, 2);//
  lcd.setCursor(0, 0); //снала x потом y
}

void loop() {
  Serial.begin(9600);

  // если прошла 1 секунда выводим время на дисплей
  if (millis() % 1000 == 0) {
    lcd.setCursor(3, 0); //настройка позиции вывода на экране
    lcd.print(time.gettime("d-m-Y"));     // Выводим время.
    lcd.setCursor(1, 1); //Надо так!
    lcd.print(time.gettime("H:i:s, D"));

    delay(1);

  }
}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Вам же сказали, что конструкция

if (millis() % 1000 == 0) 

работать не будет НИКОГДА. Потому у вас время на экране и не изменяется

И Serial.begin() должен находиться в сетапе, а не в лупе

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Как вариант, сначала попробовать пример из библиотеки без изменений, для проверки модуля и

#include <iarduino_RTC.h>                                   // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени.
//  iarduino_RTC time(RTC_DS1302, 2, 3, 4);                 // Объявляем объект time для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT
//  iarduino_RTC time(RTC_DS1307);                          // Объявляем объект time для работы с RTC модулем на базе чипа DS1307, используется аппаратная шина I2C
    iarduino_RTC time(RTC_DS3231);                          // Объявляем объект time для работы с RTC модулем на базе чипа DS3231, используется аппаратная шина I2C
                                                            //
void setup(){                                               //
    delay(300);                                             // Ждем готовности модуля отвечать на запросы
    Serial.begin(9600);                                     // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
    time.begin();                                           // Инициируем работу с модулем.
}                                                           //
void loop(){                                                //
    if(millis()%1000==0){                                   // Если прошла 1 секунда.
      Serial.println(time.gettime("d-m-Y, H:i:s, D"));      // Выводим время.
      delay(1);                                             // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс.
    }                                                       //
}                                                           //
                                                            //

подключения

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

С подключением видимо проблема, вот и виснет.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Как по мне(возможно ошибаюсь) код должен исполняться, т.к. цикл loop, если условие if не верно, короче миллисекунды, и ни одной не пропустит

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Код скорее всего виснет в момент установки или запроса  времени.

kalapanga
Offline
Зарегистрирован: 23.10.2016

WasaBisa, неплохо было бы рассказать, как у Вас модуль часов к ардуине подключен. А то может здесь, как и в Вашей теме про 1602, в скетче используются пины, к реальному подключению не имеющие никакого отношения?

WasaBisa
Offline
Зарегистрирован: 24.11.2021

исправил,но теперь только белые квадраты

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

А в порт что выдается ???

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

Komandir пишет:

А в порт что выдается ???

Как я понимаю - ничего.  Поскольку софтина не переписана.

WasaBisa
Offline
Зарегистрирован: 24.11.2021

Переписал код и проверил все подключения,отсчет начался теперь дата 19-00-2000,а время потихоньку тикает,но возник вопрос как установить желаемое время

// подключение часов
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302,12,10,11);  // для модуля DS1302 - RST, CLK, DAT
// подключение экрана
#include "LiquidCrystal.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 7, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
   delay(300);
   Serial.begin(9600);
   time.begin();
   time.settime(30,18,12,6,20,5); // 0  сек, 30 мин, 18 часов, 12, июня, 2020, четверг
   lcd.begin(16, 2);
 
}

void loop() {
   // если прошла 1 секунда выводим время
    lcd.setCursor(3, 0); //настройка позиции вывода на экране
    lcd.print(time.gettime("d-m-Y"));     // Выводим время.
    lcd.setCursor(1, 1); //
    lcd.print(time.gettime("H:i:s, D"));
      delay(1);
   }

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Посмотрите на строку 12. 
А именно на аргументы у функции и комментарий после неё. А ещё конкретнее на количество аргументов. 
ЗЫ: Оно вообще у вас компилируется?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
Функция  settime( СЕК [, МИН [, ЧАС [, ДЕНЬ [, МЕС [, ГОД [, ДН ]]]]]]  );

Секунды должны быть ОБЯЗАТЕЛЬНО

WasaBisa
Offline
Зарегистрирован: 24.11.2021

компилируется,если вбивать что после комментария,то выводит 22-00-2000
00:17:00(секунды идут), sat

 time.settime(0,30,18,12,6,20,5); // 0  сек, 30 мин, 18 часов, 12, июня, 2020, четверг

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

WasaBisa пишет:

компилируется,если вбивать что после комментария,то выводит 22-00-2000
00:17:00(секунды идут), sat

 time.settime(0,30,18,12,6,20,5); // 0  сек, 30 мин, 18 часов, 12, июня, 2020, четверг

 

Я бы делал так:

Скетч из библиотеки #12(согласовать пины, что нужно раскомментировать) запустить без дисплея и посмотреть работу модуля в мониторе, например

https://роботехника18.рф/%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80-%D0%BF%D0%BE%D1%80%D1%82%D0%B0-%D0%B0%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE/

Проверить установку времени и даты

Если всё норм, копать дальше

lilik
Offline
Зарегистрирован: 19.10.2017

WasaBisa пишет:

Столкнулся с такой проблемой: DS1302, не идет. при таком коде выводит на экране 00-00-2000, что надо вписать,что бы пошел отсчет и как задать время?

Прикольный модуль, у меня так и не заработал как надо. Пользуюсь всегда другим.