а в чем разница? - не вижуНе так ?
if ((millis() - Timer <= 5000) && (key ==0))
{
TimeToArray();FastLED.show();key++;
}
а в чем разница? - не вижуНе так ?
if ((millis() - Timer <= 5000) && (key ==0))
{
TimeToArray();FastLED.show();key++;
}
да, после вызова функции идет ее показ, теоретически можно попробовать вынести ее в сами функции, а не в loopПолучается что key всегда увеличивается и FastLED.show(); происходит 4 раза за цикл ?
хорошо, попробую завтраПосмотри отметки времени
в мониторе не часто выводит, вроде 2 раза, проверюкоторая в промежуток между 0-5 секундой вызывается опять же с бешеной частотой.
а есть ли разница? я думаю нет?Не так ?
Разбери этот код, что бы было понятно все, сначала подумай что будет выведено, потом сравни с тем, что выведет монитор порта.а есть ли разница? я думаю нет?
void setup() {
  Serial.begin(115200);
  bool f = false;
  int key = 0;
  if (f)
    TimeToArray(); Serial.println("-1111-"); key++;
  if (f)
  {
    TimeToArray(); Serial.println("-2222-"); key++;
  }
  f = true;
  if (f)
    TimeToArray(); Serial.println("-3333-"); key++;
  if (f)
  {
    TimeToArray(); Serial.println("-4444-"); key++;
  }
  Serial.println(key);
}
void loop() {
}
void TimeToArray()
{
  Serial.println("TimeToArray");
}а, ну даРазбери этот код, что бы было понятно все, сначала подумай что будет выведено, потом сравни с тем, что выведет монитор порта.
снова миллисы, ок)точки включили - засекли миллис.
ну это не мой косяк, это было в чьем-то готовом скетче) если с delay, то все показывает исправно, но есть минусы)я на правки, что туда новички вносят - уже смотреть не могу
добавил, буду разбираться с loop...Сделай внутри проверку на то, что бы прошло какое то время с последней проверки.
void setup() {
  Serial.begin(115200);
}
void loop() {
uint32_t tmrall=millis()%14000/1000;
String out_str;
static String old_out_str;
switch (tmrall)
  {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    {
      out_str="Время:"+String(tmrall);
    }
    break;
    case 6:
    case 7:
    {
      out_str="Температура:"+String(tmrall);
    }
    break;
    case 8:
    case 9:
    {
      out_str="Улица:"+String(tmrall);
    }
    break;
    case 10:
    case 11:
    {
      out_str="Давление:"+String(tmrall);
    }
    break;
    case 12:
    case 13:
    {
      out_str="Что то еще:"+String(tmrall);
    }
    break;
   
  }
if (old_out_str!=out_str)
  {
    Serial.println(out_str);
    old_out_str=out_str;
  }
}void Dots_on()  {
  leds[56] = ledColor;
  leds[57] = ledColor;
     static uint32_t last_dot = millis();
    if ((millis() - last_dot) > 1000);
    last_dot = millis();
    Dots_off();
}
void Dots_off()  {
  leds[56] = 0x000000;
  leds[57] = 0x000000;
}мне вообще не понравились эти switch и case, у bort вроде код на них, такая каша, как по мне и весь код в loop)Я захотел использовать switch, т.к. на мой взгляд это более наглядно и менее запутано
почему-то не выводит TimeToArray в первый раз)Разбери этот код
uint32_t sec = millis() / 1000ul;
  int timeSecs = (sec % 3600ul) % 60ul;Dot = second % 2; //из GetTime()
boolean Dots = true;
  if (Dot == 0) Dots = false; else Dots = true;
     if (Dots){leds[56] = ledColor;
               leds[57] = ledColor;}
         else {leds[56] = 0x000000;
               leds[57] = 0x000000;}мне вообще не понравились эти switch и case, у bort вроде код на них, такая каша,
 byte mode;
    switch (mode){
        case 0:{
        uint32_t Timer_Time;
        Timer_Time = millis();
        if (millis() - Timer_Time <=5000)
        Timer_Time = millis();
        TimeToArray();
        break;
        }
        case 1:{
        uint32_t Timer_Temp;
        Timer_Temp = millis();
        if (millis() - Timer_Temp <=2000)
        TempToArray();
        break;
        }
        case 2:{
        uint32_t Timer_TempS;
        Timer_TempS = millis();
        if (millis() - Timer_TempS <=2000)
        TempStreetToArray();
        break;
        }
        case 3:{
        uint32_t Timer_Press;
        Timer_Press = millis();
        if (millis() - Timer_Press <=2000)
        PressToArray();
        break;
        }
        }
      FastLED.show();for (mode = 0; mode <=3; mode++)ASMmin и max меняешь местами, посмотрел код, закомментировано немного не то)
в конце видео отчетливо заметны точки, которые передержались)
может тогда запихнуть вызов в функцию с датчиками или часами?
  byte mode;
  uint32_t Timer_Time,Timer_Temp,Timer_TempS,Timer_Press;
  for (mode = 0; mode <= 3; mode++) {          //выводим по порядку
    switch (mode) {
      case 0:
          Timer_Time = millis();               //сбросим счетчик
          if (millis() - Timer_Time <= 5000) { //выводим в течении 5 секунд
            TimeToArray();                     //показания часов
          }                
          break;
      case 1:
          Timer_Temp = millis();               //сбросим счетчик
          if (millis() - Timer_Temp <= 2000) { //выводим в течении 2 секунд
            TempToArray();                     //показания датчика
          }              
          break;
      case 2:
          Timer_TempS = millis();               //сбросим счетчик
          if (millis() - Timer_TempS <= 2000) { //выводим в течении 2 секунд
            TempStreetToArray();                //показания датчика
          }          
          break;
      case 3:
          Timer_Press = millis();               //сбросим счетчик
          if (millis() - Timer_Press <= 2000) { //выводим в течении 2 секунд
            PressToArray();                     //показания датчика
          }                
          break;
    }
  }
  FastLED.show();void setup() {
  Serial.begin(115200);
}
void loop() {
  uint32_t tmrall = millis() % 12000 / 1000;
  static uint32_t tmrall_old = 10000;
  if (tmrall_old != tmrall)
  {
    tmrall_old = tmrall;
    if (tmrall < 6)
    {
      Serial.println("Заносим  время в матрицу");
      //TimeToArray();
    } else if (tmrall < 8)
    {
      Serial.println("Заносим  темепературу в матрицу");
      //TempToArray();
    }
    else if (tmrall < 10)
    {
      Serial.println("Заносим  уличную темепературу в матрицу");
      //TempStreetToArray();
    }
    else
    {
      Serial.println("Заносим  давление в матрицу");
      //PressToArray();
    }
  };
  /*
    if (tmrall_old != tmrall)
    {
      tmrall_old = tmrall;
      switch (tmrall)
      {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
          {
            Serial.println("Заносим  время в матрицу");
            //TimeToArray();
          }
          break;
        case 6:
        case 7:
          {
            Serial.println("Заносим  темепературу в матрицу");
            //TempToArray();
          }
          break;
        case 8:
        case 9:
          {
            Serial.println("Заносим  уличную темепературу в матрицу");
            //TempStreetToArray();
          }
          break;
        case 10:
        case 11:
          {
            Serial.println("Заносим  давление в матрицу");
            //PressToArray();
          }
          break;
      }
      Serial.println("Обновление!");
      // тут надо фастледшоу раз в секунду
    }*/
}  uint32_t tmrall = millis() % 12000 / 1000;
  static uint32_t tmrall_old = 10000;
  if (tmrall_old != tmrall)
  {
    tmrall_old = tmrall;
    if (tmrall < 6)
    {
      TimeToArray(); FastLED.show();
    }
    else if (tmrall < 8)
    {
      TempToArray(); FastLED.show();
    }
    else if (tmrall < 10)
    {
      TempStreetToArray(); FastLED.show();
    }
    else
    {
      PressToArray(); FastLED.show();
    }
  };13:08:53.676 -> 13:9:28
13:08:54.660 -> 13:9:29
13:08:55.692 -> 13:9:30
13:08:56.675 -> 13:9:31
13:08:57.658 -> 13:9:32
13:08:58.690 -> 13:9:33
13:09:00.174 -> 23
13:09:01.206 -> 23
13:09:01.672 -> 2
13:09:02.696 -> 2
13:09:04.198 -> 744
13:09:05.183 -> 744нет, спасибо, все понятно, на этом участке кода не так заметно, что хотел показать, я про мс интервалы.Или еще что то странное и непонятное есть ?
это про что? вроде все исправно...А надо еще корректировать часы
void loop ()
{
static bool f1=true; // флаг для температуры в помещении
static bool f2=true;// флаг для температуры на улице
...
if (tmrall < 6)
    {
      TimeToArray(); [S]FastLED.show();[/S]
f1=true;
f2=true;
    }
...
 else if (tmrall < 8)
{
     if (f1)
    {
      TempToArray(); 
f1=false;
 }
...
    }
[CODE]
То частота запросов времени будет 2 раза в секунду, а запросы температур  будут только при 1-ом выводе и все. И давления туда же.
ДА! И только что заметил! Уберите на FastLED.show(); из каждого if  и поставьте в одном месте, в куске кода между 21 и 22 строкой в посте 342кнопки есть, но корректировка времени происходит раз в несколько месяцев, добавляю не более 2 минут)Кнопки то есть какие ?
развивая эту идею - можно по этому целому числу выбирать что показывать с помощью switch()Вот смотри
uint32_t tmrall = millis() % 12000 / 1000;
тут 12000 это полный цикл в секундах. При получении остатка от него у нас будут числа от 0 до 11999. Далее делю на 1000 и получаю целое число в диапазоне от 0 до 11.
надо, но часы на ардуино, все датчики припаяны) Может кто-то соберет пока для одних часов, чтобы можно было потом добавить другие датчики и перепаять)на ESP8266 надо разрабатывать
