ок, так вот теперь по темеStarichok51 писал(а):может хватит оффтопит про терморезисторы в этой теме?
прибавил в код еще кнопку, что бы переключать режимы на индикаторе: температуру , гадзинник, хвилины, год и так по кругу и заметил странную особенность, четыре сегмента в режиме часов горят одинаково и с хорошей яркостью, а вот минуты - 2 правых сегмента, яркость почему то снизилась вдвое, год - первый сегмент слева с хорошей яркостью (2), а вот сегменты 024 уже более низкой яркости, в чем может быть загвоздака
привожу код:
Спойлер
Код: Выделить всё
#include "RTClib.h"
RTC_DS1307 rtc;
#include <GyverNTC.h>
GyverNTC therm(0, 10000, 3950);
//---- ПИНЫ ----
byte SCLK = 7;
byte RCLK = 6;
byte DIO = 5;
//---- ПИНЫ ----
#include <TM74HC595Display.h>
#include <TimerOne.h>
#include <Button.h>
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned long dispIsrTimer, countTimer, countSerial;
const int buttonPin = 2;
Button button(buttonPin);
int buttonPressCount = 0;
void setup() {
Serial.begin(57600);
rtc.begin();
button.begin();
}
void loop() {
// Обновляем состояние кнопки
button.read();
// Проверяем, было ли нажатие кнопки
if (button.pressed()) {
// Увеличиваем счетчик нажатий на кнопку
buttonPressCount++;
disp.clear();
}
// Выполняем действие в зависимости от значения счетчика нажатий
switch (buttonPressCount) {
case 1:
Serial.println("Выполняется действие 1");
if (millis() - countTimer > 500) { // каждые 50 миллисекунд ("прозрачный" аналог delay)
DateTime now = rtc.now();
int displaytime = (now.second());
disp.digit4(displaytime);
countTimer = millis(); // сбросить таймер
}
break;
case 2:
Serial.println("Выполняется действие 2");
if (millis() - countTimer > 1000) { // каждые 50 миллисекунд ("прозрачный" аналог delay)
DateTime now = rtc.now();
int displaytime = now.year();
disp.digit4(displaytime);
countTimer = millis(); // сбросить таймер
}
break;
case 3:
Serial.println("Выполняется действие 3");
if (millis() - countTimer > 1000) { // каждые 50 миллисекунд ("прозрачный" аналог delay)
DateTime now = rtc.now();
int displaytime = ((now.month() * 100) + now.day());
disp.float_dot(therm.getTempAverage(), 1);
//disp.digit4(displaytime);
countTimer = millis(); // сбросить таймер
}
break;
// Если было больше трех нажатий, счетчик сбрасывается
default:
if (millis() - countTimer > 1000) { // каждые 50 миллисекунд ("прозрачный" аналог delay)
DateTime now = rtc.now();
int displaytime = ((now.hour() * 100) + now.minute());
disp.digit4(displaytime);
countTimer = millis(); // сбросить таймер
}
buttonPressCount = 0;
break;
}
disp_isr(); // динамическая индикация
}
void disp_isr() {
if (micros() - dispIsrTimer > 300) { // таймер динамической индикации (по-русски: КОСТЫЛЬ!)
disp.timerIsr(); // "пнуть" дисплей
dispIsrTimer = micros(); // сбросить таймер
}
}Спойлер
Код: Выделить всё
/*
Пример работы с дисплеем на микросхеме TM74HC595
Динамическая индикация осуществляется "вручную" таймером на micros()
AlexGyver Technologies http://alexgyver.ru/
*/
/*
Основные методы библиотеки:
disp.set(X, port); // вывести 16 ричный код X в порт port (либо элемент массива SYM!!!)
// вывести двухзначное число value на порт port (0 - первый и второй порт, 2 - 2 и 3, 3 - 3 и 4 порты))
disp.digit2(value, port);
disp.digit4(value); // вывести число value
disp.digit4showZero(value); // вывести число value с нулями СЛЕВА
disp.float_dot(value, pos); // вывести float число value с точкой СПРАВА по счёту pos
disp.int_dot(value, pos); // вывести int число value с точкой СПРАВА по счёту pos
disp.clear(); // очистить дисплей
*порты идут справа налево! (3 2 1 0)
*/

