часы с температурой на DS3231 и 2х. дисплеях TM1637 на одном дисплее часы на другом температура

Тема в разделе "Arduino & Shields", создана пользователем Slaiterx, 8 апр 2016.

Метки:
  1. Slaiterx

    Slaiterx Гик

    Код (C++):
    // byte temp = get3231Temp();
      //int8_t TimeDisp[4];
      // вывод температуры .. каждые 10 сек на 2 сек
    // if (second >= 0 && second <= 1 ||
          //second >= 10 && second <= 11 ||
          //second >= 20 && second <= 21 ||
          //second >= 30 && second <= 31 ||
          //second >= 40 && second <= 41 ||
          //second >= 50 && second <= 51)
    // {
        //tm1637.point(POINT_OFF); // выключаем точки
        //TimeDisp[0] = 19; //
       // TimeDisp[1] = temp / 10; // заполняем массив
        //TimeDisp[2] = temp % 10;
       // TimeDisp[3] = 12; // C

    // }
       //дата  else if(second >= 25 && second <= 26 ||          second >= 45 && second <= 46)  {    tm1637.point(POINT_OFF);      TimeDisp[0] = dayOfMonth / 10;    TimeDisp[1] = dayOfMonth % 10;    TimeDisp[2] = month / 10;    TimeDisp[3] = month % 10;    }
      /// часы
    // else
      //{
       

    если раскоментировать эту часть будет показывать температуру с часов у ds3231 есть встроенный датчик температуры
     
  2. ivanovich2004

    ivanovich2004 Нуб

    Да мигают, спасибо. А DS18B20 Вы совсем убрали?
     
  3. ivanovich2004

    ivanovich2004 Нуб

    Код (C++):
    #include <OneWire.h>
    #include <Wire.h>
    #include "TM1637.h"
    #define ONE_WIRE_PIN 10 // пин для подключения DS18B20
    OneWire oneWire(ONE_WIRE_PIN);
    #define DS1307_I2C_ADDRESS 0x68
    //подключение дисплея
    #define CLK_TM1637 2
    #define DIO_TM1637 3
    TM1637 tm1637(CLK_TM1637,DIO_TM1637);

    //подключение часов
    #define CLK А5
    #define DIO А4

    float temp; // переменная для хранения температуры
    void setup()
    {
      Wire.begin();
      tm1637.init();
      tm1637.set(0); // яркость, от 0 до 7
    }
    void loop()
    {
      tm1637.set(map(analogRead(A0), 0, 1023, 1, 7)); // непонятно зачем это. Возможно, регулировка яркости дисплея
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      int8_t TimeDisp[4];

      // вывод температуры .. каждые 10 сек на 2 сек
      if (second >= 0 && second <= 1 ||
        second >= 10 && second <= 11 ||
        //second >= 20 && second <= 21 ||
      second >= 30 && second <= 31 ||
        //second >= 40 && second <= 41 ||
      second >= 50 && second <= 51)
      {
        tm1637.point(POINT_OFF); // выключаем точки
        readDS18B20();           // считываем температуру
        TimeDisp[0] = 19; //
        TimeDisp[1] = (byte)temp / 10; // заполняем массив
        TimeDisp[2] = (byte)temp % 10;
        TimeDisp[3] = 12; // C

      }
      //дата  else if(second >= 25 && second <= 26 ||          second >= 45 && second <= 46)  {    tm1637.point(POINT_OFF);      TimeDisp[0] = dayOfMonth / 10;    TimeDisp[1] = dayOfMonth % 10;    TimeDisp[2] = month / 10;    TimeDisp[3] = month % 10;    }
      /// часы
      else
      {
        tm1637.point(POINT_ON); // включаем точки
        TimeDisp[0] = hour / 10;
        TimeDisp[1] = hour % 10;
        TimeDisp[2] = minute / 10;
        TimeDisp[3] = minute % 10;
        int8_t TimeDisp[4];
        if (second % 1 == 0)
        tm1637.point(POINT_ON);
        if (second % 2 == 0)
        tm1637.point(POINT_OFF);  
    }
      tm1637.display(TimeDisp); // отправляем массив на экран
    }

    ///// часы ..
    byte decToBcd(byte val)
    {
      return ( (val/10*16) + (val%10) );
    }

    byte bcdToDec(byte val)
    {
      return ( (val/16*10) + (val%16) );
    }

    void setDateDs1307(byte second, // 0-59
    byte minute, // 0-59
    byte hour, // 1-23
    byte dayOfWeek, // 1-7
    byte dayOfMonth, // 1-28/29/30/31
    byte month, // 1-12
    byte year) // 0-99
    {
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.write(0);
      Wire.write(decToBcd(second));
      Wire.write(decToBcd(minute));
      Wire.write(decToBcd(hour));
      Wire.write(decToBcd(dayOfWeek));
      Wire.write(decToBcd(dayOfMonth));
      Wire.write(decToBcd(month));
      Wire.write(decToBcd(year));
      Wire.endTransmission();
    }

    void getDateDs1307(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.write(0);
      Wire.endTransmission();

      Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }


    // читаем датчик DS18B20. Для DS18S20 не подходит!
    // обращаемся к функции не чаще 1 раза в секунду.
    void readDS18B20()
    {
      static boolean n = false;     // флаг работы: запрос температуры или её чтение
      n = !n;
      if (n)
      {
        oneWire.reset();                 // сброс шины
        oneWire.write(0xCC);             //обращение ко всем датчикам (если всего один DS18B20)
        //oneWire.select(sensorAddress); // выбор конкретного адреса - если несколько DS18B20
        oneWire.write(0x44);             // начать преобразование (без паразитного питания)
      }
      else
      {
        oneWire.reset();                 // сброс шины
        oneWire.write(0xCC);             //обращение ко всем датчикам (если всего один DS18B20)
        //oneWire.select(sensorAddress); // выбор конкретного адреса - если несколько DS18B20
        oneWire.write(0xBE);             // Read Scratchpad (чтение регистров)
        temp = (oneWire.read() | oneWire.read() << 8) / 16.0; //прочитаны 2 байта
      }
    }
    Вопрос решен. Собрал из двух скетчей и мигание точек и показ температуры. Осталось разобраться с десятыми долями градусов.
     
    Последнее редактирование: 8 апр 2017
  4. ivanovich2004

    ivanovich2004 Нуб

    С десятыми долями градуса разобрался тоже
    Код (C++):
    #include <OneWire.h>
    #include <Wire.h>
    #include "TM1637.h"
    #define ONE_WIRE_PIN 9 // пин для подключения DS18B20
    OneWire oneWire(ONE_WIRE_PIN);
    #define DS1307_I2C_ADDRESS 0x68
    //подключение дисплея
    #define CLK_TM1637 2
    #define DIO_TM1637 3
    TM1637 tm1637(CLK_TM1637,DIO_TM1637);

    //подключение часов
    #define CLK А5
    #define DIO А4

    float temp; // переменная для хранения температуры
    void setup()
    {
      Wire.begin();
      tm1637.init();
      tm1637.set(4); // яркость, от 0 до 7
    }
    void loop()
    {
    //  tm1637.set(map(analogRead(A0), 0, 1023, 1, 7)); // регулировка яркости дисплея при подключении в А0 фоторезистора
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      int8_t TimeDisp[4];

      // вывод температуры .. каждые 10 сек на 2 сек
      if (second >= 0 && second <= 1 ||
        second >= 10 && second <= 11 ||
        //second >= 20 && second <= 21 ||
      second >= 30 && second <= 31 ||
        //second >= 40 && second <= 41 ||
      second >= 50 && second <= 51)
      {
        tm1637.point(POINT_OFF); // выключаем точки
        readDS18B20();           // считываем температуру

        unsigned int RAWtemp = temp * 100 ;
        int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
        TimeDisp[0] = 19;                          // раскидываем 4-значное число на цифры
        TimeDisp[1] = (byte)(RAWtemp / 1000) % 10;
        TimeDisp[2] = (byte)(RAWtemp / 100) % 10;
        TimeDisp[3] = (byte)(RAWtemp / 10) % 10;
        tm1637.display(TimeDisp);    // команда вывода буфера на дисплей (из библиотеки)
    }
      //дата  else if(second >= 25 && second <= 26 ||          second >= 45 && second <= 46)  {    tm1637.point(POINT_OFF);      TimeDisp[0] = dayOfMonth / 10;    TimeDisp[1] = dayOfMonth % 10;    TimeDisp[2] = month / 10;    TimeDisp[3] = month % 10;    }
      /// часы
      else
    {
        tm1637.point(POINT_ON); // включаем точки
        TimeDisp[0] = hour / 10;
        TimeDisp[1] = hour % 10;
        TimeDisp[2] = minute / 10;
        TimeDisp[3] = minute % 10;
        int8_t TimeDisp[4];
        if (second % 1 == 0)
        tm1637.point(POINT_ON);
        if (second % 2 == 0)
        tm1637.point(POINT_OFF);
    }
      tm1637.display(TimeDisp); // отправляем массив на экран
    }

    ///// часы ..
    byte decToBcd(byte val)
    {
      return ( (val/10*16) + (val%10) );
    }

    byte bcdToDec(byte val)
    {
      return ( (val/16*10) + (val%16) );
    }

    void setDateDs1307(byte second, // 0-59
    byte minute, // 0-59
    byte hour, // 1-23
    byte dayOfWeek, // 1-7
    byte dayOfMonth, // 1-28/29/30/31
    byte month, // 1-12
    byte year) // 0-99
    {
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.write(0);
      Wire.write(decToBcd(second));
      Wire.write(decToBcd(minute));
      Wire.write(decToBcd(hour));
      Wire.write(decToBcd(dayOfWeek));
      Wire.write(decToBcd(dayOfMonth));
      Wire.write(decToBcd(month));
      Wire.write(decToBcd(year));
      Wire.endTransmission();
    }

    void getDateDs1307(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {
      Wire.beginTransmission(DS1307_I2C_ADDRESS);
      Wire.write(0);
      Wire.endTransmission();

      Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }


    // читаем датчик DS18B20. Для DS18S20 не подходит!
    // обращаемся к функции не чаще 1 раза в секунду.
    void readDS18B20()
    {
      static boolean n = false;     // флаг работы: запрос температуры или её чтение
      n = !n;
      if (n)
      {
        oneWire.reset();                 // сброс шины
        oneWire.write(0xCC);             //обращение ко всем датчикам (если всего один DS18B20)
        //oneWire.select(sensorAddress); // выбор конкретного адреса - если несколько DS18B20
        oneWire.write(0x44);             // начать преобразование (без паразитного питания)
      }
      else
      {
        oneWire.reset();                 // сброс шины
        oneWire.write(0xCC);             //обращение ко всем датчикам (если всего один DS18B20)
        //oneWire.select(sensorAddress); // выбор конкретного адреса - если несколько DS18B20
        oneWire.write(0xBE);             // Read Scratchpad (чтение регистров)
        temp = (oneWire.read() | oneWire.read() << 8) / 16.0; //прочитаны 2 байта
      }
    }
     
  5. Slaiterx

    Slaiterx Гик

    а чем разделяются десятые градуса
     
  6. ivanovich2004

    ivanovich2004 Нуб

    Десятичные точки на дисплее не подключены (пустые места для точек) поэтому пока не заморачивался, а так думаю перед строкой вывода температуры на дисплей отдельной строкой кода включать точку в третьем разряде, она ведь не плавающая, постоянно будет на своем месте.
     
  7. hatul

    hatul Нерд

    Подскажите как подключать дисплеи. Ну один,как я понял из скетча CLK -2 pin
    DIO- 3 pin. А второй как подключить?
    И второй вопрос:
    температура будет показыват на втором дисплее?
     
  8. Slaiterx

    Slaiterx Гик

    Соответствено
     
    hatul нравится это.
  9. Slaiterx

    Slaiterx Гик

    вот код для двух дисплеев

    Код (C++):
    #include <Wire.h>
    #include "TM1637.h"

    #define DS1307_I2C_ADDRESS 0x68

    //#define CLK 3
    //#define DIO 2

    //TM1637 tm1637(CLK,DIO);
    TM1637 tm1637(3,2);
    TM1637 tm16371(5,4);
    ///// часы ..
    byte decToBcd(byte val){
    return ( (val/10*16) + (val%10) );
    }

    byte bcdToDec(byte val){
    return ( (val/16*10) + (val%16) );
    }

    void setDateDs1307(byte second, // 0-59
    byte minute, // 0-59
    byte hour, // 1-23
    byte dayOfWeek, // 1-7
    byte dayOfMonth, // 1-28/29/30/31
    byte month, // 1-12
    byte year) // 0-99
    {
    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.write(decToBcd(second));
    Wire.write(decToBcd(minute));
    Wire.write(decToBcd(hour));
    Wire.write(decToBcd(dayOfWeek));
    Wire.write(decToBcd(dayOfMonth));
    Wire.write(decToBcd(month));
    Wire.write(decToBcd(year));
    Wire.endTransmission();
    }

    void getDateDs1307(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {

    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.endTransmission();

    Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

    *second = bcdToDec(Wire.read() & 0x7f);
    *minute = bcdToDec(Wire.read());
    *hour = bcdToDec(Wire.read() & 0x3f);
    *dayOfWeek = bcdToDec(Wire.read());
    *dayOfMonth = bcdToDec(Wire.read());
    *month = bcdToDec(Wire.read());
    *year = bcdToDec(Wire.read());
    }

      float get3231Temp(){
      byte tMSB, tLSB;
      float temp3231;

    Wire.beginTransmission(0x68);
    Wire.write(0x11);
    Wire.endTransmission();
    Wire.requestFrom(0x68, 2);

      if(Wire.available()) {
        tMSB = Wire.read(); //2's complement int portion
        tLSB = Wire.read(); //fraction portion

        temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
        temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
      }
      else {
        //oh noes, no data!
      }

      return temp3231;
    }
    /////////////////

    void setup() {
    Wire.begin();
    tm1637.init();
    tm1637.set(3); // яркость, от 0 до 7
    tm16371.init();
    tm16371.set(1);
       /* //установка часов
      byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      second = 45;
      minute = 38;
      hour = 22;
      dayOfWeek = 2; // день недели
      dayOfMonth = 17; // день
      month = 1;
      year = 17;

      setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);

    */

    }

    void loop(){
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      byte temp = get3231Temp();
      int8_t TimeDisp[4];
      // вывод температуры .. каждые 10 сек на 2 сек
      /*if (second >= 0 && second <= 2 ||
          second >= 10 && second <= 12 ||
          second >= 20 && second <= 22 ||
          second >= 30 && second <= 32 ||
          second >= 40 && second <= 42 ||
          second >= 50 && second <= 52)
      {*/

        tm16371.point(POINT_OFF); // выключаем точки
        TimeDisp[0] = 19; //
        TimeDisp[1] = temp / 10; // заполняем массив
        TimeDisp[2] = temp % 10;
        TimeDisp[3] = 12; // C

    tm16371.display(TimeDisp);


        tm1637.point(POINT_ON); // включаем точки
        TimeDisp[0] = hour / 10;
        TimeDisp[1] = hour % 10;
        TimeDisp[2] = minute / 10;
        TimeDisp[3] = minute % 10;  

    tm1637.display(TimeDisp); // отправляем массив на экран
    }
     
    hatul нравится это.
  10. hatul

    hatul Нерд

    Большое спасибо! Теперь вроде понятно. Вечером ,после работы, буду пробовать.
     
  11. hatul

    hatul Нерд

    Класс! Простенько и со вкусом! Все работает отлично! Немного подправил скетч(чисто для себя),типа дбавил значек "градус" .

    1234.jpg
    Буду на этой основе мастерить большие часы.
    Есть желание по кругу пустить 60 светодиодов,через сдвиговые регистры 74HC595 . А как их прикрутить сюда-ума не хватает. Не поможете старику!? А то пытался разбираться с кодами,да похоже поздно в 60 лет учиться программированию!
     
  12. Slaiterx

    Slaiterx Гик

    Учится ни когда не поздно а светодиоды по кругу это лишнее я пробывал постоянное мигание не гуд если хотите часы поинтересней и поточней с погодой то я себе сделал вот такие

     
    Последнее редактирование: 23 май 2017
  13. hatul

    hatul Нерд

    Да все это так,только не получается нихрена.
    Ну это на любителя.В спальне- да,я согласен,спать под цветомузыку,как то не очень!
    А в зале,например,или в рабочей комнате,пусть себе моргают!
    Хочу конечно. Только,как я понял, они на esp8266.У меня пока её нет. Выписал с Китая,думаю через месячишко придет. Скетч,если можно , можешь отправить на почту lesha131@gmail.com .
    Ну значит умеешь такое делать. У меня есть часы на Ардуино ,на матрице. Вроде неплохие,меня устраивают. Вот к ним ты мог бы помочь прикрутить светодиоды.
     
  14. Slaiterx

    Slaiterx Гик

    У меня летом времени нет особо за компом сидеть если только ближе к зиме
     
  15. hatul

    hatul Нерд

    Хорошо! Подождем зиму! Всё равно ещё не все комплектующие приехали. Если у тебя остался скетч со светодиодами,не мог бы мне отправить. И , если можешь, на часы,про которые ты писал выше.
     
  16. Kalyai

    Kalyai Нерд

    добрый день
    помогите немного со скетчем
    сделал два дисплея на первый вывожу часы
    а на второй температуру, хочется еще и влажность чтобы показывало раз в 3 минуты и температуру выводило вот так [​IMG]

    - проблема в следующем иногда при бывают не корректные отображения часов и температуры на дисплее, буквально с задержкой в доли секунд.
    - подскажите как заставить у часов чтобы мигали точки?
    - также мне еще кажется что алгоритм часов как-то конфликтует с температурным алгоритмом, где что не правильно?

    Ниже привожу код который у меня сейчас:

    Код (C++):
    #include <Wire.h>
    #include "TM1637.h"
    #include <iarduino_DHT.h> // подключаем библиотеку для работы с датчиком DHT

    #define DS1307_I2C_ADDRESS 0x68
    //#define CLK 3
    //#define DIO 2

    //TM1637 tm1637(CLK,DIO);
    TM1637 tm1637(3,2);
    TM1637 tm16371(5,4);
    ///// часы ..
    byte decToBcd(byte val){
    return ( (val/10*16) + (val%10) );
    }

    byte bcdToDec(byte val){
    return ( (val/16*10) + (val%16) );
    }

    void setDateDs1307(byte second, // 0-59
    byte minute, // 0-59
    byte hour, // 1-23
    byte dayOfWeek, // 1-7
    byte dayOfMonth, // 1-28/29/30/31
    byte month, // 1-12
    byte year) // 0-99
    {
    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.write(decToBcd(second));
    Wire.write(decToBcd(minute));
    Wire.write(decToBcd(hour));
    Wire.write(decToBcd(dayOfWeek));
    Wire.write(decToBcd(dayOfMonth));
    Wire.write(decToBcd(month));
    Wire.write(decToBcd(year));
    Wire.endTransmission();
    }

    void getDateDs1307(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {

    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.endTransmission();

    Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

    *second = bcdToDec(Wire.read() & 0x7f);
    *minute = bcdToDec(Wire.read());
    *hour = bcdToDec(Wire.read() & 0x3f);
    *dayOfWeek = bcdToDec(Wire.read());
    *dayOfMonth = bcdToDec(Wire.read());
    *month = bcdToDec(Wire.read());
    *year = bcdToDec(Wire.read());
    }

      float get3231Temp(){
      byte tMSB, tLSB;
      float temp3231;

    Wire.beginTransmission(0x68);
    Wire.write(0x11);
    Wire.endTransmission();
    Wire.requestFrom(0x68, 2);

      if(Wire.available()) {
        tMSB = Wire.read(); //2's complement int portion
        tLSB = Wire.read(); //fraction portion

        temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
        temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
      }
      else {
        //oh noes, no data!
      }

      return temp3231;
    }

    iarduino_DHT sensor(12);     // объявляем  переменную для работы с датчиком DHT, указывая номер цифрового вывода к которому подключён датчик (сейчас 2pin)


    void setup()
    {
    Wire.begin();
    tm1637.init();
    tm1637.set(7); // яркость, от 0 до 7
    tm16371.init();
    tm16371.set(7);
       //установка часов
      /*byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      second = 00;
      minute = 59;
      hour = 16;
      dayOfWeek = 2; // день недели
      dayOfMonth = 6; // день
      month = 03;
      year = 18;

      setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);*/



    }

    void loop()
    {
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
      getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      byte temp = get3231Temp();
      int8_t TimeDisp[4];
      // вывод температуры .. каждые 10 сек на 2 сек
      /*if (second >= 0 && second <= 2 ||
          second >= 10 && second <= 12 ||
          second >= 20 && second <= 22 ||
          second >= 30 && second <= 32 ||
          second >= 40 && second <= 42 ||
          second >= 50 && second <= 52)
      {*/

        tm16371.point(POINT_OFF); // выключаем точки
        TimeDisp[0] = 19; //
        TimeDisp[1] = temp / 10; // заполняем массив
        TimeDisp[2] = temp % 10;
        TimeDisp[3] = 12; // C

    tm16371.display(TimeDisp);


        tm1637.point(POINT_ON); // включаем точки
        TimeDisp[0] = hour / 10;
        TimeDisp[1] = hour % 10;
        TimeDisp[2] = minute / 10;
        TimeDisp[3] = minute % 10;

    tm1637.display(TimeDisp); // отправляем массив на экран


    int8_t NumTab[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//0~9,A,b,C,d,E,F
    switch(sensor.read()){    // читаем показания датчика
      }

    /*
      tm16371.display(sensor.hum/10);
      tm16371.display(2,16);
      tm16371.display(3,13);
      delay(3000);
      */

      tm16371.display(sensor.tem/10 );
      tm16371.display(2,16);
      tm16371.display(3,12);
      delay(100000);

    }

     
     
    babajaga нравится это.
  17. babajaga

    babajaga Нуб

    Мне кажется, что скетч уже максимально отработан и удовлетворяет все потребности часов.
    Лично сам пробовал грузить все предложенные скетчи, все рабочие!!!
    Хотелось бы увидеть, как говорят, всё в одном т.е.объединить все разработки в один скетч.
    - Часы, температуру, мигающие точки и регулятор яркости на фоторезисторе на базе Arduino NANO,
    TM1637, BS18B20 и фоторезисторе. Обязательно приложить графическую схему всех соединений.
    Это будет полезно для всех новичков - читающих этот материал.
    Осталось за малым, кто бы это сделал? Я беру самоотвод, т.к. нет большого опыта в программировании.
    Думаю многие со мной согласятся.