ARDUINO Помогите с кодом

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
если ты заметил, я перенёс запрос температуры в тело оператора условия,
и запрос будет происходить только в том случае если МК видит датчик, я не утверждаю просто попробуй ту функцию loop(),
что я исправил... ну и задержку добавил...
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
если ты заметил, я перенёс запрос температуры в тело оператора условия,
это заметил
и запрос будет происходить только в том случае если МК видит датчик, я не утверждаю просто попробуй ту функцию loop()
скоро проверю, спасибо
 

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
12
Да, жаль нет под рукой данного железа... в пути пока...
ну поковыряй сам может чего нароешь, только не хорони тему о результатах пиши...)))
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
да мучаю пока, вчера вот сигнал пропал, сегодня прозвонил, похоже не было сигнала по питанию
Т.к. провод телефонный на 4 жилы, взял запасную жилу перекинул, связь появилась, но все равно пробегает потеря сигнала в виде -127.
Надо герметичный заказать, может в нем дело еще)
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
-0' C показывает)
только я не помню, какой там скетч залит))
на плюсовой температуре будет видно))
 
Изменено:

OdinochkA

✩✩✩✩✩✩✩
10 Фев 2019
1
0
Тема с часами умерла? Или ТС все сделал и забыл показать свои труды?
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Да и эта тема не с часами, а только для помощи с кодом, смотри в профиле мою основную тему)
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Да, жаль нет под рукой данного железа... в пути пока...
ну поковыряй сам может чего нароешь, только не хорони тему о результатах пиши...)))
вообщем код косячит что-то) убрал задержку 1000, вроде пропал '-27'( не пропал, но реже стал), сейчас абракадабра показывается больше, за место его))
и при показе нормальной температуры, сейчас 4 градуса тепла, проскакивает промигивает минус)
с домашним датчиком вообще проблем нет)
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Всем вновь привет!
C++:
void TimeAdjust(){
  int buttonH = digitalRead(HUR_PIN);
  int buttonM = digitalRead(MIN_PIN);
  if (buttonH == LOW || buttonM == LOW){
    delay(50);
     time.gettime();
    int hour=time.Hours;
    int minutes=time.minutes;
    int second =time.seconds;
      if (buttonH == LOW){
        if (hour== 23){hour=0;}
          else {hour += 1;};
        }else {
          if (minutes== 59){minutes=0;}
          else {minutes += 1;};
          };
time.settime(0, minutes, hour);   }
  }
как максимально проще доделать код, чтобы можно было фиксировать длинные нажатия кнопки для ускоренной перемотки
C++:
if (buttonH == LOW){

        if (hour== 23){hour=0;}

          else {hour += 2;};

        }else {

          if (minutes== 59){minutes=0;}

          else {minutes += 5;};

          };
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
Если взять библиотеку Гайвера по кнопкам, то у него есть обработка нажатия и удерживания.
А самому... фиксируешь время нажатия, далее если кнопка все нажата и текущее время - время нажатия больше определенного тобой интервала, то считается удерживанием, даешь сигнал об удерживании и можешь сделать 2 вещи: сделать время нажатия текущим, тогда удержание будет работать на постоянный интервала. а можно установить флаг удерживания и запомнить время начала удержания, тогда можно сделать разными начальный интервал на начало удерживания и тики удержания.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
@Старик Похабыч, это тогда много кода будет, и так Arduino ругается на мало памяти)
думал, может что проще есть, в примерах видел с вводом новых переменных
C++:
bool     button_state      = false;
bool     button_auto_state = false;
uint32_t ms_button         = 0;
uint32_t ms_auto_click     = 0;

void loop(){
   uint32_t ms    = millis();
   bool pin_state = digitalRead(PIN_BUTTON);
// Фиксируем нажатие кнопки  
   if( pin_state  == LOW && !button_state && ( ms - ms_button ) > 50 ){
      button_state      = true;
      button_auto_state = false;
      ms_button         = ms;
   }
// После 2000 мс нажатия кнопки каждые 500 мс фиксируем событие нажатия
   if( pin_state  == LOW && ( ms - ms_button ) > 2000 && ( ms - ms_auto_click )>500 ){
      button_auto_state = true;
      ms_auto_click     = ms;
      Serial.println("Auto press key");  
   }
// Фиксируем отпускание кнопки  
   if( pin_state == HIGH && button_state && ( ms - ms_button ) > 50  ){
      button_state      = false;  
      ms_button         = ms;
      if( !button_auto_state )Serial.println("Press key");
   }
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
много кода когда много библиотек, они универсальны, но объемны. написав все под свои нужды можно сократить код изрядно
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Хочу оптимизировать код
C++:
if (GetSecond()>=16 && GetSecond()<=20 || (GetSecond()>=41 &&GetSecond()<=45))
          {TempStreetToArray();}
            else if (GetSecond()>=8 && GetSecond()<=15 || (GetSecond()>=34 &&GetSecond()<=40))
            {TempToArray();}
            else if (GetSecond()>=21&& GetSecond()<=25 || (GetSecond()>=46 && GetSecond()<=50))
              {PressToArray();}
               else    {TimeToArray();}
на
C++:
      TimeToArray();
      delay(3000);
      TempToArray();
      delay(3000);
      TempStreetToArray();
      delay(3000);
      PressToArray();
      delay(3000);
но почему-то loop не работает)) показывает только PressToArray()

что не так?)
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Так нет его.. loop-а то.. совсем нет.
C++:
 digitalWrite(13, HIGH);
 delay(1000);
 digitalWrite(13, LOW);
 delay(1000);

// Дойдя до сюда, ардуино вернется на первую строчку и опять начнет выполнение всех инструкций. И так раз за разом
Аналогично примеру)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
Ну вставь перед каждым delay Serial.println("TimeToArray"); и подобные функции. Наверняка они идут как положено, но так хотя бы поймешь где завистон
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
1Раз цикл работает, то значит вызываются все функции внутри него.
1) Проверить неработающие функции еще раз трезвым взглядом. Точно во всех этих функциях есть вывод данных?
2) Можно в начале и в конце вывода каждой функции дописать что то типа:
в начале Serial.println("TimeToArray Start");
в конце Serial.println("TimeToArray End");
 

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Проверить неработающие функции
этот же код работает)
C++:
if (GetSecond()>=16 && GetSecond()<=20 || (GetSecond()>=41 &&GetSecond()<=45))
          {TempStreetToArray();}
            else if (GetSecond()>=8 && GetSecond()<=15 || (GetSecond()>=34 &&GetSecond()<=40))
            {TempToArray();}
            else if (GetSecond()>=21&& GetSecond()<=25 || (GetSecond()>=46 && GetSecond()<=50))
              {PressToArray();}
               else    {TimeToArray();}
по сути тоже самое, те же операторы, только без условий по секундам)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
Гадание по обрывку кода. Где вывод на дисплей.
Я подозреваю что процесс идет так
1) Подготовка данных в массив.
2) Вывод данных из массива

Тогда все логично получается. каждая сл. процедура затирает ранее подготовленные данные и на вывод идет только последняя процедура, т.к. вывод на дисплей "гдето там"

Проверить легко: поменять местами 1-ую и последнюю функции.

Вывод на экран надо делать после каждой подготовки массива

А код с IF готовит только один комплект данных , в зависимости от времени.

И еще выкладывание куска кода, вместо более менее приличного фрагмента усложняет и удлиняет время выяснения причин. А пытки паяльником у нас не приветствуются..
 
  • Лойс +1
Реакции: ASM

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
Гадание по обрывку кода. Где вывод на дисплей.
не стал писать, а так внизу строка FastLED.show(); и весь loop

поставил вывод после каждого массива, все заработало, спасибо)
А код с IF готовит только один комплект данных , в зависимости от времени
вот в этом и было дело) теперь в часах перестали моргать две точки, как же все взаимосвязано)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,192
1,280
Москва
даже кирпич упав на ноги вызывает помутнение в глазах!

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

ASM

★★★★✩✩✩
26 Окт 2018
1,515
294
точки мигают как часто
мигали каждую секунду, загорелись -1, погасли-2 и т.д.
сейчас либо горят, либо не горят, в зависимости от четности секунды, но это уже мелочи, может допилю, может оставлю гореть, поставил задержку в 5 сек, присмотрюсь)