"Таймер" обратного отсчета.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Доброго времени суток. Нужна помощь в создании таймера обратного отсчета на ардуино. Задача сделать таймер показывающий на 1 LED экране сколько прошло лет от заданной точки, на 2 - месяцев, 3 - недель, 4 - дней, 5- часов:секунд. LED экраны думаю использовать Tm1637 4-разрядный 0.56 дюймов 7 сегментов. И вообще возможно такой сделать или нет.

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

А почему две темы? Вам нужно два таймера создать?

Wadiy
Offline
Зарегистрирован: 03.03.2018

Нет. одна на механику, а вторая на скетч)

 

Гриша
Offline
Зарегистрирован: 27.04.2014

по сути к вам несколько вопросов: как у вас с математикой?  как вы планируете задавать точку отсчета? вы уже умеете делать простые часы на ардуино или планируете использовать готовый модуль? на каком уровне у вас дружба с написанием скетчей?

А по факту не ждите помощи, тут делов то осталось, за вас скетч написать, да модули соединить.

 

Wadiy
Offline
Зарегистрирован: 03.03.2018

Я и пишу потому, что не знаю как правильно сделать. Если бы знал смысла не было бы писать. Кто-то реально может что нибудь предложить или просто языками чешут.

Гриша
Offline
Зарегистрирован: 27.04.2014

Wadiy пишет:

Я и пишу потому, что не знаю как правильно сделать. Если бы знал смысла не было бы писать. Кто-то реально может что нибудь предложить или просто языками чешут.

пост 3 нужны ответы на вопросы - для начала разговора, жалательно не односложные.

Wadiy
Offline
Зарегистрирован: 03.03.2018

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

 

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

Wadiy пишет:

Кто-то реально может что нибудь предложить 

Вы запостили своё сообщения в двух ветка (на кой-то хрен), и обе - неправильные. Предложить Вам смогут только в третьей. Вот туда и запостите.

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

Wadiy пишет:

Кк часы сделать смотрел, в принцыпе нечего сложного. 

 

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

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

Wadiy пишет:

Скетч начинаю осваивать. Кк часы сделать смотрел, в принцыпе нечего сложного. 

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

Так что не понимаю, в чем у Вас проблемы.

Гриша
Offline
Зарегистрирован: 27.04.2014

andriano пишет:

Wadiy пишет:

Скетч начинаю осваивать. Кк часы сделать смотрел, в принцыпе нечего сложного. 

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

Так что не понимаю, в чем у Вас проблемы.

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

Вот только ТС похоже еще даже и не думал, просто, запостил очередную хотелку и скоро исчезнет, как это часто происходит после слов " подомуй сам, это просто"  и " что вы хотите сделать и зачем". Ну вот куча таких мертвых топиков на форуме образуется...

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

Гриша пишет:

Вот только ТС похоже еще даже и не думал, просто, запостил очередную хотелку и скоро исчезнет, как это часто происходит после слов " подомуй сам, это просто"  и " что вы хотите сделать и зачем". Ну вот куча таких мертвых топиков на форуме образуется...

Да ладно, людей, которые постят хотелки - уйма. Вопрос в другом:

Есть две задачи:

1. Изготовление часов.

2. Изготовление обратного таймера.

Теперь, что имеем:

- По сложности эти задачи идентичны.

- ТС явно указал, что в первой задаче лично для него нет ничего сложного.

Откуда возникает вопрос: а почему тогда ТС не в состоянии сделать вторую задачу самостоятельно?

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

Да просто времени нет (С)

Wadiy
Offline
Зарегистрирован: 03.03.2018

Я сдесь и пишу. чтобы помогли разобраться что для этого надо. Что должно входить в схему: только ардуино и дисплеи или к этому еще нужны часы реального времени[в ардуино ведь присутствует таймер внутренний]. Может проще купить самые простые LED дисплеи собрать их на макетной плате. Чтобы таймер постоянно в режиме реального времени показывал сколько прошло от заданной точки.  Нужно ли создавать библиотеку в которой в ручную нужно вносить все года, сколько недель в каждом годе и т.д. или есть уже готовый. Я хочу услышать советы и предложения от тех кто разбирается в этом. Для начало определиться с железом а потом работать над скетчем. Закавыть не хочу. Я могу просто купить что-то подобное уже готовое, но хочется сделать самому. А достаточных навыков пока нет.

 

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

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

Wadiy
Offline
Зарегистрирован: 03.03.2018

для часов надо - ардуино, часы реального времени и дисплей. Вопрос целесообразней и дешевле покупать готовые дисплеи или собрать схему из дисплеев 

LED Дисплей 7-сегментный модуль трубки 1bit синий 0.32 дюйма с общим катодом 0.32 "1 Цифровой семисегментный LED Дисплей модуль.

 

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

Wadiy пишет:

Вопрос целесообразней и дешевле покупать готовые дисплеи или собрать схему из дисплеев 

LED Дисплей 7-сегментный модуль трубки 1bit синий 0.32 дюйма с общим катодом 

Сначала точно определитесь какая микросхема будет рулить дисплеями. Если TM1637, как Вы писали, то про общий катод забудьте. А если, например, MAX7219, то наоборот - общий анод не подходит.

Но если часы для Вас - "ничего сложного", то Вы всё это уже знаете и я зря пишу.

Wadiy
Offline
Зарегистрирован: 03.03.2018

В общем все с вами понятно.

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

Wadiy пишет:

для часов надо - ардуино, часы реального времени и дисплей. Вопрос целесообразней и дешевле покупать готовые дисплеи или собрать схему из дисплеев 

LED Дисплей 7-сегментный модуль трубки 1bit синий 0.32 дюйма с общим катодом 0.32 "1 Цифровой семисегментный LED Дисплей модуль.

 

Целесообразней и дешевле для кого? Я вот не паяльщик, мне дешевле взять модуль, а не устраивать пляски с лутом, травлением и сверлением. Вопросы вы странные задаете. Возьмите калькулятор и посчитайте - 150р за индикатор с контроллером в сборе - это стоит того времени, чтобы делать все вручную?

Так же и по другим вопросам - накакого rocket science в соединении трех модулей и нескольких кнопок нет. Полчаса посидеть спокойно надо и порисовать на бумажке.

 

Wadiy
Offline
Зарегистрирован: 03.03.2018

как лучше сделать так или так.

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

Wadiy пишет:

В общем все с вами понятно.

С Вами все стало понятно после поста №6.

 

Тем не менее, на некоторые вопросы отвечу.

Wadiy пишет:

Что должно входить в схему: только ардуино и дисплеи или к этому еще нужны часы реального времени[в ардуино ведь присутствует таймер внутренний].

RTC имеет перед внутренним таймером два преимущества:

1. Продолжает отсчет времени при отсутствии внешнего питания.

2. Гораздо более высокая точность.

Что нужно Вам - Вам и решать.

По последнему пункту: у меня сейчас в наличии есть контроллер, чатота которого настолько не соответствует заявленной (погрешность пимерно 0.7%), что даже последовательный порт время от времени дает сбои. В Вашем случае - это 10 минут в сутки.

Цитата:

Может проще купить самые простые LED дисплеи собрать их на макетной плате. Чтобы таймер постоянно в режиме реального времени показывал сколько прошло от заданной точки.

Что для Вас проще - можете решить только Вы.

Цитата:

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

То, о чем Вы пишете называется не "библиотека", а "массив констант". 

Совершенно необязательно вносить в этот массив константы вручную - намного проще (впрочем, кому как) написать простенькую программу для заполнения этого массива.

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

Wadiy пишет:

 

 

ак лучше сделать так или так.

Странный Вы человек: на этот вопрос никто кроме Вас ответить не сможет.

С моей точки зрения, если подходит готовый модуль, лучше им и воспользоваться. Меня, например, не устроил размер цифр готового модуля, поэтому паял сам.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Вот это реальный ответ. Спасибо. 

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

Wadiy пишет:

В общем все с вами понятно.

Я раз за Вас!

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

Wadiy пишет:

Нужно ли создавать библиотеку в которой в ручную нужно вносить все года, сколько недель в каждом годе 

Зачем? Если у Вас есть две даты (со временем), то количество секунд между ними вычисляется одной (одной!!!) операцией вычитания. Нахрена ещё какие-то таблицы?

Это, если пользоваться системной библиотекой времени.

А если не пользоваться, то и прямые календарные расчёты - тоже ничего сложного. Нужно только знать устройство календаря. Например, вот здесь информации более, чем достаточно.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Я это и хотел узнать. Тоесть чтобы показывало сколько прошлос с 15 февраля 1999 11:00 по данный день и час.

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

Не пойму только - причем тут обратный отсчет.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Нужно чтобы на дисплее показывало [от 15 февраля 1999 11:00] прошло 19 лет 16 дней 00 часов 00 минут

Wadiy
Offline
Зарегистрирован: 03.03.2018

И если мне нужно поменять дату я смог это сделать просто, а не залазить в скетч. К примеру просто обычным текстовым файлом

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Wadiy пишет:

Нужно чтобы на дисплее показывало [от 15 февраля 1999 11:00] прошло 19 лет 16 дней 00 часов 00 минут

Ну и где здесь обратный остчёт? В Вашем примере прямой отсчёт (на увеличение), а не обратный (на уменшьшение).

Обратный отсчёт, это: [до 15 марта 2028 11:00] осталось 10 лет 11 дней 00 часов 00 минут (вот тут таймер будет отсчитывать время в обратную сторону до события)

 

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

Wadiy пишет:

Я это и хотел узнать. Тоесть чтобы показывало сколько прошлос с 15 февраля 1999 11:00 по данный день и час.

Ну, вот и изучайте тот материал. Там для Вашей хотелки есть всё и даже больше.

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

Wadiy пишет:

Нужно чтобы на дисплее показывало [от 15 февраля 1999 11:00] прошло 19 лет 16 дней 00 часов 00 минут

Это прямой отсчет.

Обратный отсчет это: "До конца Света осталось 0 лет, 0 месяцев, 0 дней, 0 часов, 0 минут, 15 секунд"

 

PS. Кстати, поищите в И-нете "Атомная бомба с часовым механизмом". Судя по голливудским блокбастерам такие бомбы почти всегда изготавливаются на Ардуино.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Спасибо. как собиру схему. напишу.

Гриша
Offline
Зарегистрирован: 27.04.2014

Wadiy, рекомендую:

1.1) собрать часы, любые, посмотреть как они работают и прочее... поменять на часы с нужной точностью.

1.2) подобрать экран под задачу, выполнить часть пункта 1.1.

2) прицепить кнопки и попробовать устанавливать время с кнопок.

3.1) подумать, где хранить то, что нужно хранить при отключении питания... что нужно хранить.

3.2) выбрать математику (алгоритм) и дописать им код под конечную задачу.

ЗЫ. Вы пишете, что что-то знаете, а по факту только думаете, что знаете. Еще и в обидку, что с вами общаются как с профи, и на столь примитивный вопрос "никто не помогает". Для нас это выглядит несколько иначе ИМХО - "какого *N@ мне еще не дали готовую схему и код под нее, какие вы после этого спецы"...

Wadiy
Offline
Зарегистрирован: 03.03.2018

Доброго времени суток. Нужна помощь. Не могу переправить скетч для часов реального времени DS 1302 подключен к пинам <2,3,4>. Кому не сложно помогите.

#include <Wire.h>
#include "TM1637.h"  // http://www.seeedstudio.com/wiki/File:DigitalTube.zip

    // 7сигментный индикатор
#define CLK 6         
#define DIO 7 
#define brightness 6  // яркость, от 0 до 7

    // кнопки
#define keyHor 5
#define keyMin 4 
#define keyPL  3

TM1637 tm1637(CLK,DIO);  
#define DS3231_I2C_ADDRESS 0x68
  
volatile boolean flag;

///// часы ..
byte decToBcd(byte val){
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val){
  return ( (val/16*10) + (val%16) );
}

void setDateDs3231(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS3231_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

void getDateDs3231(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{

  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

void setINT(){    //включает выход SQW, который вроде выключен по умолчанию
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0x0E);
  Wire.write(0x0);
  Wire.endTransmission();
}

void blink() {
  digitalWrite(13, !digitalRead(13));
  flag = !flag;
  tm1637.point(flag); 
}

void setup() {
//  Serial.begin(9600);
  Wire.begin();
  pinMode(13, OUTPUT);
  pinMode(keyHor, INPUT_PULLUP);
  pinMode(keyMin, INPUT_PULLUP);
  pinMode(keyPL, INPUT_PULLUP);

  tm1637.init();
  tm1637.set(brightness);  
  
  setINT(); 
  attachInterrupt(0, blink, CHANGE);
}

void loop(){
    // читаем время из модуля
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; 
  getDateDs3231(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
    // забиваем массив значениями для отпарвки на экран
  int8_t TimeDisp[4]; 
  
  TimeDisp[0] = hour / 10;
  TimeDisp[1] = hour % 10;
  TimeDisp[2] = minute / 10;
  TimeDisp[3] = minute % 10;

    // обработка кнопок
  if (!digitalRead(keyHor) && !digitalRead(keyPL)){   // часы
      second = 0;                           // сбрасываем секунды
      hour++;                               // пребавляем единицу к часам
      if (hour > 23) hour = 0;              // если вылезли за границы присваеваем 0
      setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // пишим в модуль
      delay(200);
  }
  if (!digitalRead(keyMin) && !digitalRead(keyPL)){   // минуты
      second = 0;
      minute++;
      if (minute > 59) minute = 0;
      setDateDs3231(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
      delay(200);
  }
     // отправляем массив на экран
  tm1637.display(TimeDisp);
 
  
}

 

Wadiy
Offline
Зарегистрирован: 03.03.2018

Кнопки не поключал. так что их можно убрать из скетча

Wadiy
Offline
Зарегистрирован: 03.03.2018

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

Wadiy пишет:

Не могу переправить скетч для часов реального времени DS 1302 подключен к пинам <2,3,4>.

Куда переправить?

Кстати, вставляйте код как положено.

Wadiy
Offline
Зарегистрирован: 03.03.2018

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

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

Т.е. Вам его переписать надо, что-ли? В чем разница-то между схемами?

Wadiy
Offline
Зарегистрирован: 03.03.2018

Да. я пробывал его самостоятельно переписать, но выдает постоянно ошибки.

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

Понятно, ну подождите, может кто и возьмётся, но, скорее всего, Вам надо в другой раздел форума идти.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Я Вас понял.

Wadiy
Offline
Зарегистрирован: 03.03.2018

Буду надеяться что кто-то может)))

Гриша
Offline
Зарегистрирован: 27.04.2014

Wadiy пишет:

Буду надеяться что кто-то может)))

даже не надейтесь, если решили получить готовое устройство - покупайте. Если решили стремиться собрать самостоятельно - учитесь. На этом сайте реально помогают и обсуждают, НО не делают вместо ТС. модули очень распространенные, можете найти готовый скетч, но на пути к готовому устройству это не поможет.

коли пункт 1.1 прост 33 вы завалили, собирайте светофор. Это чуть сложнее, чем помигать светодиодом.