7 сегментные большие часы на Ардуино. Имею вопросы!

Тема в разделе "Arduino & Shields", создана пользователем GennOk, 26 июл 2016.

  1. GennOk

    GennOk Нерд

    Здравствуйет уважаемые Ардуинщики и им сочувствующие!

    С детства любил ковырять различные радиосхемы, а тут появилась такая классная штука как среда Ардуино! Решил попробовать себя в ней! Все проекты были взяты в свободном доступе из Интернета. Коды практически не переписывались, я на них учился. Первый проект был "Бесполезна коробка" (

    ). Второй - "6 позиционный переключатель" (

    ). Тут насмотрелся на прикольные часы

    и решил собрать себе. С большим трудом нашел скетч. Немного переделал его по себя. Дело в том, что я выбрал себе шрифт "Digital-7", нарезал пенопласт. А когда стал подставлять светодиодную ленту под отверстия, понял что некоторые из сегментов длиннее остальных. И пришлось делать цифру из трех и четырех светодиодных отрезков. Сам скетч.

    Код (C++):
    001 //<a href="http://www.instructables.com/id/Big-auto-dim-room-clock-using-arduino-and-WS2811/?comments=all#CPDXFS0INZGBXU1" rel="nofollow">http://www.instructables.com/id/Big-auto-dim-room-clock-using-arduino-and-WS2811/?comments=all#CPDXFS0INZGBXU1</a>
    002
    003 #include <DS3232RTC.h>
    004 #include <Time.h>
    005 #include <Wire.h>
    006 #include <FastLED.h>
    007
    008 #define NUM_LEDS 108 // 5 by segment + 6 in the middle
    009 #define LED_TYPE WS2812
    010 #define COLOR_ORDER GRB // Define color order for your strip
    011 #define BRIGHTNESS 150
    012 #define LED_PIN 5 // Data pin for led comunication
    013
    014 CRGB leds[NUM_LEDS]; // Define LEDs strip
    015
    016 byte digits[10][26] = {
    017 {
    018 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }
    019 , // Digit 0
    020 {
    021 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 }
    022 , // Digit 1
    023 {
    024 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0 }
    025 , // Digit 2
    026 {
    027 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1 }
    028 , // Digit 3
    029 {
    030 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1 }
    031 , // Digit 4
    032 {
    033 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1 }
    034 , // Digit 5
    035 {
    036 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }
    037 , // Digit 6
    038 {
    039 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1 }
    040 , // Digit 7
    041 {
    042 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }
    043 , // Digit 8
    044 {
    045 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1 }
    046 }; // Digit 9 | 2D Array for numbers on 7 segment
    047
    048 byte firstdigit[2][10] = {
    049 {
    050 0,0,0,0,0,0,0,0,0,0 }
    051 , // Digit 0 first number
    052
    053 {
    054 1,1,1,1,1,1,1,1,1,1 }
    055 }; // Digit 1 first number | 2D Array for numbers on 7 segment
    056
    057 bool Dot = true; //Dot state
    058
    059 bool DST = false; //DST state
    060 int last_digit = 0;
    061 //long ledColor = CRGB::DarkOrchid; // Color used (in hex)
    062 long ledColor = CRGB::MediumVioletRed;
    063 long ColorTable[16] = {
    064 CRGB::Amethyst,
    065 CRGB::Aqua,
    066 CRGB::Blue,
    067 CRGB::Chartreuse,
    068 CRGB::DarkGreen,
    069 CRGB::DarkMagenta,
    070 CRGB::DarkOrange,
    071 CRGB::DeepPink,
    072 CRGB::Fuchsia,
    073 CRGB::Gold,
    074 CRGB::GreenYellow,
    075 CRGB::LightCoral,
    076 CRGB::Tomato,
    077 CRGB::Salmon,
    078 CRGB::Red,
    079 CRGB::Orchid};
    080 void setup(){
    081
    082 Serial.begin(9600);
    083
    084 Wire.begin();
    085 FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
    086 // FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
    087 FastLED.setBrightness( BRIGHTNESS );
    088 pinMode(2, INPUT_PULLUP); // Define DST adjust button pin
    089 pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin
    090 // pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin
    091
    092 }
    093
    094 // Check Light sensor and set brightness accordingly
    095 void BrightnessCheck(){
    096 const byte sensorPin = 3; // light sensor pin
    097 const byte brightnessLow = 75; // Low brightness value
    098 const byte brightnessHigh = 100; // High brightness value
    099 int sensorValue = digitalRead(sensorPin); // Read sensor
    100 if (sensorValue == 0) {
    101 Serial.println("Brightness High");
    102 LEDS.setBrightness(brightnessHigh);
    103 }
    104
    105 else {
    106 Serial.println("Brightness Low");
    107 LEDS.setBrightness(brightnessLow);
    108 }
    109
    110 };
    111
    112 // Get time in a single number
    113 int GetTime(){
    114 tmElements_t Now;
    115 RTC.read(Now);
    116 //time_t Now = RTC.Now();// Getting the current Time and storing it into a DateTime object
    117 int hour=Now.Hour;
    118 int minutes=Now.Minute;
    119 int second =Now.Second;
    120 if (second % 2==0) {
    121 Dot = false;
    122 }
    123 else {
    124 Dot = true;
    125 };
    126 return (hour*100+minutes);
    127 };
    128
    129 void DSTcheck(){
    130
    131 int buttonDST = digitalRead(2);
    132
    133 Serial.print("DST is: ");
    134 Serial.println(DST);
    135
    136 if (buttonDST == LOW){
    137
    138 if (DST){
    139
    140 DST=false;
    141
    142 Serial.print("Switching DST to: ");
    143 Serial.println(DST);
    144
    145 }
    146
    147 else if (!DST){
    148
    149 DST=true;
    150
    151 Serial.print("Switching DST to: ");
    152 Serial.println(DST);
    153
    154 };
    155
    156 delay(500);
    157
    158 };
    159
    160 }
    161
    162 // Convert time to array needet for display
    163
    164 void TimeToArray(){
    165
    166 int Now = GetTime(); // Get time
    167
    168 int cursor = 108; //116
    169
    170 Serial.print("Time is: ");
    171 Serial.println(Now);
    172
    173 if (Dot){
    174 leds[52]=ledColor;
    175 leds[53]=ledColor;
    176 leds[54]=ledColor;
    177 leds[55]=ledColor;
    178 leds[56]=ledColor;
    179 //leds[48]=ledColor;
    180 }
    181
    182 else {
    183
    184 leds[52]=0x000000;
    185 leds[53]=0x000000;
    186 leds[54]=0x000000;
    187 leds[55]=0x000000;
    188 leds[56]=0x000000;
    189 //leds[48]=0x000000;
    190
    191 };
    192
    193 for(int i=1;i<=4;i++){
    194
    195 int digit = Now % 10; // get last digit in time
    196
    197 if (i==1){
    198
    199 cursor =82; //82
    200
    201 Serial.print("Digit 4 is : ");
    202 Serial.print(digit);
    203 Serial.print(", the array is : ");
    204
    205 for(int k=0; k<=25;k++){
    206
    207 Serial.print(digits[digit][k]);
    208
    209 if (digits[digit][k]== 1){
    210 leds[cursor]=ledColor;
    211 }
    212
    213 else if (digits[digit][k]==0){
    214 leds[cursor]=0x000000;
    215 };
    216
    217 cursor ++;
    218
    219 }; // fin for
    220
    221 Serial.println();
    222 if (digit != last_digit)
    223 { fadefonction();
    224 ledColor = ColorTable[random(16)];
    225 }
    226 last_digit = digit;
    227
    228 }// fin if
    229
    230 else if (i==2){
    231
    232 cursor =56;
    233
    234 Serial.print("Digit 3 is : ");
    235 Serial.print(digit);
    236 Serial.print(", the array is : ");
    237
    238 for(int k=0; k<=25;k++){
    239
    240 Serial.print(digits[digit][k]);
    241
    242 if (digits[digit][k]== 1){
    243 leds[cursor]=ledColor;
    244 }
    245
    246 else if (digits[digit][k]==0){
    247 leds[cursor]=0x000000;
    248 };
    249
    250 cursor ++;
    251
    252 };
    253
    254 Serial.println();
    255
    256 }
    257
    258 else if (i==3){
    259
    260 cursor =26;
    261
    262 Serial.print("Digit 2 is : ");
    263 Serial.print(digit);
    264 Serial.print(", the array is : ");
    265
    266 for(int k=0; k<=25;k++){
    267
    268 Serial.print(digits[digit][k]);
    269
    270 if (digits[digit][k]== 1){
    271 leds[cursor]=ledColor;
    272 }
    273
    274 else if (digits[digit][k]==0){
    275 leds[cursor]=0x000000;
    276 };
    277
    278 cursor ++;
    279
    280 };
    281
    282 Serial.println();
    283
    284 }
    285
    286 else if (i==4){
    287
    288 cursor =0;
    289
    290 Serial.print("Digit 1 is : ");
    291 Serial.print(digit);
    292 Serial.print(", the array is : ");
    293
    294 for(int k=0; k<=25;k++){
    295 Serial.print(digits[digit][k]);
    296 if (digits[digit][k]== 1){
    297 leds[cursor]=ledColor;
    298 }
    299 else if (digits[digit][k]==0){
    300 leds[cursor]=0x000000;
    301 };
    302 cursor ++;
    303 };
    304 // Serial.println();
    305
    306 };
    307 Now /= 10;
    308 };
    309 };
    310 void TimeAdjust(){
    311 int buttonH = digitalRead(5);
    312 int buttonM = digitalRead(4);
    313 if (buttonH == LOW || buttonM == LOW){
    314 delay(500);
    315 tmElements_t Now;
    316 RTC.read(Now);
    317 int hour=Now.Hour;
    318 int minutes=Now.Minute;
    319 if (buttonH == LOW){
    320 if (Now.Hour== 24){
    321 Now.Hour=1;
    322 }
    323 else {
    324 Now.Hour += 1;
    325 };
    326 }
    327 else {
    328 if (Now.Minute== 59){
    329 Now.Minute=0;
    330 }
    331 else {
    332 Now.Minute += 1;
    333 };
    334 };
    335
    336 RTC.write(Now);
    337 }
    338 }
    339 void fadeall() {
    340 for(int m = 0; m < NUM_LEDS; m++) {
    341 leds[m].nscale8(250);
    342 }
    343 }
    344
    345 void fadefonction () {
    346 static uint8_t hue = 0;
    347 // First slide the led in one direction
    348 for(int i = 0; i < NUM_LEDS; i++) {
    349 // Set the i'th led to red
    350 leds[i] = CHSV(hue++, 255, 255);
    351 // Show the leds
    352 FastLED.show();
    353 // now that we've shown the leds, reset the i'th led to black
    354 // leds[i] = CRGB::Black;
    355 fadeall();
    356 // Wait a little bit before we loop around and do it again
    357 delay(10);
    358 }
    359
    360 // Now go in the other direction.
    361 for(int i = (NUM_LEDS)-1; i >= 0; i--) {
    362 // Set the i'th led to red
    363 leds[i] = CHSV(hue++, 255, 255);
    364 // Show the leds
    365 FastLED.show();
    366 // now that we've shown the leds, reset the i'th led to black
    367 // leds[i] = CRGB::Black;
    368 fadeall();
    369 // Wait a little bit before we loop around and do it again
    370 delay(10);
    371 }
    372 }
    373 void loop() // Main loop
    374 {
    375 /*BrightnessCheck(); // Check brightness
    376 DSTcheck(); // Check DST
    377 TimeAdjust(); // Check to se if time is geting modified*/

    378 TimeToArray(); // Get leds array with required configuration
    379 FastLED.show(); // Display leds array
    380
    381 /*float t = RTC.temperature();
    382 float celsius = t / 4.0;
    383 Serial.println();
    384 Serial.print("Temp is : ");
    385 Serial.print(celsius);
    386 Serial.println();*/

    387
    388 }
    Получается вот так (

    ).

    И вот теперь, друзья, вопросы.

    Что и где добавить в скетче, чтобы с периодичностью 5-7 минут показывалась дата. Год, число и месяц. Сначала год "2016", потом дата "26.06"?

    И еще. У меня есть температурный датчик DHT-11. Хотелось бы привязать его к часам. Чтобы они с периодичностью две-три минуты показывали температуру.

    Буду очень признателен за советы и подсказки!
     
    Tomasina нравится это.
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    примерно так:
    Код (C++):
    // перед setup
    enum {CLOCK, SECONDS, YEAR, DATE, END}; // режимы отображения. Метка END всегда последняя
    byte currentMode = CLOCK; // текущий режим (после включения питания)
    insigned int interval = 20; // интервал между сменой показаний, сек

    // внутри loop
    static unsigned long timeStamp; // переменная для хранения отметки времени
    if (millis() - timeStamp > interval * 1000)
    {
    switch (currentMode)
    {
      case CLOCK:
      displayClock();  // функция вывода времени
      break;


      case SECONDS:
      displaySeconds();
      break;


      case YEAR:
      displayYear();
      break;


      case DATE:
      displayDate();
      break;
    }
    currentMode++; // переходим в следующий режим
    if(currentMode) == END currentMode = 0; // зацикливаем режимы
    timeStamp = millis();
    }


    // после loop
    void displayClock() // функция вывода времени
    {
      TimeToArray();// Get leds array with required configuration
      FastLED.show();// Display leds array
    }

    // аналогично сделать остальные функции
     


    P.S. DHT-11 сразу в помойку и взять нормальный DHT-2x или AM230x.
     
    Последнее редактирование: 26 июл 2016
  3. GennOk

    GennOk Нерд

    да, вопрос не в этом, сменю если будет нужно. главное чтобы показывало!
     
  4. abyrvalg

    abyrvalg Нуб

    круто конечно смотрятся . А где найти описание как все сделано? На видео увидел всего три провода подходит к циферблату.
     
  5. GennOk

    GennOk Нерд

    да, всего три провода! Часы построены из светодиодной ленты WS2812b, это управляемые светодиоды! Новая и очень интересная штука! Питание 5 вольт и один сигнальный провод! Посмотреть можно здесь http://www.instructables.com/id/Big...-and-WS2811/?comments=all#CPDXFS0INZGBXU1</a> ну или я, что подскажу...
     
  6. abyrvalg

    abyrvalg Нуб

    это для меня слишком сложно ) Интересно,но сложно. Как конструктор,если бы было досканальное пошаговое описание,то сделал бы. Попробую разобраться в буржуйском описании,ссылку на которое вы дали,или взять идею корпуса,а электронику уже делать по другим вариантам. Сама идея корпуса очень крута. я даже не подумал о таком. Можно делать огромные часы,с относительно небольшими затратами.
     
  7. GennOk

    GennOk Нерд

    Посмотри вот здесь! тоже самое но на русском! http://instructables.info/bolshie-nastennyie-chasyi-na-arduino/[/QUOTE]
    На самом деле не очень сложно! Покупаешь ленту WS2812b, 30, 60 или 144 диода на метр. У меня в проекте 60. Покупаешь Ардуинку Nano с USB. Заливаешь на нее скетч. Режешь ленту на куски, спаиваишь на доске. Пенопласт для самих цифр я брал в стоительном магазине, он 2 см толшиной. Напечатал на принтере цифры, приложил к готовой рамке пенопласта и ножем прорежал очертания цифр. Вырезать пробовал ножем, пилкой от ножевки, пилкой от лобзика. В итоге вырезал круглой пилкой для ножевки. Народ режет струной вольфрамовой, специально готовя станочек. Кто-то вырезал на ЧПУ. Тут, у кого что есть... Далее, подключаешь ленту, даешь 5 вольт питание и всё! Единственно, диод максимально потребляет 60 ма, у меня в проекте получилось 108 диодов - ток 6,5 А! Желательно хотя бы на 3А ставить! Но протестировать мне хватало и питания от обычного USB с компьютера!
     
    Последнее редактирование: 31 июл 2016
  8. abyrvalg

    abyrvalg Нуб

    спасибо ) Тогда еще вопрос возник. Там dc-dc преобразователь есть. как я понял лента на 12 вольт. и этот преобразователь повышает с выхода ардуины 5в до 12в . Так? Тогда вопрос. Тянет ли ардуина ток,который потребляет весь дисплей? Там же выходит 7сегментов*4 цифры*4 диода= 112 диодов. Или они подключены к дополнительному питанию ?
     
  9. GennOk

    GennOk Нерд

    немного не так. там в проекте использована лента WS2811 - она питается от 12 вольт, а dc-dc стоит для преобразования из 12 в 5 вольт, для питания самой Ардуинки. В моем проекте лента WS2812b она 5 V-ая! и преобразователь не нужен вообще!
     
    Последнее редактирование: 1 авг 2016
  10. abyrvalg

    abyrvalg Нуб

    Спасибо. Та лента на 12в подешевле будет. Да и блок питания думаю 12в будет дешевле,чем 5в с таким же амперажем
     
  11. GennOk

    GennOk Нерд

    у ws2811 есть один недостаток, она режется только по три диода! У меня в проекте она не подошла бы! У меня в цифре 2 сегмента из 3-х и 5 из 4-х диодов! Можно вообще купить отдельных светодиодов и смастерить сразу платку ввиде цифры... Кстати я себе прикупил пору сотен. Вот думаю еще в один проектик воплотить!
     
    Последнее редактирование: 1 авг 2016
  12. abyrvalg

    abyrvalg Нуб

    вот оно что ) А я и не обратил внимания. То я и думаю зачем там разделитель изолентой посередине клеил,а не отдельные кусочки брал. Спасибо. Заказал ленту,буду ждать )
     
  13. GennOk

    GennOk Нерд

    Чего-то у меня не получается со вставкой ... пишет expected unqualified-id before 'if'
     
  14. abyrvalg

    abyrvalg Нуб

    все собрал,но что-то не работает. светодиоды все сразу мерцают. Может кто подскажет,что может быть не так?
     
  15. GennOk

    GennOk Нерд

    хотелось бы поподробнее о "все собрал"!
     
  16. abyrvalg

    abyrvalg Нуб

    Cобрал по инструкции,ссылку на которую вы давали выше. Подключил все,кроме кнопок. На ардуино уно. лента ws2811. ну и питание для ардуины не понижал с 12в,а делал отдельное.
     
  17. GennOk

    GennOk Нерд

    а скетч какой?
     
  18. abyrvalg

    abyrvalg Нуб

    #include <DS1307RTC.h>

    #include <DS3231.h>


    #include <Time.h>
    #include <Wire.h>
    #include "FastLED.h"
    #define NUM_LEDS 29 // Number of LED controles (remember I have 3 leds / controler
    #define COLOR_ORDER BRG // Define color order for your strip
    #define DATA_PIN 6 // Data pin for led comunication

    CRGB leds[NUM_LEDS]; // Define LEDs strip
    byte digits[10][7] = {{0,1,1,1,1,1,1}, // Digit 0
    {0,1,0,0,0,0,1}, // Digit 1
    {1,1,1,0,1,1,0}, // Digit 2
    {1,1,1,0,0,1,1}, // Digit 3
    {1,1,0,1,0,0,1}, // Digit 4
    {1,0,1,1,0,1,1}, // Digit 5
    {1,0,1,1,1,1,1}, // Digit 6
    {0,1,1,0,0,0,1}, // Digit 7
    {1,1,1,1,1,1,1}, // Digit 8
    {1,1,1,1,0,1,1}}; // Digit 9 | 2D Array for numbers on 7 segment
    bool Dot = true; //Dot state
    bool DST = false; //DST state
    int ledColor = 0x0000FF; // Color used (in hex)
    void setup(){
    // Serial.begin(9600);
    // Wire.begin();
    LEDS.addLeds<WS2811, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
    LEDS.setBrightness(255); // Set initial brightness
    pinMode(2, INPUT_PULLUP); // Define DST adjust button pin
    pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin
    pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin
    }
    // Get time in a single number, if hours will be a single digit then time will be displayed 155 instead of 0155
    int GetTime(){
    tmElements_t Now;
    RTC.read(Now);
    //time_t Now = RTC.Now();// Getting the current Time and storing it into a DateTime object
    int hour=Now.Hour;
    int minutes=Now.Minute;
    int second =Now.Second;
    if (second % 2==0) {Dot = false;}
    else {Dot = true;};
    return (hour*100+minutes);
    };

    // Check Light sensor and set brightness accordingly
    void BrightnessCheck(){
    const byte sensorPin = 3; // light sensor pin
    const byte brightnessLow = 5; // Low brightness value
    const byte brightnessHigh = 255; // High brightness value
    int sensorValue = digitalRead(sensorPin); // Read sensor
    if (sensorValue == 0) {LEDS.setBrightness(brightnessHigh);}
    else {LEDS.setBrightness(brightnessLow);}
    };
    // Convert time to array needet for display
    void TimeToArray(){
    int Now = GetTime(); // Get time
    int cursor = 29;
    // Serial.print("Time is: ");Serial.println(Now);
    if (DST){ // if DST is true then add one hour
    Now+=100;
    // Serial.print("DST is ON, time set to : ");Serial.println(Now);
    };
    if (Dot){leds[14]=ledColor;}
    else {leds[14]=0x000000;
    };
    for(int i=1;i<=4;i++){
    int digit = Now % 10; // get last digit in time
    if (i==1){
    // Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
    cursor =22;
    for(int k=0; k<=6;k++){
    // Serial.print(digits[digit][k]);
    if (digits[digit][k]== 1){leds[cursor]=ledColor;}
    else if (digits[digit][k]==0){leds[cursor]=0x000000;};
    cursor ++;
    };
    // Serial.println();
    }
    else if (i==2){
    // Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
    cursor -=14;
    for(int k=0; k<=6;k++){
    // Serial.print(digits[digit][k]);
    if (digits[digit][k]== 1){leds[cursor]=ledColor;}
    else if (digits[digit][k]==0){leds[cursor]=0x000000;};
    cursor ++;
    };
    // Serial.println();
    }
    else if (i==3){
    // Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
    cursor =7;
    for(int k=0; k<=6;k++){
    // Serial.print(digits[digit][k]);
    if (digits[digit][k]== 1){leds[cursor]=ledColor;}
    else if (digits[digit][k]==0){leds[cursor]=0x000000;};
    cursor ++;
    };
    // Serial.println();
    }
    else if (i==4){
    // Serial.print("Digit1 is : ");Serial.print(digit);Serial.print(" ");
    cursor =0;
    for(int k=0; k<=6;k++){
    // Serial.print(digits[digit][k]);
    if (digits[digit][k]== 1){leds[cursor]=ledColor;}
    else if (digits[digit][k]==0){leds[cursor]=0x000000;};
    cursor ++;
    };
    // Serial.println();
    }
    Now /= 10;
    };
    };
    void DSTcheck(){
    int buttonDST = digitalRead(2);
    // Serial.print("DST is: ");Serial.println(DST);
    if (buttonDST == LOW){
    if (DST){
    DST=false;
    // Serial.print("Switching DST to: ");Serial.println(DST);
    }
    else if (!DST){
    DST=true;
    // Serial.print("Switching DST to: ");Serial.println(DST);
    };
    delay(500);
    };
    }

    void TimeAdjust(){
    int buttonH = digitalRead(5);
    int buttonM = digitalRead(4);
    if (buttonH == LOW || buttonM == LOW){
    delay(500);
    tmElements_t Now;
    RTC.read(Now);
    int hour=Now.Hour;
    int minutes=Now.Minute;
    int second =Now.Second;
    if (buttonH == LOW){
    if (Now.Hour== 23){Now.Hour=0;}
    else {Now.Hour += 1;};
    }else {
    if (Now.Minute== 59){Now.Minute=0;}
    else {Now.Minute += 1;};
    };
    RTC.write(Now);
    }
    }
    void loop() // Main loop
    {
    BrightnessCheck(); // Check brightness
    DSTcheck(); // Check DST
    TimeAdjust(); // Check to se if time is geting modified
    TimeToArray(); // Get leds array with required configuration
    FastLED.show(); // Display leds array
    }

    оттуда же и скетч взял. Только библиотека другая на датчик времени.
     
  19. GennOk

    GennOk Нерд

    скетч залился нормально, ни на что не плевался? а просто диоды проверял образцами скетчей?
     
  20. fogary

    fogary Гик

    Почему у Вас в коде указаны две библиотеки часов?
    Код (C++):
    #include <DS1307RTC.h>
    #include <DS3231.h>
    Оставте только ту, которую реально используете.