Еще новичок. попытки програмировать...

clawz
Offline
Зарегистрирован: 17.05.2018

Прошу не пинать, я вас понимаю, что тянуть за уши кого то не очень интересно и все же прошу помощи. Насмотревшись видосов прикупил себе ардуинку уно, дисплей Nextion и модуль часов реально времени DS3231. Дай думаю начну с простого, попробую сделть вывод часов и даты на дисплее с возможностью натсройки времени и даты, но не тут то было, сразу на первых мыслях и сдался. ПРочитав тут темку про дисплей я решил связать ардуинку и дисплей без использования бибилиотек, да бы больше понимать и сохранить использование динамической памяти ардуинки. С модулем часов тоже бибблиотек много, но без них видимо не обойтись. Нашел какую то универсальную бибилиотеку называется " Универсальная библиотека iarduino_RTC для RTC DS1302, DS1307, DS3231 к Arduino" Там вроде так все хорошо расписано на русском, но это только на взгляд новичка, может я и ошибаюсь в ней. так вот собственно встрял вопрос с выводом часов на дисплей без библиотеки дисплея. Элементарно тупо я даже не могу начать с чего то, такое ощущение, что затеял целый проект. Все же со светодиодом поиграться прлще как то. Может сможете как котенка носом натолкать дабы хоть что то понять

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

Не совсем понятно, что Вам нужно.

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

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Отложи дисплей и часики в сторонку.

Попробуй поиграться с простыми примерами для ардуино.

Потом подключишь часы, выведешь время в сериал.

Отложишь все это в сторонку и займешся Nextion- попробуй сначала без ардуино .

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

clawz пишет:
Насмотревшись видосов прикупил себе ардуинку уно, дисплей Nextion и модуль часов реально времени DS3231.
Не смотрите видосы. Видосы для тех кто в теме. А те кому до темы как до Луны начинают с простого.

bizzon
Offline
Зарегистрирован: 29.03.2016

Ещё:

Женщина астронавт на луне: 

— Хьюстон у нас проблемы... 

— Говорите! 

— А. . нет, ничего! 

— Что случилось? 

— Не важно... 

— Какие проблемы? 

— Ой все!

bizzon
Offline
Зарегистрирован: 29.03.2016

Как там в интернете- каждая домохозяйка может программирование освоить. Не пишут, за сколько лет. У меня третий год пошёл. Зато у меня бонус- 35 лет общения с радиодеталями. Вот с современными не успеваю знакомиться. Стар. Супер Стар.

clawz
Offline
Зарегистрирован: 17.05.2018

я игрался уже с примерами отсылая время в монитор порта, вроде как и с дисплеем повозился. Единственное я встрял с отправкой и принятием по сериал соединению с дисплеем

bizzon
Offline
Зарегистрирован: 29.03.2016

Ну ты же молодой. И не спишь.Или Яндекс сломался? Вот  к примеру IARDUINO.RU. Тыж не пытался.

bizzon
Offline
Зарегистрирован: 29.03.2016

Послал я тебя в правильном направлении, но у них там всё вверх ногами- имей ввиду.

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

clawz пишет:

я игрался уже с примерами отсылая время в монитор порта, вроде как и с дисплеем повозился. Единственное я встрял с отправкой и принятием по сериал соединению с дисплеем

Ну разобрался как это все работает?Или просто позаливал скетчи и все, без понимания что к чему. Выложи что ты конкретно сделал:скетч сделаный тобой или переделаный чей-то, как пытался соеденить с nextion . На каком этапе конкретно ты застрял?На этапе подключения экрана к ардуино или рисования кнопок на экране? Или еще че?

Колись, мил человек, не стесняйся. А то до сих пор мы никакой конкретики не видели - только" бла-бла-бла-не могу".

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Библиотеку почитай внимательно.
Там есть команда для чтения показаний RTC и запись их в память в МК.
После нее можно уже работать с переменными (день месяц,час и ТД)

clawz
Offline
Зарегистрирован: 17.05.2018

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

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

#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);
 
  
}

есть коненчо еще ссылочка, но там мне показалось больше и как то менее понятно, на сколько он правильнее я пока определить не могу http://knodit.blogspot.com/2014/05/arduino-ds3231-i2c-wire.html

bwn
Offline
Зарегистрирован: 25.08.2014

Например со 129 строки:
Serial.print(hour);
Serial.print(":");
Serial.println(minute);