Как преобразовать переменную для RTC DS1302?
- Войдите на сайт для отправки комментариев
Всем привет! Прошу помощи с часами DS1302. Никак не могу добиться от кода, чтобы в мониторе выводились Hello World. Брал библиотеку отсюда.
Вот код:
// DS1302_Serial_Easy (C)2010 Henning Karlsen // web: http://www.henningkarlsen.com/electronics // // A quick demo of how to use my DS1302-library to // quickly send time and date information over a serial link // // I assume you know how to connect the DS1302. // DS1302: CE pin -> Arduino Digital 2 // I/O pin -> Arduino Digital 3 // SCLK pin -> Arduino Digital 4 #include <DS1302.h> // Init the DS1302 DS1302 rtc(2, 3, 4); void setup() { // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY rtc.setTime(18, 59, 55); // Set the time to 12:00:00 (24hr format) rtc.setDate(22, 9, 2012); // Set the date to August 6th, 2010 } void loop() { // Send Day-of-Week Serial.print(rtc.getDOWStr()); Serial.print(" "); // Send date Serial.print(rtc.getDateStr()); Serial.print(" -- "); // Send time Serial.println(rtc.getTimeStr()); if (rtc.getTimeStr() == "19:00:00") //Сравнивается текущее время с нужным { Serial.print("Hello World"); } // Wait one second before repeating :) delay (1000); }
В результате этого кода на монитор выводятся данные, все хорошо, но вот ХеллоВорлд не выводится. Насколько понимаю, getTimeStr() вовзращает время в виде строки, а в if() в скобках тоже строки. Через 5 секунд время становится 19:00:00, а монитор никак не показывает слова. Если написать if (rtc.getTimeStr() > 1), то слова появляются.
На форуме поискал, есть тема, как получить отдельно часы, минуты. Попытался добавить несколько строк, но IDE ругается, что переменные разного типа, "Time" и "int". Вот код, убрал некоторые лишние строки, выводящие дату:
// DS1302_Serial_Easy (C)2010 Henning Karlsen // web: http://www.henningkarlsen.com/electronics // // A quick demo of how to use my DS1302-library to // quickly send time and date information over a serial link // // I assume you know how to connect the DS1302. // DS1302: CE pin -> Arduino Digital 2 // I/O pin -> Arduino Digital 3 // SCLK pin -> Arduino Digital 4 #include <DS1302.h> // Init the DS1302 DS1302 rtc(2, 3, 4); Time t; void setup() { // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY rtc.setTime(17, 59, 55); // Set the time to 12:00:00 (24hr format) rtc.setDate(22, 9, 2012); // Set the date to August 6th, 2010 } void loop() { t = rtc.getTime(); // Send time Serial.println(rtc.getTimeStr()); if ( t == 19) //Сравнивается текущее время с нужным { Serial.print("Hello World"); } // Wait one second before repeating :) delay (1000); }
Ругается вот на эту строчку: if ( t == 19). Выяснил еще интересную вещь. Команда rtc.getTime() выводит-то час правильно, но если написать if (rtc.getTime() > 10), то условие истинно, а если меньше 10, то уже не истинно, то есть почему-то "внутри" rtc.getTime() всегда 10! Это меня ставит в тупик. Прошу помощи, укажите, где зарылась собака.
Строка 42 первого кода. Строки так не сравниваются. Гуглите функцию strcmp
IDE ругается, что переменные разного типа, "Time" и "int".
А что Вас смущает-то? Вы всё правильно понимаете. Вы пытаетесь сравнивать переменные разных типов. Как Вы себе этто видите? Вы можете ответить на вопрос что больше три вилки или две котлеты? Нельзя сравнивать разные сущности.
Выяснил еще интересную вещь. Команда rtc.getTime() выводит-то час правильно, но если написать if (rtc.getTime() > 10), то условие истинно, а если меньше 10, то уже не истинно, то есть почему-то "внутри" rtc.getTime() всегда 10!
Ну, так тоже самое, что и выше. Вы сравниваете переменные разных типов, т.е. "тёплое с мягким".
Прошу помощи, укажите, где зарылась собака.
Собака спряталась в Вашем незнании языка на котором Вы пытаетесь программировать. Хотя, в отличие от многих новичков здесь, Вы здраво рассуждаете и в принципе понимаете о чём речь, но знания надо прокачать. Вот Вам моя помощь.
Строка 42 первого кода. Строки так не сравниваются. Гуглите функцию strcmp
Спасибо, Евгений! Раньше изучал основы С++, но так и остался на уровне новичка. Погуглил функцию strcmp. На первом сайте код совершенно непонятный:
Число Значение
В строчке if (strcmp(s, "pass"))
если ввести "pass", то в результате if() вернет же 0, правильно? А в коде возвращает почему-то
printf("Invalid password.\n");
return 0;
Почему же "Invalid password", если пользователь вводит правильный пароль, то есть s и "pass" равны? Может, сайт неправильный? В этом еще больше убеждает второй сайт, код на котором логичнее:
Invalid password будет написано, только когда строки не равны
Если s равно "pass", тогда strcmp вернет. 0 и if выполнит часть else
Скорее всего gets читает с \n (или \r) на конце.
Напечатйет длину s и саму её поисмовльно - разберётесь.
Если s равно "pass", тогда strcmp вернет. 0 и if выполнит часть else
Наконец-то понял логику этого кода. Ничего не скажешь, хитро придумано )))
Евгений, скетч заработал как надо, благодаря strcmp:
Спасибо за ссылку на книгу, может, как-нибудь возьмусь за С. Если сейчас буду изучать, не до конца изучив С++, боюсь, как бы не запутаться.
Так Вы порядок перепутали, надо с С начинать :)
C++ везде рекламируется, как более продвинутый вариант С. Поэтому и выбрал С++.
Аглицкий учить тож с О'Генри в оригинале или, все же, с традиционного "Лондон из зе Кэпитл оф Грейт Британ"?
Запорожец или жигули?
Я, када сдавал кандидацкий минимум, читал Алису в стране чудес в оригинале. Мозгодробительное чтиво.
читал Алису в стране чудес в оригинале. Мозгодробительное чтиво.
Ага: "Never Imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise"
Ага: "Never Imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise"
Так изучить С проще? Полагаю, где-то в 2 раза, в связи с тем, что в С нет указателей и ссылок?
в связи с тем, что в С нет указателей
А куда ж они оттуда делись?
вы перепутали, это в С# указателей нету. Есть, но очень не на виду.
Неужели изучение С так же просто, как изучение букваря? Может, поэтому я остановился на уровне новичка в С++?
читал Алису в стране чудес в оригинале. Мозгодробительное чтиво.
Ага: "Never Imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise"
О! Не заметил комментов.
В Алисе смыслы прикольные, ничуть не потерянные при переводе, а язык - очень простой. Без вульгарных просторечий,как в американской прозе и без архаизмов, как у Шекспира, с его вечными зай и зии. Я по Алисе как раз и учил язык еще а школе.
=================================
Для вопрошающего:
С++ это расширение С, а не другой язык. Утверждение не совсем точно, но неточность на уровень выше, чем это вас касается.
Поэтому технически невозможно "учить С++" не изучая С. В этом причина того, что на вами глумятся.
С++ это расширение С, а не другой язык. Утверждение не совсем точно, но неточность на уровень выше, чем это вас касается.
Поэтому технически невозможно "учить С++" не изучая С. В этом причина того, что на вами глумятся.
В таком случае, верно ли обратное утверждение - изучая С++, изучается С?
В таком случае, верно ли обратное утверждение - изучая С++, изучается С?
Я так понимаю, что верно, С и С++ - это же один, по сути, язык.
Кровожадный Влад уже ж ответил выше. #16
Я так понимаю, что верно, С и С++ - это же один, по сути, язык.
Ну, Вам уже было сказано, что языки-то разные, но это "не Ваша лига". В Вашей лиге допустимо считать их одним и тем же языком, просто один - расширение другого.