Tiny RTC I2C Modules, как правильно извлекать данные?

Иван_123
Offline
Зарегистрирован: 17.01.2018

Здравствуйте.

Под словом "правильно", которое является чисто субъективным, я подразумеваю формат int. 

Время выводит отлично, в этом проблем не возникает. Но при попытке использовать его далее возникает проблема. 

lcd.print(time.gettime("i");
if(analogRead(A1) > 900 && time.gettime("i") == 30) { //Фоторезистор затемнен, время для примера в минутах
digitalWrite(relPin, HIGH);   //Включаем освещение
lcd.print(time.gettime("i"));   //На lcd выводится время
}

if(analogRead(A1) <= 900 && time.gettime("i") == 35) { //Фоторезистор освещен, для примера прошло пять минут
digitalWrite(relPin, LOW);  //Отключаем реле
lcd.print(time.gettime("i")); //Вывожу время
}

Вот фрагмент кода. Выполняется только первая строка. Время на lcd выводится исправно, но циклы не выполняются. Дело точно не в фоторезисторе

Делал и так:

int vremya = time.gettime("i");

заменяя соответствующие строки, и так:

time.gettime(i); // Без кавычек. Дисплей выводит те же числа, но циклы молчат.

И так...

if(analogRead(A1) > 900 && time.gettime("i") == "30") { //30 как символ

Я делаю что-то неправильно, или просто где-то недоглядел? Направьте на путь истинный.

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

Иван_123 пишет:

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

Какая проблема? Как Вы пытаетесь его "использовать далее"?

Иван_123 пишет:

циклы не выполняются.

Какие циклы? В коде нет ни одного цикла. Вы о чём?

Иван_123 пишет:

Делал и так:

int vremya = time.gettime("i");

заменяя соответствующие строки, и так:

time.gettime(i); // Без кавычек. Дисплей выводит те же числа, но циклы молчат.

И так...

if(analogRead(A1) > 900 && time.gettime("i") == "30") { //30 как символ

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

В общем так, для начала сделайте следующее

1. Объясните что Вы хотите сделать. Если Вы думаете, что мы это знаем, то ошибаетесь.

2. Выложите код к комментариями что именно делает каждая строка в контексте Вашей хотелки из п. 1 выше.

Тогда будет понятно что Вы пытаетесь сделать и можно будет сказать что не так. Пока же Вы выложили горячечный бред и справшиваете "что не так?". Ответить невозможно. Сначала Вы объясните что Вы хотите сделать и что получается не так.

 

Иван_123
Offline
Зарегистрирован: 17.01.2018

Ээх. 

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

Какая проблема? Как Вы пытаетесь его "использовать далее"?

Ниже описал, не? 

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

Какие циклы? В коде нет ни одного цикла. Вы о чём?

Ну ёрничать вы умеете, я знаю, на форуме не впервые. Ошибся. 

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

В общем так, для начала сделайте следующее

1. Объясните что Вы хотите сделать. Если Вы думаете, что мы это знаем, то ошибаетесь.

2. Выложите код к комментариями что именно делает каждая строка в контексте Вашей хотелки из п. 1 выше.

1. Чтобы выполнялись те части кода, которые находятся внутри оператора if

2. 

#include <iarduino_RTC.h>
void setuo() {
pinMode(13, OUTPUT);
time.begin();
}
void loop() {
if(time.gettime("i") == 30) { //30 минут любого часа
digitalWrite(13, HIGH);//зажигаем светодиод
}
 
if(time.gettime("i") == 35) { //35 минут любого часа 
digitalWrite(13, LOW);//гасим светодиод
}
}

Этот скетч не зажигает и не гасит светодиод.

А должен зажигать и гасить в у становленные временные рамки - зажигать в 30 минут любого часа и гасить в 35 минут любого часа.

 

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

Иван_123 пишет:

Ниже описал, не? 

Не. По карйней мере я ничего не понял.

Иван_123 пишет:

Ну ёрничать вы умеете, я знаю, на форуме не впервые. 

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

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

Иван_123 пишет:

А должен зажигать и гасить в у становленные временные рамки - зажигать в 30 минут любого часа и гасить в 35 минут любого часа.

Кому это интересно он так задолжал? Никому он не должен ни зажигать ничего, ни гасить.

Давайте разбираться.

В строках 7 и 11 используется функция gettime.

Вопрос: что она возвращает? Уточняющий вопрос: какого типа возвращаемое значение? Ещё более уточняющий вопрос: она возвращает целое число?

Можете ответить? Если ответ "да", то код что-то Вам "должен", а вот если "нет", то какого хрена Вы сравниваете возвращаемое значение с целым числом?

Отвечайте насчёт значения и типа.

И, заодно, напечатайте в сериал что именно она возвращает, чтобы хоть посмотреть. Только печатайте с границами, чтобы пробелы были видны. Т.е. типа

Serial.print(':');
Serial.print(time.gettime("i"));
Serial.println(':');

Если после ответа на вопрос о типе и после печати у Вас ещё останутся вопросы - пишите. Только тогда приводите Ваш ответ, текущий скетч и результат печати

 

Иван_123
Offline
Зарегистрирован: 17.01.2018

unit8_t. В интернете есть пару непонятных переводов в char, да и те не в Arduino IDE. Что это?

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() {
pinMode(13, OUTPUT);
time.begin();
Serial.begin(9600);
}
void loop() {
  Serial.print(':');
  Serial.print(time.gettime("i"));
  Serial.println(':');

   if(time.gettime("i") == 30) { //30 минут любого часа
 digitalWrite(13, HIGH);//зажигаем светодиод
 }
  
   if(time.gettime("i") == 35) { //35 минут любого часа
 digitalWrite(13, LOW);//гасим светодиод
 }
 }

Вот скетч, а вот сЕриал:

:17:

 

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

Я спросил у Вас простую вещь. Какого типа результат возвращает функция: time.gettime("i")

А Вы мне что понаписали?

Нафига эти страшные копипасты не относящейся к делу информации? Вы можете просто открыть файл iarduino_RTC.h, найти там функцию gettime с параметром типа char* и посмотреть тип возвращаемеого значения? Просто посмотрите и напишите сюда.

С печатью всё понятно. А тип таки посмотрите.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Просто посмотреть не получилось. Вроде char, но и unit8_t мелькает. Мда. 

С чем пришел, с тем и остался.

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

Иван, Вы что-то не то говорите.

Что значит посмотреть не получилось?

Вы можете открыть файл iarduino_RTC.h? В любом редакторе? 

Так открывайте. Ищите там описание функции gettime - их там всего два. И смотрите какое у неё возвращаемое значение ! Что там может мелькать? У Вас вентиллятор между Вашими глазами и экраном или кошка хвостом машет?

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

Без этого Вы никуда дальше не продвинетесь.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Женя! Мы же, как мне кажется, такое уже обсуждали. Они не хотят учится, они хотят ответ. Попытку учить - вопринимают как унижение и глум. Это же поколение тестов. Важен только правильный ответ, никого не волнует, знаешь ли ты путь к ответу, если ты знаешь сам ответ.

Я давно решил, что нужно, в таком случае, именно унижать и глумиться, как они (новички) и ждут.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Открыл, но описания не нашел. 

Разве что это:

#include "iarduino_RTC.h"

//		Вывод даты и времени
char*	iarduino_RTC::gettime(String i){char j[i.length()+1]; i.toCharArray(j, i.length()); j[i.length()]=0; return gettime(j);}
char*	iarduino_RTC::gettime(const char* i){
			uint8_t j, k, n; bool f;															

 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Паколение ЕГЭнутых, б-ть!

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

Иван_123 пишет:

Открыл, но описания не нашел. 

Разве что это:

Ну, так а что ЭТО если не описание?

Итак, смотрим на эти строчки и отвечаем наконец, какого типа результат возвращает функция gettime? (если Вы не знаете как из этих строчек узнать нужный ответ, то читайте, например, вот это столько раз, сколько потребуется пока не сможете ответить).

Итак, вопрос всё тот же. Какого типа значение возвращает функция, которую Вы используете?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

В строке 5 что написано? Поясни русским языком, как ты это понимаешь?

===============

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

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

wdrakula пишет:

Они не хотят учится, они хотят ответ

А я готов помочь научиться, но не готов давать ответы. Вернее, готов, но на коммерческой основе и совсем не по ценам нашей песочницы "ищу исполнителя". За те суммы, что там иногда мелькают я и с дивана не встану.

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

Иван_123 пишет:

Открыл, но описания не нашел. 

Какого, нафиг, "описания"?  Код функции gettime() ищите и смотрите, что он делает. Описывать что-то в исходном коде, да еще на чайницком уровне -  вам вряд ли кто-то станет.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Иван_123 пишет:
Открыл, но описания не нашел.

В сообщении 4 скриншот откуда? Это ли не подробнейшее описание, где всего лишь чуть ниже (походу, туда Вам не хватило терпения долистать) чёрным по Си-шному написано -

time.gettime();                 // читаем время, обновляя значения всех переменных.
Serial.println( time.seconds ); // выведет число - количество секунд
Serial.println( time.minutes ); // выведет число - количество минут
Serial.println( time.hours   ); // выведет число - количество часов в 12 часовом формате

Куда time.minutes засунуть теперь сообразите?

Иван_123
Offline
Зарегистрирован: 17.01.2018

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

Интересно, как быстро прилетели балаболы. Оперативно сработали, похвально. 

Ноты? В этом Вы ошибаетесь, как насчет фортепиано, так и насчет программирования. Знать ноты, оно, конечно, полегче будет. Но играть можно и так, изучая ноты по ходу.

Я понимаю, что описывать на чайницком уровне описывать никто не будет. Спасибо и на этом.

ЕвгенийП., спасибо. То есть const char? Выходит, 

const char vremya = time.gettime("i");

или я опять "ЕГЭнутый б-ть" ?

 

Иван_123
Offline
Зарегистрирован: 17.01.2018

OlegK пишет:

Иван_123 пишет:
Открыл, но описания не нашел.

В сообщении 4 скриншот откуда? Это ли не подробнейшее описание, где всего лишь чуть ниже (походу, туда Вам не хватило терпения долистать) чёрным по Си-шному написано -

time.gettime();                 // читаем время, обновляя значения всех переменных.
Serial.println( time.seconds ); // выведет число - количество секунд
Serial.println( time.minutes ); // выведет число - количество минут
Serial.println( time.hours   ); // выведет число - количество часов в 12 часовом формате

Куда time.minutes засунуть теперь сообразите?

wiki.iarduino.ru

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

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

Опять :(((

Вы ведь у себя в программе что используете

gettime("i")

Значит, параметр у Вас типа указатель на символ. Ну, теперь берёте строку из Вами же процитированного кусочка

char*   iarduino_RTC::gettime(const char* i){

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

И ещё по поводу "описаний чайников".

Слово поисание в том контексте, что я использовал - это описание на для оюдей, а для компилятора. Вот эта строчка - оно и есть. И оно не бывает ни для чайников, ни для кофейников - оно для компилятора!

Иван_123
Offline
Зарегистрирован: 17.01.2018

OlegK, СПАСИБО.

ЕвгенийП., спасибо и Вам, что попытались меня научить, что оказалось сложновато. 

Когда наткнулся на unit8_t, решил делать проект без tiny. Но time.minutes спасло.

#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() {
pinMode(13, OUTPUT);
time.begin();
Serial.begin(9600);
}
void loop() {
  Serial.print(':');
  Serial.print(time.gettime("i"));
  Serial.println(':');

   if(time.minutes == 30) { //30 минут любого часа
 digitalWrite(13, HIGH);//зажигаем светодиод
 }
  
   if(time.minutes == 35) { //35 минут любого часа
 digitalWrite(13, LOW);//гасим светодиод
 }
 }

Светодиод зажигается и гаснет, как и должен был.

Последний вопрос: time.minutes возвращает значение типа int?

Спасибо еще раз.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Иван_123 пишет:
Последний вопрос: time.minutes возвращает значение типа int?

Не ленитесь, почитайте какой тип возвращается, там всё написано.
Если непонятен тип, то тоже просто всё находится.
В. т.ч и на нашем форуме.

Иван_123
Offline
Зарегистрирован: 17.01.2018

И все же, значение какого типа возвращает time.gettime? Остается только char.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Хорошо, почитаю. Спасибо.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Иван_123 пишет:
Остается только char.

Про char
Про byte
Подсказка - буква u в uint8_t означает "беззнаковый".

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

так я продолжаю:

Вот 5-ая строка из твоего поста:

char*   iarduino_RTC::gettime(const char* i){

Что она означает? Что такое char* ?

Это указатель на символ, или, что в С тоже самое,  массив символов, или строка. В С  это все одно и тоже.

Ты строку сравнивал с числом - круто?

Тебе уже сказали, что нужно пользоваться другой конструкцией: time.minutes. Предварительно обновив внутренние переменные класса вызовом time.gettime()  без параметров.

================

И поверь, про ноты - если ты не Бетховен Моцартович Бах, то без нот ты сыграешь только "мурку" и "люди идут по свету" ;) ;) ;).

Иван_123
Offline
Зарегистрирован: 17.01.2018

wdrakula пишет:

так я продолжаю:

Вот 5-ая строка из твоего поста:

char*   iarduino_RTC::gettime(const char* i){

Что она означает? Что такое char* ?

Это указатель на символ, или, что в С тоже самое,  массив символов, или строка. В С  это все одно и тоже.

Ты строку сравнивал с числом - круто?

Спасибо, я уже понял. Видимо, надо "30" или '30', но time.minutes намного проще.

wdrakula пишет:

И поверь, про ноты - если ты не Бетховен Моцартович Бах, то без нот ты сыграешь только "мурку" и "люди идут по свету" ;) ;) ;).

С этим согласен. Но мне пока большего и не надо). А знания нот буду подтягивать, насколько это позволяет моя "ЕГЭнутая б-ть" сущность. Ну и людей с муркой буду играть пока что.

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

Иван_123 пишет:

Видимо, надо "30" или '30'

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

Иван_123
Offline
Зарегистрирован: 17.01.2018

Я бы с радостью, но как? Вы сказали посмотреть дорези в глазах на строчку char*   iarduino_RTC::gettime(const char* i){

Мне пояснили:

wdrakula пишет:

Что такое char* ?

Это указатель на символ, или, что в С тоже самое,  массив символов, или строка. В С  это все одно и тоже.

Ты строку сравнивал с числом - круто?

Я прочитал на этом же сайте про char, где написано:

При объявление литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки символов - тип string: "ABC").(копипаст из статьи про char)

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

в С НЕЛЬЗЯ сравнить строки в виде if (srt1 == "123") ....

Совсем нельзя!

 

---------------

Ардуино  это забавная игрушка ДЛЯ ПРОГРАММИСТОВ, не для дебилов гуманитариев. На таком языке понятно?

Какого хрена лезть не в свое дело? Ты не знаешь основ С, зачем ты занялся Ардуинкой?

Что мешает почитать учебник по языку, которых просто море (начать с Кернигана и Ричи)? Зачем унижаться просьбами на форумах?!

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

Я Вам сказал не просто до рези смотреть на строчку "char*   iarduino_RTC::gettime(const char* i){", а заодно читать материал по ссылке. В этом материале описан формат данной строчки и написано где в ней находится название фукнции, где названия и типы параметров, а где тип возвращаемого значения.

Вы можете просто ответить на вопрос: "Какого типа значение возвращает функция gettime?". Без болтовни и многостраничного цитирования, просто сказзать где вот в этой самой строчке записан тип возвращаемого значение и назвать какой это тип?

Иван_123
Offline
Зарегистрирован: 17.01.2018

Закрывайте тему.

А то сейчас все любители оскорблений приползут.

С меня довольно.

 

 

ДЛЯ ПРОГРАММИСТОВ?

 

Страуструпа почитаю.

Закрывайте тему.

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

Непрофессиональные - это те, пользователи, для которых программирование МК не является профессией. Если вы откроете даташит на МК, попробуете вникнуть в действительные механизмы его программирования, то поймете, что Ардуино с его одним digitalWrite() вместо простыни с инициализацией и манипулирования портами, к которым жестко прибиты выводы - дар божий. И обычные химики, немного потратив время на основы Си - могут легко строить простые программы.

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

ven-til
Offline
Зарегистрирован: 13.02.2018

sadman41 пишет:

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

Что это за ересь?! На медведей катить - это ты зря!

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Иван_123 пишет:

Ещё один википедик.

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

"Непрофессиональные пользователи" это вовсе не тоже самое, что дебилы и ленивые задницы, не способные прочитать статью и ответить про тип данных.

На дебилов и лодырей она не ориентирована, даже не надейся.

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

ven-til пишет:

Что это за ересь?! На медведей катить - это ты зря!

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Иван_123 пишет:

 

Ну вот я непрофессиональный пользователь. На жизнь я зарабатываю, выгружая и загружая всякие ящеги в большие машинки с яркими логотипами.  Но Ардуина - моя любофь несравненная, поэтому, в те редкие часы, када я трезвый, я не гнушаюсь почитывать всякие умные книшки про нее, щурясь сослепу, шепча себе под нос эти незнакомые заклинания и шевеля губами. :) 

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

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

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

sadman41 пишет:

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

Дык ... (ежели чё, я не при делах, тока ссылку дал) - https://www.youtube.com/watch?v=Z99GzzFEWdM