Tiny RTC I2C Modules, как правильно извлекать данные?
- Войдите на сайт для отправки комментариев
Чт, 15/03/2018 - 12:56
Здравствуйте.
Под словом "правильно", которое является чисто субъективным, я подразумеваю формат 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 как символ
Я делаю что-то неправильно, или просто где-то недоглядел? Направьте на путь истинный.
при попытке использовать его далее возникает проблема.
Какая проблема? Как Вы пытаетесь его "использовать далее"?
циклы не выполняются.
Какие циклы? В коде нет ни одного цикла. Вы о чём?
Делал и так:
int vremya = time.gettime("i");заменяя соответствующие строки, и так:
И так...
if(analogRead(A1) > 900 && time.gettime("i") == "30") { //30 как символПослушайте, то что здесь процитировано - есть результат употребления каких-то запрещённых препаратов. Прболема даже не в том, что это бред, а в том, что из этого невозможно понять, а что Вы хотели сделать!
В общем так, для начала сделайте следующее
1. Объясните что Вы хотите сделать. Если Вы думаете, что мы это знаем, то ошибаетесь.
2. Выложите код к комментариями что именно делает каждая строка в контексте Вашей хотелки из п. 1 выше.
Тогда будет понятно что Вы пытаетесь сделать и можно будет сказать что не так. Пока же Вы выложили горячечный бред и справшиваете "что не так?". Ответить невозможно. Сначала Вы объясните что Вы хотите сделать и что получается не так.
Ээх.
Какая проблема? Как Вы пытаетесь его "использовать далее"?
Ниже описал, не?
Какие циклы? В коде нет ни одного цикла. Вы о чём?
Ну ёрничать вы умеете, я знаю, на форуме не впервые. Ошибся.
В общем так, для начала сделайте следующее
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 минут любого часа.
Ниже описал, не?
Не. По карйней мере я ничего не понял.
Ну ёрничать вы умеете, я знаю, на форуме не впервые.
С чего Вы взяли, что я ерничаю? Я действительно ничего не понял и думал, что какие-то циклы есть в той части кода, которую Вы не привели.
Привыкайте объяснять так, чтобы кто-то, кроме Вас, ещё мог понять. Вот сейчас же Вы как-то сумели объяснить.
А должен зажигать и гасить в у становленные временные рамки - зажигать в 30 минут любого часа и гасить в 35 минут любого часа.
Кому это интересно он так задолжал? Никому он не должен ни зажигать ничего, ни гасить.
Давайте разбираться.
В строках 7 и 11 используется функция gettime.
Вопрос: что она возвращает? Уточняющий вопрос: какого типа возвращаемое значение? Ещё более уточняющий вопрос: она возвращает целое число?
Можете ответить? Если ответ "да", то код что-то Вам "должен", а вот если "нет", то какого хрена Вы сравниваете возвращаемое значение с целым числом?
Отвечайте насчёт значения и типа.
И, заодно, напечатайте в сериал что именно она возвращает, чтобы хоть посмотреть. Только печатайте с границами, чтобы пробелы были видны. Т.е. типа
Serial.print(':'); Serial.print(time.gettime("i")); Serial.println(':');Если после ответа на вопрос о типе и после печати у Вас ещё останутся вопросы - пишите. Только тогда приводите Ваш ответ, текущий скетч и результат печати
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:
Я спросил у Вас простую вещь. Какого типа результат возвращает функция:
time.gettime("i")?А Вы мне что понаписали?
Нафига эти страшные копипасты не относящейся к делу информации? Вы можете просто открыть файл iarduino_RTC.h, найти там функцию gettime с параметром типа char* и посмотреть тип возвращаемеого значения? Просто посмотрите и напишите сюда.
С печатью всё понятно. А тип таки посмотрите.
Просто посмотреть не получилось. Вроде char, но и unit8_t мелькает. Мда.
С чем пришел, с тем и остался.
Иван, Вы что-то не то говорите.
Что значит посмотреть не получилось?
Вы можете открыть файл iarduino_RTC.h? В любом редакторе?
Так открывайте. Ищите там описание функции gettime - их там всего два. И смотрите какое у неё возвращаемое значение ! Что там может мелькать? У Вас вентиллятор между Вашими глазами и экраном или кошка хвостом машет?
Ну, не знаю, если у Вас перед глазами что-то мелькает, выкладывайте файл сюда, вместе смотреть будем.
Без этого Вы никуда дальше не продвинетесь.
Женя! Мы же, как мне кажется, такое уже обсуждали. Они не хотят учится, они хотят ответ. Попытку учить - вопринимают как унижение и глум. Это же поколение тестов. Важен только правильный ответ, никого не волнует, знаешь ли ты путь к ответу, если ты знаешь сам ответ.
Я давно решил, что нужно, в таком случае, именно унижать и глумиться, как они (новички) и ждут.
Открыл, но описания не нашел.
Разве что это:
#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;Паколение ЕГЭнутых, б-ть!
Открыл, но описания не нашел.
Разве что это:
Ну, так а что ЭТО если не описание?
Итак, смотрим на эти строчки и отвечаем наконец, какого типа результат возвращает функция gettime? (если Вы не знаете как из этих строчек узнать нужный ответ, то читайте, например, вот это столько раз, сколько потребуется пока не сможете ответить).
Итак, вопрос всё тот же. Какого типа значение возвращает функция, которую Вы используете?
В строке 5 что написано? Поясни русским языком, как ты это понимаешь?
===============
Чтобы программировать, нужно уметь читать код, как для игры на фортепиано нужно уметь читать ноты.
Они не хотят учится, они хотят ответ.
А я готов помочь научиться, но не готов давать ответы. Вернее, готов, но на коммерческой основе и совсем не по ценам нашей песочницы "ищу исполнителя". За те суммы, что там иногда мелькают я и с дивана не встану.
Открыл, но описания не нашел.
Какого, нафиг, "описания"? Код функции gettime() ищите и смотрите, что он делает. Описывать что-то в исходном коде, да еще на чайницком уровне - вам вряд ли кто-то станет.
В сообщении 4 скриншот откуда? Это ли не подробнейшее описание, где всего лишь чуть ниже (походу, туда Вам не хватило терпения долистать) чёрным по Си-шному написано -
Куда time.minutes засунуть теперь сообразите?
Я написал что не нашел описания, потому что не был уверен в том, что та часть кода библиотеки, которую я выложил, мне не до конца была ясна. К тому же в библиотеке могли быть и другие описания. Если бы я знал, что конкретно я нашел, я бы спрашивал? Нет.
Интересно, как быстро прилетели балаболы. Оперативно сработали, похвально.
Ноты? В этом Вы ошибаетесь, как насчет фортепиано, так и насчет программирования. Знать ноты, оно, конечно, полегче будет. Но играть можно и так, изучая ноты по ходу.
Я понимаю, что описывать на чайницком уровне описывать никто не будет. Спасибо и на этом.
ЕвгенийП., спасибо. То есть const char? Выходит,
const char vremya = time.gettime("i");или я опять "ЕГЭнутый б-ть" ?
В сообщении 4 скриншот откуда? Это ли не подробнейшее описание, где всего лишь чуть ниже (походу, туда Вам не хватило терпения долистать) чёрным по Си-шному написано -
Куда time.minutes засунуть теперь сообразите?
wiki.iarduino.ru
a как долистать, ежели меня в библиотеку посылают? Спасибо, попробую.
Опять :(((
Вы ведь у себя в программе что используете
gettime("i")Значит, параметр у Вас типа указатель на символ. Ну, теперь берёте строку из Вами же процитированного кусочка
char* iarduino_RTC::gettime(constchar* i){Смотрите до неё до рези в глазах и наконец отвечаете "Какого типа значение возвращает эта грёбаная функция". Ну, ... Вы сможете. Если надо, читайте, то, что я давал по ссылке.
И ещё по поводу "описаний чайников".
Слово поисание в том контексте, что я использовал - это описание на для оюдей, а для компилятора. Вот эта строчка - оно и есть. И оно не бывает ни для чайников, ни для кофейников - оно для компилятора!
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?
Спасибо еще раз.
Не ленитесь, почитайте какой тип возвращается, там всё написано.
Если непонятен тип, то тоже просто всё находится.
В. т.ч и на нашем форуме.
И все же, значение какого типа возвращает time.gettime? Остается только char.
Хорошо, почитаю. Спасибо.
Про char
Про byte
Подсказка - буква u в uint8_t означает "беззнаковый".
так я продолжаю:
Вот 5-ая строка из твоего поста:
char* iarduino_RTC::gettime(constchar* i){Что она означает? Что такое char* ?
Это указатель на символ, или, что в С тоже самое, массив символов, или строка. В С это все одно и тоже.
Ты строку сравнивал с числом - круто?
Тебе уже сказали, что нужно пользоваться другой конструкцией: time.minutes. Предварительно обновив внутренние переменные класса вызовом time.gettime() без параметров.
================
И поверь, про ноты - если ты не Бетховен Моцартович Бах, то без нот ты сыграешь только "мурку" и "люди идут по свету" ;) ;) ;).
так я продолжаю:
Вот 5-ая строка из твоего поста:
char* iarduino_RTC::gettime(constchar* i){Что она означает? Что такое char* ?
Это указатель на символ, или, что в С тоже самое, массив символов, или строка. В С это все одно и тоже.
Ты строку сравнивал с числом - круто?
Спасибо, я уже понял. Видимо, надо "30" или '30', но time.minutes намного проще.
И поверь, про ноты - если ты не Бетховен Моцартович Бах, то без нот ты сыграешь только "мурку" и "люди идут по свету" ;) ;) ;).
С этим согласен. Но мне пока большего и не надо). А знания нот буду подтягивать, насколько это позволяет моя "ЕГЭнутая б-ть" сущность. Ну и людей с муркой буду играть пока что.
Видимо, надо "30" или '30'
Иван, Вы так и не разобрались как и что недо делать (то, что я здесь процитировал - очередной бред). Да, Вам подсказали как обойти проблему (которую Вы сами себе создали), но в том как решить проблему Вы так и не разобрались. А значит, она лишь отошла в сторонку до следующей Вашей программы, чтобы снова взять Вас за горло. Дело Ваше - Вам жить, но я бы на Вашем месте, таки разобрался бы как же починить Ваш изначальный код.
Я бы с радостью, но как? Вы сказали посмотреть дорези в глазах на строчку
char* iarduino_RTC::gettime(constchar* i){Мне пояснили:
Что такое char* ?
Это указатель на символ, или, что в С тоже самое, массив символов, или строка. В С это все одно и тоже.
Ты строку сравнивал с числом - круто?
Я прочитал на этом же сайте про char, где написано:
При объявление литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки символов - тип string: "ABC").(копипаст из статьи про char)
Ну что не так? Попробуйте снова меня направить куда-нибудь, раз уж на то пошло.
в С НЕЛЬЗЯ сравнить строки в виде if (srt1 == "123") ....
Совсем нельзя!
---------------
Ардуино это забавная игрушка ДЛЯ ПРОГРАММИСТОВ, не для
дебиловгуманитариев. На таком языке понятно?Какого хрена лезть не в свое дело? Ты не знаешь основ С, зачем ты занялся Ардуинкой?
Что мешает почитать учебник по языку, которых просто море (начать с Кернигана и Ричи)? Зачем унижаться просьбами на форумах?!
Я Вам сказал не просто до рези смотреть на строчку "
char* iarduino_RTC::gettime(constchar* i){", а заодно читать материал по ссылке. В этом материале описан формат данной строчки и написано где в ней находится название фукнции, где названия и типы параметров, а где тип возвращаемого значения.Вы можете просто ответить на вопрос: "Какого типа значение возвращает функция gettime?". Без болтовни и многостраничного цитирования, просто сказзать где вот в этой самой строчке записан тип возвращаемого значение и назвать какой это тип?
Закрывайте тему.
А то сейчас все любители оскорблений приползут.
С меня довольно.
ДЛЯ ПРОГРАММИСТОВ?
Страуструпа почитаю.
Закрывайте тему.
Непрофессиональные - это те, пользователи, для которых программирование МК не является профессией. Если вы откроете даташит на МК, попробуете вникнуть в действительные механизмы его программирования, то поймете, что Ардуино с его одним digitalWrite() вместо простыни с инициализацией и манипулирования портами, к которым жестко прибиты выводы - дар божий. И обычные химики, немного потратив время на основы Си - могут легко строить простые программы.
Но это не ведет к тому выводу, что Ардуино - это волшебная штука, которую даже медведь лесной запрограммирует.
Но это не ведет к тому выводу, что Ардуино - это волшебная штука, которую даже медведь лесной запрограммирует.
Что это за ересь?! На медведей катить - это ты зря!
Ещё один википедик.
Непрофессиональные пользователи - это те, кто умеет программировать на любительском уровне. Нигде в твоей википедии не сказано, что она ориентирована на тех, кто не умеет программировать вовсе.
"Непрофессиональные пользователи" это вовсе не тоже самое, что дебилы и ленивые задницы, не способные прочитать статью и ответить про тип данных.
На дебилов и лодырей она не ориентирована, даже не надейся.
Что это за ересь?! На медведей катить - это ты зря!
А на кого катить-то уже... Пингви и поросяты умные, коты с динозаврами - добрые, медведей нельзя трогать. Так на вас и аллегорий не напасешься.
Ну вот я непрофессиональный пользователь. На жизнь я зарабатываю, выгружая и загружая всякие ящеги в большие машинки с яркими логотипами. Но Ардуина - моя любофь несравненная, поэтому, в те редкие часы, када я трезвый, я не гнушаюсь почитывать всякие умные книшки про нее, щурясь сослепу, шепча себе под нос эти незнакомые заклинания и шевеля губами. :)
Правильно. Вот это и есть не профессиональное знание Си. И можно потренироваться на Ардуине. Но вот когда я открываю именно профессиональные тексты, то они приводят меня в грусть, переходящую в депресию. Потому что я там понимаю, что это написано на Си и все. Остальное темный лес до небес.
А на кого катить-то уже... Пингви и поросяты умные, коты с динозаврами - добрые, медведей нельзя трогать.
Дык ... (ежели чё, я не при делах, тока ссылку дал) - https://www.youtube.com/watch?v=Z99GzzFEWdM