Большие настенные часы на Arduino

Green
Онлайн
Зарегистрирован: 01.10.2015

Ну да. Я такой крутой, и у меня столько "видосов", и я так красиво пишу...
И неважно что на самом деле понос, важно то что я самый-самый, а все остальные... ППЦ!

b612
Offline
Зарегистрирован: 12.03.2017

Green пишет:
Попробуй с таким подискутировать! Маничка величия налицо.(
И не надо дискутировать.
Просто похвастайтесь своими часиками, ну или что у вас есть.

b707
Offline
Зарегистрирован: 26.05.2017

народ. не засоряйте тему :)

Вопрос конкуренции двух проектов предлагаю решить просто и банально - полностью удалить из темы все упоминания о b612 и его проекте :) Эта ветка посвещена тем часам, которые тут обсуждались - простым. скучным. без календарей и боя курантов. зато с коротким и ясным кодом, оставляющим простор для творчества новичков.

А господин b612 пусть заведет отдельную тему и там пиарит свои поделки сколько хочет. Я обещаю туда не заходить и его проект не критиковать.

b612
Offline
Зарегистрирован: 12.03.2017

b707 пишет:
А господин b612 пусть заведет отдельную тему и там пиарит свои поделки сколько хочет. Я обещаю туда не заходить и его проект не критиковать.
Протестую
707-ой самый ценный для меня персонаж.
где я ещё возьму такую вдумчивую качественную отзывчивую обсиралку ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b612 пишет:

где я ещё возьму такую вдумчивую качественную отзывчивую обсиралку ?

я заменю

Retu
Offline
Зарегистрирован: 05.09.2020

Здравствуйте, столкнулся с глупой ошибкой--взял не те кнопки. Кто нибудь знает как подключить 4 контактную кнопку?

b707
Offline
Зарегистрирован: 26.05.2017

Retu пишет:
Здравствуйте, столкнулся с глупой ошибкой--взял не те кнопки. Кто нибудь знает как подключить 4 контактную кнопку?

такую ?

 

Retu
Offline
Зарегистрирован: 05.09.2020

Да

b707
Offline
Зарегистрирован: 26.05.2017

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

v258
Offline
Зарегистрирован: 25.05.2020

на самом деле у этой кнопки всего один нормально разомкнутый контакт, просто со сдвоенными выводами

Retu
Offline
Зарегистрирован: 05.09.2020

Спасибо за ответ. Пробовал без кнопки замкнуть проводом землю и контакт d2(изменения времени), но не помогло на прошивке 3 светодиода на сегмент. Однако, когда загрузил 1 светодиод на сегмент всё работало, но неправильно отображалось в итоге методом исправлений и загрузками то одной то другой установил время. Кстати, а возможно ли убрать анимацию перехода на следующую минуту или изменить её на однотонный цвет?

b707
Offline
Зарегистрирован: 26.05.2017

Retu пишет:
Кстати, а возможно ли убрать анимацию перехода на следующую минуту или изменить её на однотонный цвет?

Вы код-то какой пользуете? В этой ветке наверно два десятка вариантов.

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

Retu
Offline
Зарегистрирован: 05.09.2020

Ну раз всё настолько явно. То так и сделаю. Спасибо.

razwal
Offline
Зарегистрирован: 30.09.2020

Здравствуйте , хочу спросить - можно изменить прошивку от Odinochka из 172 поста(ну или прошивку от dgeka из 420 поста) , так чтобы температура выводилась несколько раз в минуту (например 5 секунд часы и 3 секунды температура) , ну типа добавить настройку отображения времени , как настройка в прошивке времени отображения температуры , давления и влажности. Сам я в программировании почти полный ноль , делал проекты только с помощью программы Flprog , но там все просто . А то вроде часы с термометром , а ждать вывода показаний температуры получается долго . На самом деле подобные часы у меня собраны и прекрасно работают еще с 2016 году , но они без термометра (схема и прошивка взята отсюда - https://masterclub.online/topic/15686-nastennye-elektronnye-chasy ) .

b707
Offline
Зарегистрирован: 26.05.2017

Можно. Ищите кто добавит. Я сейчас на яхте посреди моря

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:
Я сейчас на яхте посреди моря

Везет тебе. А я счас в холодной осени, посреди Сибири. :-)

b707
Offline
Зарегистрирован: 26.05.2017

Чтоб сильно не выделятся, спешу оговорится, что яхта не моя:) пригласили добрые люди

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот и меня в эту холодную осень пригласили "добрые люди". И котеньку отняли сс.ки. :-)

razwal
Offline
Зарегистрирован: 30.09.2020

b707 пишет:
Можно. Ищите кто добавит. Я сейчас на яхте посреди моря

Да , море это хорошо , ну в общем если у Вас после отдыха будет желание и возможность покопаться в прошивке , то буду очень рад.

А , может кто-нибудь с форума тоже заинтересуется этой идеей. Просто ,я уже писал что часы собирал ещё в 2016 году на ленте ws2811 , работают , вот добавил в них датчик bme280 и еще одну кнопку, прошил , все также заработало , но вот переводишь на них взгляд - большую часть времени они показывают часы и как то ждать почти минуту показаний температуры не очень интересно , а установить в прошивке время показа температуры , например , на 30 секунд , тоже будет как то не так , это же все-таки в большей степени часы ...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

razwal пишет:

почти минуту показаний температуры не очень интересно , а установить в прошивке время показа температуры , например , на 30 секунд , тоже будет как то не так , это же все-таки в большей степени часы ...

Ну можно приделать микрофон и по хлопку прерывать обычный цикл показа и выводить температуру секунд на 10

Komandir
Offline
Зарегистрирован: 18.08.2018

razwal

должно работать по схеме 6-2-2

//#include <SFE_BMP180.h>
#include <Adafruit_BMP085.h>
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>

#define LEDS_IN_SEGMENT 3 //   Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 3    // ( 0 - NEVER, 1 - once a minute, 2 - every 10 min, 3 - hourly, 4 - every 10 hrs)
#define NUM_COLORS 16
#define COLOR_ORDER BGR   // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150
//#define BRI_PIN 3  // Вывод сенсора
#define BRI_PIN A3            // PIN фоторезистора
#define auto_bright 1         // автоматическая подстройка яркости от уровня внешнего освещения (1 - включить, 0 - выключить)
#define max_bright 230        // максимальная яркость (0 - 255)
#define min_bright 1         // минимальная яркость (0 - 255)
#define bright_constant 1000   // константа усиления от внешнего света (0 - 1023), чем МЕНЬШЕ константа, тем "резче" будет прибавляться яркость
#define coef 0.8              // коэффициент фильтра (0.0 - 1.0), чем больше - тем медленнее меняется яркость
int new_bright, new_bright_f;
unsigned long bright_timer, off_timer;

Adafruit_BMP085 bmp;
//SFE_BMP180 bmp;

//BMP180 PINS 
//SCL -> SCL or A5
//SDA -> SDA or A4

//DS3231 PINS 
//SCL -> SCL or A5
//SDA -> SDA or A4

// Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2)  //86 количество светодиодов в ленте
#define DOT1  (LEDS_IN_SEGMENT * 14)   // координаты мигающих точек
#define DOT2  (LEDS_IN_SEGMENT * 14  + 1)   // координаты мигающих точек

CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
uint8_t  digits[] = {
  0b00111111,     // Digit 0
  0b00100001,     // Digit 1
  0b01110110,     // Digit 2
  0b01110011,     // Digit 3
  0b01101001,     // Digit 4
  0b01011011,     // Digit 5
  0b01011111,     // Digit 6
  0b00110001,     // Digit 7
  0b01111111,     // Digit 8
  0b01111011,     // Digit 9
  0b01111000,     // Digit * градус  10
  0b00011110,     // Digit C         11
  0b01111100,     // Digit P         12
  0b01111000,     // Digit % знак % из двух частей 13
  0b01000111,     // Digit % знак % из двух частей 14
};

bool Dot = true;
bool DST = false; // DCT false
bool TempShow = true;
bool PressureShow = true;
int last_digit = 0;

long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[NUM_COLORS] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
  //CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid,
  CRGB::DarkOrchid
};

void setup() {
  Serial.begin(9600);
  Wire.begin();//Для BMP
  LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);

  bmp.begin(); //датчик температуры

  //LEDS.setBrightness(75); // Задаём яркость
  pinMode(4, INPUT_PULLUP); // Кнопка смены цветов
  pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут
  pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов
}
void BrightDots (boolean Dot_On) {
  leds[DOT1] = (Dot_On) ? ledColor : 0;
  leds[DOT2] = (Dot_On) ? ledColor : 0;
}

void BrightDigit (uint8_t digit, uint8_t cursor)
{
  for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1)
  {
    for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++)
    {
      leds[cursor] = (digit & mask) ? ledColor : 0;
      cursor ++;
    }
  }
}
//Массив управляет яркостью
/*/
 //Старый метод изменения яркости
 void BrightnessCheck()
{
  const byte sensorPin = 6;
  //const byte brightnessLow = 50;
  //const byte brightnessHigh = 255;
  int sensorValue = analogRead(sensorPin);
  Serial.print("Освещение: ");
  Serial.println(sensorValue);
  sensorValue = map(sensorValue, 255, 0, 10, 254);
  LEDS.setBrightness(sensorValue);
  // if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
  // else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
};
*/
// Новый метод изменения яркости
void BrightnessCheck() {

  if (auto_bright) {                         // если включена адаптивная яркость
    if (millis() - bright_timer > 100) {     // каждые 100 мс
      bright_timer = millis();               // сброить таймер
      new_bright = map(analogRead(BRI_PIN), 0, bright_constant, min_bright, max_bright);   // считать показания с фоторезистора, перевести диапазон
      new_bright = constrain(new_bright, min_bright, max_bright);
      new_bright_f = new_bright_f * coef - new_bright * (1 - coef);
      LEDS.setBrightness(new_bright_f);      // установить новую яркость
    }
  }
};

//  Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155  вместо 0155
int GetTime()
{
  tmElements_t Now;
  RTC.read(Now);
  //time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение
  int hour = Now.Hour;
  int minute = Now.Minute;
  int second = Now.Second;

  if (second % 2 == 0)
  {
    Dot = false;
  }
  else {
    Dot = true;
  };
  return (hour * 100 + minute);
};

// Преобразуем время в массив для отображание

void TimeToArray() {
  int Now = GetTime(); // Получаем время
  BrightDots(Dot);

  for (int i = 1; i <= 4; i++) {
    int digit = Now % 10; // Получаем последнюю цифру в времени
    int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
    if (i > 2) {
      cursor -= 2;
    }
    BrightDigit(digits[digit], cursor);
    if ( i == COLOR_CHANGE) {
      if (digit != last_digit)
      {
//        cylon ();                              // цикличное изменение цветов
        ledColor =  ColorTable[random(NUM_COLORS)];    // цикличное изменение цветов
      }
      last_digit = digit;
    }
    Now /= 10;
  };
};

// Функция вывода температуры

/*/
 //Пример на DHT11
 void TempToArray() {
  tmElements_t tm;
  RTC.read(tm);
  if (tm.Second != 17) {
    TempShow = false;
    return;  }
  TempShow = true;
  int t = dht.readTemperature();
  int celsius = t * 100; 
  //далее разбивка на светодиоды, можно взять ниже
 */


// Преобразуем Temp в массив для отображение
void TempToArray() {
  tmElements_t tm;
 //bmp.begin();
  RTC.read(tm);
  if (tm.Second % 10 != 6) {
    TempShow = false;
    return;
  }
  TempShow = true;
  int t = bmp.readTemperature();
  int celsius = t;
  BrightDots(0);  //разделительные мигающие точки выключены
  BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7));    //65  начало знака Цельсия (*) 4й блок
  BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14));   //44  начало знака Градус (С) 3 блок
  int digit = celsius % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2));  //21  2й блок вывода второго символа
  celsius /= 10;
  digit = celsius % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));  //0  1й блок вывода первого символа
};

// ЗАКОМЕНТИРОВАТЬ ЕСЛИ НЕ ПОЛУЧИТСЯ
//============ЗАКОМЕНТИРОВАТЬ ЕСЛИ НЕ ПОЛУЧИТСЯ============
 // Измеряем давление
 void PressureToArray() {
  tmElements_t tm;
 //bmp.begin();
  RTC.read(tm);
  if (tm.Second % 10 != 8) {
    PressureShow = false;
    return;
  }
  PressureShow = true;
  int p = bmp.readPressure() / 133.322;
  int Pressure = p;
  BrightDots(0); //разделительные мигающие точки выключены
  BrightDigit(digits[12], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));  //0  начало знака Давления (Р) 1й блок
//  Pressure /= 10;
  int digit = Pressure % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 7 ));  //65  4й блок вывода третьей цифры значения
  Pressure /= 10;
  digit = Pressure % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 14));  //44  3й блок вывода второй цифры значения
  Pressure /= 10;
  digit = Pressure % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2 ));  //21  2й блок вывода первой цифры значения
};
//============ЗАКОМЕНТИРОВАТЬ ЕСЛИ НЕ ПОЛУЧИТСЯ============
// ЗАКОМЕНТИРОВАТЬ ЕСЛИ НЕ ПОЛУЧИТСЯ


/*/
//Функция вывода влажности
void HumidityToArray() {
  tmElements_t tm;
  RTC.read(tm);
  if (tm.Second != 38) {
    HumidityShow = false;
    return;
  }
  HumidityShow = true;
  int h = dht.readHumidity();
  int humidity_percentage = h * 100;
  //   Serial.print("Humidity is: ");Serial.println(humidity_percentage);

  int cursor = 114; // last led number

  leds[57] = 0x000000;
  leds[56] = 0x000000;

  for (int i = 1; i <= 4; i++) {
    int digit = humidity_percentage % 10; // get last digit in time
    if (i == 1) {
      // Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 86;

      for (int k = 0; k <= 27; k++) {
        //  Serial.print(digits[11][k]);
        if (digits[12][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[12][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //  Serial.println();
    }
    else if (i == 2) {
      //  Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 58;

      for (int k = 0; k <= 27; k++) {
        //   Serial.print(digits[10][k]);
        if (digits[10][k] == 1) {
          leds[cursor] = ledColor;
        }
        else if (digits[10][k] == 0) {
          leds[cursor] = 0x000000;
        };
        cursor ++;
      };
      //  Serial.println();
    }
    else if (i == 3) {
      //  Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 28;
      for (int k = 0; k <= 27; 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("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 0;
      for (int k = 0; k <= 27; 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();
    }
    humidity_percentage /= 10;
  };
};
*/



//смена цвета ленты кнопкой DST Pin 4
void DSTcheck() {
  int buttonDST = digitalRead(4);
  if (buttonDST == LOW) {
    ledColor =  ColorTable[random(NUM_COLORS)];
  };
  delay(500);
};

// Массив управляет кнопками с часами и минутами
void TimeAdjust() {
  int buttonH = digitalRead(2);
  int buttonM = digitalRead(3);
  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 fadeall() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i].nscale8(250);
  }
}

// массив отвечает за цикличное изменение цветов
void cylon () {
  static uint8_t hue = 0;
  Serial.print("x");
  // Сдвигаем один светодиод в любом направлении
  for (int i = 0; i < NUM_LEDS; i++) {
    // Устанавливаем 1 светодиод на цвет красный
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
  Serial.print("x");

  // Сдвигаем один светодиод в любом направлении
  for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
    // Устанавливаем 1 светодиод на цвет красный
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
}

void loop()
{ 
  BrightnessCheck(); // Проверяем датчик
  DSTcheck(); // Проверяем режимы
  TimeAdjust(); // Проверяем время если сменилось на 1 цифру
  TimeToArray(); // Проверяем часы если сменилось на 1 цифру
  TempToArray();  // температура
  PressureToArray();  //давление
  //HumidityToArray(); //если будет влажность
  FastLED.show(); // Задаём массив светодиодов
  if (TempShow == true) delay (2000);
  if (PressureShow == true) delay (2000);
    Serial.print("T=");
    Serial.print(bmp.readTemperature());
    Serial.println("*C");
    
    Serial.print ("Pressure = ");
    Serial.print (bmp.readPressure() / 133.322); // Полученное значение в Па делим на 133,322 и получаем мм.рт.ст.
    Serial.println (" mm"); // и соответственно меняем "Pa" на "mm"
    //Serial.println();
    //delay(5000);
}

 

razwal
Offline
Зарегистрирован: 30.09.2020

Komandir пишет:

razwal

должно работать по схеме 6-2-2

Спасибо , вечером смогу попробовать прошивку с вашими дороботками

Green
Онлайн
Зарегистрирован: 01.10.2015

Komandir пишет:

должно работать по схеме 6-2-2


Обычно 4-3-3 или 4-4-2. Иногда даже 4-2-4. Если это футбол.)

b612
Offline
Зарегистрирован: 12.03.2017

razwal пишет:

, это же все-таки в большей степени часы ...
Это реально проблема.
Я в своих сделал настройку времени показа для каждого параметра в отдельности.
Как показала практика там, где это в первую очередь часы,
Время - 6-8 секунд
остальное по 2 секунды

а где это в первую очередь два градусника, там всё по 2 секунды

Была идея поставить ИК-приёмник от телевизора, безо всяких там расшифровок команд.
Просто при любом импульсе включать быстрый показ всех параметров. 

razwal
Offline
Зарегистрирован: 30.09.2020

Komandir пишет:

должно работать по схеме 6-2-2

Да , работает , только по схеме 4-2-2 .

Komandir
Offline
Зарегистрирован: 18.08.2018

razwal пишет:

Да , работает , только по схеме 4-2-2 .

странно - температура должна отображаться с 06,16,26,36,46,56 секунды на две секунды, а давление с 08,18,28,38,48,58 ... хотя я код изучал "по диагонали" и мог чего то и не заметить

b612
Offline
Зарегистрирован: 12.03.2017

Komandir пишет:
странно - температура должна отображаться с 06,16,26,36,46,56 секунды на две секунды, а давление с 08,18,28,38,48,58 ... хотя я код изучал "по диагонали" и мог чего то и не заметить

это что за код должен быть если в нём столько цифер ?!

А что с этим кодом будет если не впаять один из градусников ? или не дай бог БМП-ху ?
У меня реализована очередь из показываемых величин
И если какие-то датчики не впаяны, вплоть до RTC, эти показы пропускаются.
И там ещё была закавыка в том, что во время боя и какое-то время после, вне очереди показывается время

Komandir
Offline
Зарегистрирован: 18.08.2018

Код в 721 ом посте - я просто подправил 4 строки скетча из 172 поста.

b612
Offline
Зарегистрирован: 12.03.2017

Komandir пишет:
Код в 721 ом посте - я просто подправил 4 строки скетча из 172 поста.
это не код, это зародыш

Komandir
Offline
Зарегистрирован: 18.08.2018

что просили исправить, то и исправлял ...

b612
Offline
Зарегистрирован: 12.03.2017

Komandir пишет:

что просили исправить, то и исправлял ...

не обижайтесь это я просто хвастаюсь )

Komandir
Offline
Зарегистрирован: 18.08.2018

чем ?

b612
Offline
Зарегистрирован: 12.03.2017

Komandir пишет:

чем ?

https://youtu.be/7eOAVlV6NaM

razwal
Offline
Зарегистрирован: 30.09.2020

b612 пишет:

Komandir пишет:

что просили исправить, то и исправлял ...

не обижайтесь это я просто хвастаюсь )

Я смотрел ваши видео и ветку форума на радиокоте , да часы Ваши хороши , но я повторюсь , свои я собирал ещё в 2016 году(и они без проблем работают) и не хочу всё переделывать (у меня сделаны на ленте ws2811) и тем более переделывать корпус . Если делать с нуля , тогда можно и Ваши , но если честно у Вас всё очень запутано на форуме , ну настройки , так просто пипец ... , я так понимаю такого количества просто не нужно никому , кроме самого разработчика . Да , это лично моё мнение ...

b707
Offline
Зарегистрирован: 26.05.2017

razwal пишет:

Я смотрел ваши видео и ветку форума на радиокоте

аааа, вот в чем дело... Автор с радиокота? - все понятно. Хороший форум  электронщиков, но совсем не форум программистов.

Цитата:
если честно у Вас всё очень запутано на форуме , ну настройки , так просто пипец ...

вы еще его код не видели...