Здравствуйте, я собрал часы Nixie Clock по гайду на вики амперки, все исходники и т.д брал опять же с вики, и естественно программный код взял оттуда же. Но есть одна большая проблема, часы не отсчитывают время, я могу настраивать часы и минуты, могу настраивать подсветку, но они не идут, как думаете в чем может быть проблема? Помогите пожалуйста, уже всю голову сломал... Код (C++): // библиотека для работы с адресными светодиодами #include <Adafruit_NeoPixel.h> // библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // библиотека для работы с кнопками #include "TroykaButton.h" // инициализируем подключенную кнопку TroykaButton button(10); // номер пина, к которому подключена RGB-матрица #define MATRIX_PIN 11 // количество светодиодов в матрице #define LED_COUNT 40 // инициализация цепочки светодиодов подсветки цифр Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800); // инициализация светодиода разграничителя Adafruit_NeoPixel dot = Adafruit_NeoPixel(1, 12, NEO_GRB + NEO_KHZ800); // размер массива для времени #define LEN_TIME 12 // размер массива для даты #define LEN_DATE 12 // размер массива для дня недели #define LEN_DOW 12 // создаём объект для работы с часами реального времени RTC clock; // переменные для мигания int ledState = 0; unsigned long previousMillis = 0; unsigned long currentMillis ; // массив для хранения текущего времени char time[LEN_TIME]; // массив для хранения текущей даты char date[LEN_DATE]; // массив для хранения текущего дня недели char weekDay[LEN_DOW]; int hour; int minute; int one; int two; int three; int four; int displaysettings=0; int red=150; int green=200; int blue= 50; void setup() { // инициализация button.begin(); matrix.begin(); dot.begin(); clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(hour,minute,0,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время не менялось при прошивки или сбросе питания // закоментируйте оба метода clock.set(); pinMode(10, INPUT_PULLUP); } void loop() { // считываем состояние кнопки button.read(); // запрашиваем данные с часов clock.read(); // считаем нажатия чтоб переходить из режима в режим if (button.justPressed()){ displaysettings = displaysettings + 1; } if(displaysettings==0){ // сохраняем текущее время hour = clock.getHour(); minute = clock.getMinute(); } if(displaysettings == 1){ // присваиваем значение считываемое с потенциометра hour = map (analogRead(A0),2, 1020, 0, 23); clock.set(hour,minute,0,27,07,2005,THURSDAY); } if(displaysettings == 2){ // присваиваем значение считываемое с потенциометра minute = map (analogRead(A0), 2, 1018, 0, 59); clock.set(hour,minute,0,27,07,2005,THURSDAY); } if(displaysettings == 3){ // присваиваем значение считываемое с потенциометра red = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 4){ // присваиваем значение считываемое с потенциометра green = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 5){ // присваиваем значение считываемое с потенциометра blue = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 6){ displaysettings = 0; } // делим минуты и часы на разряды one = hour / 10; two = hour % 10; three = minute / 10; four = minute % 10; matrix.clear(); // зажигаем нужные светодиоды matrix.setPixelColor(four, red, green, blue); matrix.setPixelColor(three + 10, red, green, blue); matrix.setPixelColor(two + 20, red, green, blue); matrix.setPixelColor(one + 30, red, green, blue); matrix.show(); // ждём одну секунду delay(10); // мигание разделителя blinking(); } void blinking(){ if (millis() - previousMillis >= 1000) { previousMillis = millis(); if (ledState == 0) { ledState = 1; dot.setPixelColor(0, red, green, blue); } else { ledState = 0; dot.setPixelColor(0, 0, 0, 0); } dot.show(); } }
– Какие странные у вас часы, – сказала Алиса, с большим интересом наблюдавшая за манипуляциями Зайца. – Показывают число, а который час – не показывают! – А с какой стати? – буркнул Шляпник. – Разве часы обязаны всё показывать? (Льюис Кэрролл)
Чтобы вам помочь нужно иметь часы на руках. Допускаю, что амперка могла выложить неработающий проект, но вероятность этого мала. Значит, у вас что-то не работает (брак модуля), либо вы где-то ошиблись при сборке. Отлаживать удаленно сложно. Пробовали все запускать до сборки?
Собрано все вроде правильно, просто потому что сам процесс достаточно легкий, все модули после покупки были проверены, кроме часов реального времени, возможно дело в них, просто я не знаю как их можно проверить.
на некоторых RTC модулях, говорят. есть контакт, который надо замкнуть, чтобы часы шли (отсчитывали время).
http://cxem.net/mc/mc168.php Цытато оттудова: Кстати, следует учесть, что при первом запуске DS1307 (например, при подключении батареи резервного питания) микросхема будет возвращать в секундах значение 80, это означает, что часы остановлены. Для их запуска запишите в секунды значение 1. Если DS1307 при чтении любых данных возвращает значение 255 или 168 это означает что, микросхема неправильно подключена, либо отсутствует батарея резервного питания.
Код (C++): // библиотека для работы с адресными светодиодами #include <Adafruit_NeoPixel.h> // библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // библиотека для работы с кнопками #include "TroykaButton.h" // инициализируем подключенную кнопку TroykaButton button(10); // номер пина, к которому подключена RGB-матрица #define MATRIX_PIN 11 // количество светодиодов в матрице #define LED_COUNT 40 // инициализация цепочки светодиодов подсветки цифр Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800); // инициализация светодиода разграничителя Adafruit_NeoPixel dot = Adafruit_NeoPixel(1, 12, NEO_GRB + NEO_KHZ800); // размер массива для времени #define LEN_TIME 12 // размер массива для даты #define LEN_DATE 12 // размер массива для дня недели #define LEN_DOW 12 // создаём объект для работы с часами реального времени RTC clock; // переменные для мигания int ledState = 0; unsigned long previousMillis = 0; unsigned long currentMillis ; // массив для хранения текущего времени char time[LEN_TIME]; // массив для хранения текущей даты char date[LEN_DATE]; // массив для хранения текущего дня недели char weekDay[LEN_DOW]; int hour; int minute; int one; int two; int three; int four; int displaysettings=0; int red=150; int green=200; int blue= 50; void setup() { // инициализация button.begin(); matrix.begin(); dot.begin(); clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(hour,minute,0,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время не менялось при прошивки или сбросе питания // закоментируйте оба метода clock.set(); pinMode(10, INPUT_PULLUP); } void loop() { // считываем состояние кнопки button.read(); // запрашиваем данные с часов clock.read(); // считаем нажатия чтоб переходить из режима в режим if (button.justPressed()){ displaysettings = displaysettings + 1; } if(displaysettings==0){ // сохраняем текущее время hour = clock.getHour(); minute = clock.getMinute(); } if(displaysettings == 1){ // присваиваем значение считываемое с потенциометра hour = map (analogRead(A0),2, 1020, 0, 23); clock.set(hour,minute,0,27,07,2005,THURSDAY); } if(displaysettings == 2){ // присваиваем значение считываемое с потенциометра minute = map (analogRead(A0), 2, 1018, 0, 59); clock.set(hour,minute,0,27,07,2005,THURSDAY); } if(displaysettings == 3){ // присваиваем значение считываемое с потенциометра red = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 4){ // присваиваем значение считываемое с потенциометра green = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 5){ // присваиваем значение считываемое с потенциометра blue = map (analogRead(A0),0, 1023, 0, 255); } if(displaysettings == 6){ displaysettings = 0; } // делим минуты и часы на разряды one = hour / 10; two = hour % 10; three = minute / 10; four = minute % 10; matrix.clear(); // зажигаем нужные светодиоды matrix.setPixelColor(four, red, green, blue); matrix.setPixelColor(three + 10, red, green, blue); matrix.setPixelColor(two + 20, red, green, blue); matrix.setPixelColor(one + 30, red, green, blue); matrix.show(); // ждём одну секунду delay(10); // мигание разделителя blinking(); } void blinking(){ if (millis() - previousMillis >= 1000) { previousMillis = millis(); if (ledState == 0) { ledState = 1; dot.setPixelColor(0, red, green, blue); } else { ledState = 0; dot.setPixelColor(0, 0, 0, 0); } dot.show(); } } Могли бы вы подсказать пожалуйста, как это сделать в коде, просто я больше по железячкам разбираюсь, а в C++ не очень
а в русских буквах понимаешь, которые тут написаны? // метод установки времени и даты в модуль вручную // clock.set(hour,minute,0,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время не менялось при прошивки или сбросе питания // закоментируйте оба метода clock.set();
блин, нафига же вы такие тогда лезете в программирование? В отрывке, процитированном Котом -вторую строчку раскомментируй и запиши так: clock.set(10,30,1,03,07,2019,WEDNESDAY); четвертую закомментируй