Разные показания в скетче
- Войдите на сайт для отправки комментариев
Ср, 13/09/2017 - 20:54
Здравствуйте, имеется код, где установлено время срабатывания реле для 2-х каналов на основе DS1302.
В первом канале реле срабатывает по времени, а во втором реле срабатывает на час позже, помогите найти ошибку...
// DS1302_Serial_Easy // Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved // web: http://www.RinkyDinkElectronics.com/ // A quick demo of how to use my DS1302-library to // quickly send time and date information over a serial link #include <DS1302.h> Time t; // Канал 1 int t1=9; // Час включения света int m1=0; // Минуты включения int t2=23; // Час вылючения света int m2=0; // Минуты вылючения //Канал 2 int t3=11; // Час включения света int m3=0; // Минуты включения int t4=19; // Час вылючения света int m4=0; // Минуты вылючения int d; // Переменная в которую записываются текущий показатель часов int m; // Переменная в которую записываются текущий показатель минут // Реле модуль подключен к цифровому выводу 5 int Relay = 5; int Relay2 = 6; // Подключение the DS1302 // DS1302: CE pin (RES) -> Arduino Digital 2 // I/O pin (DAT) -> Arduino Digital 3 // SCLK pin(CLK) -> Arduino Digital 4 DS1302 rtc(2, 3, 4); void setup() { pinMode(Relay, OUTPUT); pinMode(Relay2, OUTPUT); // Setup Serial connection (Установки подключения) Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302(Строки ниже нужно раскоментировать если вы устанавливаете дату и время в модуль после установки нужно опять закоментировать) // Set the clock to run-mode, and disable the write protection // rtc.halt(false); // rtc.writeProtect(false); //rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY //rtc.setTime(20, 44, 0); // Set the time to 12:00:00 (24hr format) //rtc.setDate( 9, 13, 2017); // Set the date to August 6th, 2010 } void loop() { t = rtc.getTime(); // Send Day-of-Week(Передать день недели) //Serial.print(rtc.getDOWStr()); // Serial.print(" "); // Передать дату Serial.print(rtc.getDateStr()); Serial.print(" -- "); d=t.hour,DEC; m=t.min,DEC; // Передать время Serial.println(rtc.getTimeStr()); if (d >= t1 && d <= t2) { if (d==t1 && m<m1) {goto label;} if (d==t2 && m>m2) {goto label;} digitalWrite(Relay, HIGH); // реле включено Serial.println(" Filter - on "); } else { label: digitalWrite(Relay, LOW); // реле выключено Serial.println(" Filter - off "); } if (d >= t3 && d <= t4) { if (d==t3 && m<m3) {goto label2;} if (d==t3 && m>m4) {goto label2;} digitalWrite(Relay2, HIGH); // реле включено Serial.println(" Svet - on "); } else { label2: digitalWrite(Relay2, LOW); // реле выключено Serial.println(" Svet - off "); } delay(30000); // задержка 30 сек }
1. в тексте описано желаемое?
2. как проявляется ошибка?
3. у меня ваша программа не компилируется
1. Всегда давайте ссылки на используемые библиотеки, т.к. библиотек с одинаковыми названиями - как дерьма за баней. У коллеги, вот другая и у него Ваш код не скомпилировался.
2. После строки 65 выведите в Serial значения переменных m и d - узнаете много интересного. Скажите, что получмлось :)
ошибка в строке 85.
Хотя к делу отношения не имеет, но не могу не сказать - Стиль программирования отвратительный.
1. в тексте описано желаемое?
-нет, ошибка, желаемое в коде
2. как проявляется ошибка?
первый канал работает правильно(в 9:00 включается и в 23:00 выключается), а вот второй канал, в 11:00 включается на 30сек., и выключается, а потом только включается в 12:00 и выключается в 20:00, т.е. на час позже от запланированного в коде!
3. у меня ваша программа не компилируется
есть ошибки по месяцам какие то, но в целом крутится цикл, кстати за месяц время включения и выключения(по факту) смещается где то на пол часа!
ошибка в строке 85.
там ещё раньше, в строках 64 и 65 чудеса пошли.
1. в тексте описано желаемое?
-нет, ошибка, желаемое в коде
Коллега имел в виду, что Вы не описали, что этот код должен делать. Никто не обязан за Вас догадываться.
Напечатали переменные, которые я говорил? Понравились?
там ещё раньше, в строках 64 и 65 чудеса пошли.
подозреваю, что 64 и 65 - это опечатка, в реальном коде ее наверно нет, иначе вообще ничего бы не работало.
А ошибка в строке 85 - это именно то, что определяет глюк работы второго канала.
подозреваю, что 64 и 65 - это опечатка, в реальном коде ее наверно нет, иначе вообще ничего бы не работало.
Почему? Посмотрите с какими значениями он потом сравнивает. Всё иногда работает по той же причине, по какой стоящие часы иногда правильное время показывают :)
Граждане, я не программист, я обычный роботяга, который хочет автоматизировать процесс вкл/откл аквариума для детей, я знаю notepad+ , немного html и css
код писал человек из ютуба, на скорую руку, за что ему очень благодарен, как я понял, он его переделал из чего то... все это с косяками работает 3 месяца, чувствую что и дальше так же будет!
чем помогли:
ошибки в стр.64,65,85
я даун
ничего не должно работать
Neptunin, никого не волнует, программист Вы или нет.
Вам попытались помочь. Но помогают здесь ТОЛЬКО тем, кто сам что-то делает и готов учиться.
Если Вас это не устаривает, можете заказать работу за деньги в разделе "Ищу исполнителя".
Думаю, других вариантов нет (по крайней мере, на форуме), как там с "ютубом" - не знаю.
PS. Опубликованный код действительно безобразен. У любого вменяемого программиста он вызывает желание не править его, а переписать с нуля. Если будуте заказывать работу, имейте это в виду.
ошибки в стр.64,65,85
я даун
ничего не должно работать
А Вы чего ожидали? Что за Вас всё исправят? Так это не сюда, это в раздел "Ищу исполнителя", там за деньги делают.
Здесь надо работать самому, а остальные только помогают по мере сил. Вот я Вам сказал "напечатайте значения переменных" и скажите. что получилось. Вы это сделали? А кто за Вас будет делать? Давайте, делайте.
Спасибо Вам большое, в 85-ой строке исправил ошибку, 2-ой канал заработал правильно!
в 64,65, так и есть и было в коде - работает пока, понимаю что нарушены основные правила написания переменных, подскажите где почитать и что именно?!
Спасибо Вам большое, в 85-ой строке исправил ошибку, 2-ой канал заработал правильно!
ну вот, а говорите не помогли...
Нет, нет, нет, можете проверить, я такого не говорил, наоборот указал чем помогли, и тут же получил гору камней)
Спасибо ещё раз
Насчёт строк 64 и 65 меня вчера переклинило - приоритет операций не учёл. Так писать можно, если хочется. Плохо было бы, если правую от "=" часть в скобки взять.
Без жутких goto