Проблема с датчиком времени
- Войдите на сайт для отправки комментариев
Сб, 02/09/2017 - 21:54
У меня есть лента, к которой 12В+ идет через реле. Замыкание/размыкание реле происходит при 1 на D7. 1 на D7 зависит от датчика времени (DS1302) (цель - добиться включения ленты в 7 утра ежедневно). При проверке данных с датчика времени все оказывается верным. Проблемы с условным оператором, я ставил разные условия выдачи 1 на D7, но во всех случаях он выдает на него 1. Всегда. Даже когда условие не может быть верным ни при каких обстоятельствах. Менял пины, использовал другие библиотеки, бестолку. Надеюсь, мне кто-нибудь что-нибудь посоветует, ибо я в этой теме проездом
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,2,4,3); void setup() { delay(300); Serial.begin(9600); time.begin(); // time.settime(0,31,20,2,9,17,6); // 0 сек, 31 мин, 20 час, 2, сентября, 2017 года, суббота pinMode(7, OUTPUT); } void loop(){ if(millis()%1000==0){ Serial.println(time.gettime("d-m-Y, H:i:s, D")); delay(1); // проверка работы датчика выводом данных с переменных } time.gettime(); if (time.gettime("h")==19) digitalWrite(7,HIGH); // а вот тут на 7 пин всегда дается 1 }
Библиотека отсюда - http://iarduino.ru/file/235.html ?
Если нет, давайте ссылку.
А если да, то ...
1. зачем Вы сравниваете значение, возвращаемое gettime() с чсилом 19 (в строке 16)? Чего Вы хотите этим добиться? Вы знаете что именно возвращает gettime? Она возвращает указатель на char - т.е. строку.
2. очень советую выбросить эту библиотеку, давно не видел столь безграмотного кода.
1. Я сравниваю с 19, потому что во время тестов было 19 часов.
2. Ссылку попробую кинуть, минуту
Давайте, а то если мы на разные библиотеки смотрим, то разговор "в пользу бедных".
Скачано отсюда: http://iarduino.ru/file/235.html
Т.е. таже самая.
Ну тогда читайте мой предыдущий пост. Похоже первого моего вопроса Вы не поняли. Повторю по-другому.
На кой хрен Вы сравниваете возвращаемое функцией значение с числом 19? Вы знаете, что возврадщает эта функция? Если думаете, что количество часов, то таки нет. Вот её описание:
char* gettime (const char*);
Она возвращает строку! А Вы указатель на эту строку зачем-то с 19 сравниваете.
Ну и второй пункт из моего предыдущего поста никто не отменял.
На самом деле, я все еще не знаю как исправить эту проблему. Я понял, что она char, а как мне получить переменную числом, я не понимаю. И какую библиотеку можно использовать? Я пробовал несколько, но я мало что понял из файлов ридми и инфо на сайте, ибо синтаксис Си отличается от паскаля...
"Ученье сокращает нам опыты быстротекущей жизни" (с) АСПушкин. ;) За точность не ручаюсь, это из Годунова.
гуглим strcmp(). И да пребудет с тобой сила!
Сорри, добавлю, а то ведь не дойдет - вам нужен вариант strncmp().
======================================
ЗЫ: Евгений, я временно "скорой помощью" для чайников не работаю, чиню свой автобус, чтобы съездить на рекомендуемую Вами конференцию.
Использовал эту функцию, не сработало
Идиот! Не 19, а "19"! Разницу понимаем или, все таки, продаем ардуино и в дворники?
Зачем оскорблять то? Я же сказал, что в этом проездом и не разбираюсь. Я же не называю вас идиотом потому что вы не знаете что такое ВСУ?
Не прокатывает. Я знаю. Еще раз придется повторить: я летать умею. Не на тех самолетах, где есть ВСУ, но все же. :-)
Что с кавычками, что без - толку никакого
Почти: https://ru.wikipedia.org/wiki/Вспомогательная_силовая_установка *
К тому ж эт я любя....
Так в чем может быть проблема кроме кривой библиотеки?
strncmp и указывайте длину 2. Предварительно выведите в сериал эти часы, чтобы видеть, что возвращает ваша чудная библиотека.
Вот что выдает моя чудная библиотека, strncmp с длиной 2 также не помогает
Вы выведите time.gettime("h")
Выдает последовательность 21, как и должно быть
У меня часы только 3132 и я человек не молодой и уже ко сну отхожу. Посему пишу с телефона и посмотреть код этой дивной библиотеки сегодня не могу. Поэтому жду от вас результата печати
Ля! Выведитн на печать, окружив любыми символами, чтобы увидеть пробелы. И листинг покажите
Это где сейчас 21? В москве 23! :)
Что такое листинг? Что значит вывести на печать?
Я в МСК, просто такое время установил на датчик
На печать это в сериал. Листинг это то, что видно в мониторе порта. Вы ребенок или старик? Термины, вроде, общепринятые?
Я не ребенок, и не старик. Термины совсем не общепринятые, имея дело с паскалем я их слышу впервые
Что конкретно нужно напечатать в сериал?
А если так попробовать?
Все... Я засыпаю... Если у меня будет желание, то завтра помогу.
Во. Ника послушайте.
В любом случае, спасибо за потраченное время
Надеюсь, я правильно использовал эту строку, в любом случае, не сработало
Не смог выкигуть из головы. А почему вв не используете time.Hours? Как и написано в примерах к этой библиотеке. Я все-таки открыл примеры с телефона...
Я пытался... Результат такой же, а точнее его отсутствие в виде присутствия на 7 пине единицы
Этого не может быть. Скопируйте код примера с iarduino. И рпсскажите.
Надеюсь, я правильно использовал эту строку, в любом случае, не сработало
Использовали правильно, но надо проверить, что дает atoi(time.gettime("H")) . Компилятор не ругается на эту строку? Судя по дискусии http://arduino.ru/forum/programmirovanie/preobrazovanie-tipov-string-hex-v-int есть подводные камни.
Перечитал еще раз весь пример, все сделано также как и там. В сериал сейчас выводил с time.gettime(), чтобы получить ответ числом. Получил 21, как и было до этого. Попробовал использовать time.hours("H") (снова), результат один
Вот это:
даёт тоже самое, что и time.gettime("H") и time.hours. Компилятор не ругается.
А ссылка на дискуссию недоступна
Тогда так надо
if
(time.hours
==19) digitalWrite(7,HIGH); else
digitalWrite(7,LOW);http://arduino.ru/forum/programmirovanie/preobrazovanie-tipov-string-hex...
Простите, но это снова не помогло. На D7 постоянно 1... Может быть, что дело не в коде?
Напечатайте time.hours и убедитесь ,что оно меняется, когда прыгают часы. Если часы прыгают, а 1 не меняется, попробовать просто без if подавать 0 и 1. Если меняется , то такого не может быть :-)
time.minutes меняются чаще, при настройке проще.
time.hours изменяются, 1 нет. Самое интересное, что я дал на 7 пин LOW, а реле все равно включено. Видимо, дело было не в условиях, и возможно, даже, не в коде...
Мы решили проблему, я, действительно, идиот, перепутал провода в реле, и оно было нормально замкнутым. Огромное спасибо за потраченное время..