Вывод времени на OLED экран...

elfrom
Offline
Зарегистрирован: 28.08.2014

Добрый день проблема скажем так с азов... вывести время на экран

#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <OLED_I2C.h> 
OLED  myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
RTC_DS1307 RTC;
void setup () {
  Wire.begin();            
  RTC.begin();
  myOLED.begin();
  //RTC.adjust(DateTime(__DATE__, __TIME__));
}
  void loop (){
   DateTime myTime = RTC.now();
myOLED.print(myTime.year(), 4,4);
   }

ругается на

myOLED.print(myTime.year(), 4,4);

invalid conversion from 'uint16_t {aka unsigned int}' to 'char*' [-fpermissive]

подскажите что можно подправить...

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуй так

#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <OLED_I2C.h> 
OLED  myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
RTC_DS1307 RTC;
void setup () {
  Wire.begin();            
  RTC.begin();
  myOLED.begin();
  //RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop (){
  DateTime myTime = RTC.now();
  myOLED.print(String(myTime.year()), 4,4);
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

То есть вам не очевидно?

elfrom
Offline
Зарегистрирован: 28.08.2014

Большое спасибо! теперь по аналогии надеюсь температура заведется...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да почему бы и нет. реальных причин не вижу

Joiner
Offline
Зарегистрирован: 04.09.2014

Puhlyaviy пишет:
То есть вам не очевидно?

Не говори загадками

elfrom
Offline
Зарегистрирован: 28.08.2014

Назрел очередной вопрос.

У меня DS3231 подключена к A0 A1 при работе с библиотекой DS1307.h время выводится как положено

#include <OLED_I2C.h>         // Подключение библиотеки для дисплея
OLED  myOLED(SDA, SCL, 8);    
#include <DS1307.h>           // Подключение библиотеки для часового модуля
DS1307 rtc(A0, A1);
 
void setup() {
  myOLED.begin();
  rtc.halt(false); 
}
 
void loop(){
  String stringOne = rtc.getTimeStr();
  myOLED.print(stringOne.substring(0,2), 4, 12);   // Отображение часов
  myOLED.print("/", 51, 12);                       // Отображение двоеточия
  myOLED.print(stringOne.substring(3,5), 75, 12);  // Отображение минут
  myOLED.update();
}

а с библиотекой (RTClib.h) время (часы минуты) воводятся как 165 165 соответсвенно, что может в чем может быть проблема?

Логичный вопрос чем меня не устравивает библиотека DS1307 а тем что делаю реле времени и в примере используется unixtime а данной переменной нету в данной библиотеке

либо если есть у Вас время переделать этот год под бибилиотеку DS1307

#include <OneWire.h>
#include <Wire.h>
#include <RTClib.h>
#include <OLED_I2C.h> 
OLED  myOLED(SDA, SCL, 8);
//Подключение выходов
const int RelayChn1 = 5;                            //Используем цифровой ПОРТ 5  для ПЕРВОГО    канала релейного модуля
#define mn 60UL
#define hr 3600UL
//----------Настройки времени и продолжительности включения реле
//----------1 аквариум
//----------Первый канал----------------------------
const long StartRelCn_1 = 8*hr+30*mn;  
const long DurationCh_1 = 9*hr+31*mn;
RTC_DS1307 RTC;
void setup () {
  Wire.begin();            
  RTC.begin();
  //RTC.adjust(DateTime(__DATE__, __TIME__)); // строка только для первой компиляции!!!
  DateTime myTime = RTC.now();
  //RTC.adjust(DateTime(myTime.unixtime()+15)); //строка только для первой компиляции!!!  
  //RTC.adjust(DateTime(myTime.unixtime()+3));//для второй компиляции, коррекция при перезагрузках Arduino на 3 сек.
  //Первоначальные установки выходов
    pinMode(RelayChn1,OUTPUT);                       //Инициализируем порт для 1 канала как ВЫХОД 
    digitalWrite(RelayChn1,HIGH);                    //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень 
    
myOLED.begin();
myOLED.clrScr();
}
//***************************************************
void loop () {
 
  DateTime myTime = RTC.now();
  uint32_t utime = myTime.unixtime();
  utime %=86400;

//----------------------------релейная настройка начало------------------
    //------------КАНАЛ 1------------------------------
    if ((utime >= StartRelCn_1) && 
       (utime < (StartRelCn_1+DurationCh_1)))
      {
          digitalWrite(RelayChn1,LOW);               //Устанавливаем на входе релейного модуля НИЗКИЙ уровень - реле срабатывает
         myOLED.print("Chanel 1 ON", 90, 0); 
      }  
    else
      {
          digitalWrite(RelayChn1,HIGH);              //Устанавливаем на входе релейного модуля ВЫСОКИЙ уровень - реле выключается
         myOLED.print("Chanel 1 OFF", 90, 0); 
      } 
 }

Или подсказать как добавить Unixtime в библиотеку либо кодом как то ее описать

Radjah
Offline
Зарегистрирован: 06.08.2014

> У меня DS3231 подключена к A0 A1

А нахрена? Аппаратного i2c мало?

> а с библиотекой (RTClib.h) время (часы минуты) воводятся как 165 165 соответсвенно

Ну что-то ты не так делаешь.

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

А я вот не знал и передаю unixtime с одной ардуины на другую. Вот как так?

elfrom
Offline
Зарегистрирован: 28.08.2014

Radjah пишет:

> У меня DS3231 подключена к A0 A1

А нахрена? Аппаратного i2c мало?

> а с библиотекой (RTClib.h) время (часы минуты) воводятся как 165 165 соответсвенно

Ну что-то ты не так делаешь.

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

А я вот не знал и передаю unixtime с одной ардуины на другую. Вот как так?

Тогда раз вы опытнее в этом вопросе быть может подскажете апаратный i2c что это или к каким пинам подключать (часовой модуль у меня arduino nano v3)

я описал что подключая к A0 и A1 выводится такие значения

раз передаете подскажите,

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

Radjah
Offline
Зарегистрирован: 06.08.2014

Берем распиновку nano и ищем глазами пини с функциями SDA и SCL. Они внезапно A5 и A4 соответственно.

Подключаем, пишем скетч, получаем часики.

elfrom
Offline
Зарегистрирован: 28.08.2014

Вот спасибо!, в этом и была проблема, теперь время показывает логика работает, еще раз спасибо