Помогите понять что не так с кодом
- Войдите на сайт для отправки комментариев
Ср, 13/04/2016 - 19:47
Собрал часы на семисегментных индикаторах и сдвиговых регистрах, подключил модуль часов реального времени, но почему- то цифры не выводятся, вот код который собрал из разичных примеров
#include <Wire.h> #include "RTClib.h" const int RTC_POW_PIN =A3; const int RTC_GND_PIN =A4; int refresh_rate = 500; RTC_DS1307 RTC; const byte SER=8; const byte LATCH=9; const byte CLK=10; byte num[10] = {B11000000, B11111001, B10100100, B10110000, B10011001, B10010010, B10000010, B11111000, B10000000, B10010000,}; // 0, 1 String hour, minute, second; void setup() { Serial.begin (9600); pinMode (SER, OUTPUT); pinMode (LATCH, OUTPUT); pinMode (CLK, OUTPUT); pinMode(RTC_POW_PIN, OUTPUT); pinMode(RTC_GND_PIN, OUTPUT); digitalWrite (RTC_POW_PIN, HIGH); digitalWrite (RTC_POW_PIN, LOW); Wire.begin(); RTC.begin(); //if (! RTC.isrunning()) { //Serial.println("RTC is NOT running!"); //RTC.adjust(DateTime(__DATE__, __TIME__));} } void loop(){ DateTime now = RTC.now(); //int refresh_rate = 500; //Присваеваем значение для переменных int h1 = (now.hour()/10, DEC); int h2 = (now.hour()%10, DEC); int m1 = (now.minute()/10, DEC); int m2 = (now.minute()%10, DEC); int s1 = (now.second()/10, DEC); int s2 = (now.second()%10, DEC); digitalWrite(LATCH,LOW); shiftOut(SER, CLK, MSBFIRST, num[s2]); shiftOut(SER, CLK, MSBFIRST, num[s1]); shiftOut(SER, CLK, MSBFIRST, num[2]); shiftOut(SER, CLK, MSBFIRST, num[m1]); shiftOut(SER, CLK, MSBFIRST, num[h2]); shiftOut(SER, CLK, MSBFIRST, num[2]); digitalWrite(LATCH,HIGH); delay(500); }
Сколько сдвиговых регистров использовал?
Теорию работы с ними разобрал?
Я только для одного освоил, для двух и более ещё не понимаю. Но в твоём коде увидел несостыковку именно там
Вот сссылка на подключение 2 регистров.
http://uscr.ru/kak-podklyuchit-sdvigoviy-registr-k-arduino/
Попробуйте для начала
1) просто, безо всяких часов, выводит цифры на индикатор
2) просто, без всякого индикатора, выводить время в сериал.
Поймите, где у Вас проблема, решите её, а потом уж объединяйте скетчи в один.
Отдельно цифры выводятся отлично, например с этого скетча
И часы в сериал выводятся
а вот вместе не хотят работать
Сдвиговых регистров использую шесть, статическая индикция
А вот это что:
?
Там точно GND?
Вижу
pinMode(RTC_GND_PIN, OUTPUT);
но не вижу установки значения.тут все так и должно быть?
Да, исправил, там должно быть так
Но всё равно не работает, потому что я модуль часов подключа даже к обычным пинам питания
Вообщем когда убираю этот блок
И просто пытаюсь вывести цифры
то всё нормально, всё выводится
но когда этот блог возвращаю, то опять ничего, даже цифры просто не выводятся
Вообщем когда убираю этот блок
Не знаю, что у Вас выводится, только Вы попробуйте вывести в сериал значения переменных h1, h2, m1, m2, s1, s2 после вот этих строк. Узнаете много интересного. Уверен. что Вы этого не делали и понятия не имеете какие у Вас получаются занчения в этих переменных.
Я же Вам писал - выводите всё в отладочную печать, не работайте вслепую и добивайтесь, чтобы всё было нормально на каждом шаге. Тогда и вся программа заработает.
Вообщем когда убираю этот блок
Подозреваю, что не надо скобки после now.hour и иже с ними.
Подозреваю, что не надо скобки после now.hour и иже с ними.
Напрасно подозреваете. Это методы.
Прошу Вас не подсказывайте, что не так с этими выражениями. Я уже написал ТС, чтобы напечатал значения и посмотрел. Подскажете - не сделает и через день другой опять на те же грабли.
Напрасно подозреваете. Это методы.
Прошу Вас не подсказывайте, что не так с этими выражениями. Я уже написал ТС, чтобы напечатал значения и посмотрел. Подскажете - не сделает и через день другой опять на те же грабли.
Ок, понял. Я так - навскидку :) Конечно, не знаючи, как там устроен DatеTime, моё предположение - пальцем в ж., что называется :)
Вообщем когда убираю этот блок
Не знаю, что у Вас выводится, только Вы попробуйте вывести в сериал значения переменных h1, h2, m1, m2, s1, s2 после вот этих строк. Узнаете много интересного. Уверен. что Вы этого не делали и понятия не имеете какие у Вас получаются занчения в этих переменных.
Я же Вам писал - выводите всё в отладочную печать, не работайте вслепую и добивайтесь, чтобы всё было нормально на каждом шаге. Тогда и вся программа заработает.
в сериал ничего не выводится
[quote=Iskandarov]
в сериал ничего не выводится
[/quote]
И не будет, пока Вы его не инициализируете. В setup-то неплохо бы написать что-то вроде
Serial.begin(<скорость>);
в сериал ничего не выводится
[/quote]
И не будет, пока Вы его не инициализируете. В setup-то неплохо бы написать что-то вроде
Serial.begin(<скорость>);
в setup есть инициализация
Ну, тогда смотрите от того ли порта монитор, не задействованы ли в скетче ноги Rx/Tx для других нужд и всё остальное, я не знаю то там у Вас ещё. Добейтесь, чтобы вериал нормально работал. Если у Вас вывод в Serial не работает, то как Вы собираетесь всё остальное работать-то заставить.
Как только заработает и Вы увидите, наконец, чему у Вас равны эти переменные, многое Вам станет понятнее.
Перебросил питание часов с А3 А4 на +5 и GND и "о чудо" монитор порта заработал
И да, там все значения 10
Все, понял
DEC в строках было лишнее
Ну, вот и отлично. Я специально Вам не подсказывал. На будущее - при любых непонятках, печатайте всё подряд, смотрите и анализируйте - только так Вы научитесь разбираться и дожимать программы до работающего состояния.
Спасибо большое