Круговое переключение режимов

artur769
Offline
Зарегистрирован: 04.11.2018

Здравствуйте! Подскажите, пожалуйста, почему не выходит прокручивать влево режимы по кругу? Вправо проблем нет. 

При нажатии вправо происходит переход от 1 к 10 и заново, в т.ч. из любого положения, например от 6 режима.

При нажатии влево переход также происходит из любого режима назад, кроме 1го - здесь упирается "в стену".

Друг с другом дружат кнопки.

Вот код

case BUTT_LEFT: 
      
      if(settings_mode){

    if(--mode>MODE_AMOUNT-1)mode=0;
  }
  switch (mode){
    case 1:
      this_mode = 1;
      
   break;
    case 2:
    this_mode = 2;
    break;
    case 3:
      this_mode = 3;
    break;
    case 4:
      this_mode = 4;
      
   break;
    case 5:
    this_mode = 5;
    break;
    case 6:
      this_mode = 6;
    break;
    case 7:
      this_mode = 7;
      
   break;
    case 8:
    this_mode = 8;
    break;
    case 9:
      this_mode = 9;
    break;
    case 10:
    this_mode=10;
    break;
  }
  break;
      case BUTT_RIGHT: 
if(settings_mode){

    if(++mode>MODE_AMOUNT-1)mode=0;
  }
  switch (mode){
    case 1:
      this_mode = 1;
      
   break;
    case 2:
    this_mode = 2;
    break;
    case 3:
      this_mode = 3;
    break;
    case 4:
      this_mode = 4;
      
   break;
    case 5:
    this_mode = 5;
    break;
    case 6:
      this_mode = 6;
    break;
    case 7:
      this_mode = 7;
      
   break;
    case 8:
    this_mode = 8;
    break;
    case 9:
      this_mode = 9;
    break;
    case 10:
    this_mode=10;
    break;
  }

 

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

что можно понять по этому агрыску кода?

но, вангую, мошт так? 

05   if(--mode<0)mode=10;

artur769
Offline
Зарегистрирован: 04.11.2018

Забыл добавить начало

И еще вопрос:

пришлось обозначить количество режимов 11 (видно ниже), потому что такая вот особенность получается:
если сделать AMOUNT 10 как и положено, как и фактическое количество режимов, то, дойдя до 9 режима кнопкой вправо, далее происходит пропуск 10го и переход к 1му! А если сделать 11, то, дойдя до 9, далее 10, далее "пустое нажатие" (обязательно), и затем 1ый. Почему?

#define MODE_AMOUNT 11

#include "IRLremote.h"
CHashIR IRLremote;

#if IR_RCT != 0
    void remoteTick(){
      if (IRLremote.available())  {
    auto data = IRLremote.read();
    IRdata = data.command;
    ir_flag = true;
  }
    
  if (ir_flag) {
    switch (IRdata) {
      // режимы далее, а именно кнопки и приписанные к ним режимы

 

artur769
Offline
Зарегистрирован: 04.11.2018

так а почему вправо нормально по кругу крутит? я не знаток, но мне кажется не пройдет ваша команда

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

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

case BUTT_LEFT: 
      
      if(settings_mode){

    	if(--mode>MODE_AMOUNT-1)mode=0;
  	}
  this_mode = mode;
  break;
case BUTT_RIGHT: 
      if(settings_mode){

         if(++mode>MODE_AMOUNT-1)mode=0;
      }
  this_mode = mode;
  break;
}

этот код полностью аналогичен вашему из заглавного сообщения - только в 5 раз короче.

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

artur769 пишет:

И еще вопрос:

пришлось обозначить количество режимов 11 (видно ниже), потому что такая вот особенность получается:
если сделать AMOUNT 10 как и положено, как и фактическое количество режимов, то, дойдя до 9 режима кнопкой вправо, далее происходит пропуск 10го и переход к 1му! А если сделать 11, то, дойдя до 9, далее 10, далее "пустое нажатие" (обязательно), и затем 1ый. Почему?

как "почему?" - вы этот код не писали сами, а где-то стырили?

Вы строке 5 сравниваете не с MODE_AMOUNT . а с MODE_AMOUNT-1 - поэтому

artur769
Offline
Зарегистрирован: 04.11.2018

спасибо, сейчас проверю

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

b707 пишет:

а вот так не проще?

case BUTT_LEFT: 
      
      if(settings_mode){

    	if(--mode>MODE_AMOUNT-1)mode=0;
  	}
  this_mode = mode;
  break;
case BUTT_RIGHT: 
      if(settings_mode){

         if(++mode>MODE_AMOUNT-1)mode=0;
      }
  this_mode = mode;
  break;
}

 

кстати, в коротком коде и ошибка сразу видна - в условиях строки 5 и 11 ты в одном случае увеличиваешь режим, в другом уменьшаешь, а сравниваешь оба раза почему-то с верхним пределом... нелогично же.

Понял свою ошибку или обьяснить?

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

b707 пишет:

а вот так не проще?

case BUTT_LEFT: 
      
      if(settings_mode){

    	if(--mode>MODE_AMOUNT-1)mode=0;
  	}
  this_mode = mode;
  break;
case BUTT_RIGHT: 
      if(settings_mode){

         if(++mode>MODE_AMOUNT-1)mode=0;
      }
  this_mode = mode;
  break;
}

 

кстати, в коротком коде и ошибка сразу видна - в условиях строки 5 и 11 ты в одном случае увеличиваешь режим, в другом уменьшаешь, а сравниваешь оба раза почему-то с верхним пределом... нелогично же.

Понял свою ошибку или обьяснить?

я честно долго сам сидел и думал
да, код не мой, но и не спер, а взял за основу у АлексаГайвера из программы для светодиодной ленты, потому что там про ИК пульт было, я по ходу все изучал и фактически проверял
это я к тому, что у меня были мысли, что как - то по-другому можно поставить пределы... но.. листать то листают... не понимаю ошибку:(

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

artur769 пишет:

это я к тому, что у меня были мысли, что как - то по-другому можно поставить пределы... но.. листать то листают... не понимаю ошибку:(

ну вот смотри - если ты листаешь вверх, то когда ты доходишь до последнего режима , скажем 10 - следующим тебе нужно перейти на mode=0 - правильно? значит нужно сравнивать с максимальным количество режимов

if(++mode>MODE_AMOUNT)mode=0;

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

if(--mode < 0) mode=MODE_AMOUNT;

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:
взял за основу у АлексаГайвера
Немедленно брось каку! И больше не бери!

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

ЕвгенийП пишет:

artur769 пишет:
взял за основу у АлексаГайвера
Немедленно брось каку! И больше не бери!

присоединяюсь, Гайвер - блоггер, а не программист, ему главное блог наполнить контентом, а на качество пофиг

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

b707 пишет:

if(--mode < 0) mode=MODE_AMOUNT;

Значить, правильно я ванговал в #1

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

artur769 пишет:

это я к тому, что у меня были мысли, что как - то по-другому можно поставить пределы... но.. листать то листают... не понимаю ошибку:(

ну вот смотри - если ты листаешь вверх, то когда ты доходишь до последнего режима , скажем 10 - следующим тебе нужно перейти на mode=0 - правильно? значит нужно сравнивать с максимальным количество режимов

if(++mode>MODE_AMOUNT)mode=0;

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

if(--mode < 0) mode=MODE_AMOUNT;

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

Понял! ну, вертится в голове, представляю, не совсем только уложилось;)

по поводу mode

имеются следующие записи
 

#define MODE 0
#define MODE_AMOUNT 11

byte this_mode = MODE;
byte mode = 0;

 

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

artur769 пишет:
взял за основу у АлексаГайвера
Немедленно брось каку! И больше не бери!

 

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

 

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

artur769 пишет:

по поводу mode


byte this_mode = MODE;
byte mode = 0;

 

вот не помню, в ардуино byte знаковый или нет? - Кот?:)

проще не думать, а исправить на

int8_t this_mode = MODE;
int8_t mode = 0;

 

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

Естественно, byte беззнаковый, такшто, исправить надо.

sadman41
Offline
Зарегистрирован: 19.10.2016

Варианты:

mode = (mode + 1) % MODE_AMOUNT; 

...

mode = (mode - 1) % MODE_AMOUNT;

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:

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

Ну, не по Гиверу же! Он приходил сюда со своими библиотеками. Ему потихоньку начали показвать ошибки в них тыц, тыц, тыц, он быстренько слился и перестал отвечать. Если бы не перестал, я показал бы ему ещё с десяток - практически ни одной библиотеки без грубых ошибок у него нет.

sadman41
Offline
Зарегистрирован: 19.10.2016

Хорошо, что я свои сюда не таскаю, а то бы тоже огреб ))

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

artur769 пишет:

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

Ну, не по Гиверу же! Он приходил сюда со своими библиотеками. Ему потихоньку начали показвать ошибки в них тыц, тыц, тыц, он быстренько слился и перестал отвечать. Если бы не перестал, я показал бы ему ещё с десяток - практически ни одной библиотеки без грубых ошибок у него нет.

ого.....

а что почитать посоветуете?

я там нашел ваши темы интересные по ссылкам вашим же - закрепил эти вкладки

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

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

artur769 пишет:

по поводу mode


byte this_mode = MODE;
byte mode = 0;

 

вот не помню, в ардуино byte знаковый или нет? - Кот?:)

проще не думать, а исправить на

int8_t this_mode = MODE;
int8_t mode = 0;

 

 

спасибо!
пойду переделывать, точнее уже переделываю, но там с каждым шагом (еще много задач) все больше закапываюсь;)

а вы, с коллегами, еще можете подсказать насчет millis и работы вот этих времен? если коротко: на определенные кнопки с того же пульта поставлены режимы 1) стандартный ход работы светофоров по секундам, по millis 2) аварийный режим - так вот из аварийного режима выйти получается, когда в другие режимы кнопками заходишь, а из основного нет! то есть, конечно, режимы запускаются другие, но они конфликтуют со стандартным, так как стандартный продолжает на фоне (слегка помигивая диодами) работать

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

sadman41 пишет:

Хорошо, что я свои сюда не таскаю, а то бы тоже огреб ))

И я. :-)   Хотя, я был бы только рад профессиональному мнению. Мошт, чему научился бы.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

artur769 пишет:

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

Ну, не по Гиверу же! Он приходил сюда со своими библиотеками. Ему потихоньку начали показвать ошибки в них тыц, тыц, тыц, он быстренько слился и перестал отвечать. Если бы не перестал, я показал бы ему ещё с десяток - практически ни одной библиотеки без грубых ошибок у него нет.

Зато у Вас, своего ёбтуб канала нет, а у него есть, а теперь уже и птенцы из гнизда вылезать начали.))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

Зато у Вас, своего ёбтуб канала нет, а у него есть, а теперь уже и птенцы из гнизда вылезать начали.))))

таки не токмо канал, а ещё и сайт с громким названием "AlexGyver Technologies"

Так шо нам до этого человека расти и расти!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:

а что почитать посоветуете?

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

Например, я не видел явных глупостей в книге Дж. Блума, правда в оригинале. Потому что в русском переводе откуда-то появились опечатки в текстах программ. Неужели они их вручную набирали?

А в многочисленных "курсах" в сети столько безграмотности и идиотизма. То они "return loop();" напишут, то миллис начинают насиловать ... ужас.

Вот, кстати, пример отборного бреда от Вашего "учителя"  -https://alexgyver.ru/arduino/lesson4_script.pdf

a5021
Offline
Зарегистрирован: 07.07.2013

DetSimen пишет:
что можно понять по этому агрыску кода?

От наблюдательности зависит. Я вот узрел интересное: "BUTT_LEFT" и "BUTT_RIGHT". Это при том, что BUTT по английски означает, как бы так помягче выразиться, "БУЛКИ", в общем. Левая булка и правая.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Вот, кстати, пример отборного бреда от Вашего "учителя"  -https://alexgyver.ru/arduino/lesson4_script.pdf

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

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

Так у него в библиотеках эти функции так и используются.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Так у него в библиотеках эти функции так и используются.

А почему, нет? Пипл хавает, наверно и на кнопочку "Поддержать" жмет иногда. Там ведь как в Думе, главное, брехать уверенно и без задержки.((((

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

bwn пишет:

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

Так у него в библиотеках эти функции так и используются.


Евгений! Я понял, что нужно смотреть в другую сторону...
Сейчас вы можете подсказать как быть с функцией стандартного отсчёта, если можно так выразиться?
Мне нужно сделать стандартный режим работы светофоров с тем, чтобы переходить в другие режимы (ручной, аварийный). Не получается. А именно стандартный режим работает как бы изподтишка. Лучше всего получалось, когда приписывал переменную, например sek = 0, а затем, заводя таймер стандартный, и, приписывая работу sek ко включённому pin 13, пишутся функции типо if sek=25 то красный +, зелёный -.
Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается, просто первое положение горит и все
Куда смотреть? Чем руководствоваться?

bwn
Offline
Зарегистрирован: 25.08.2014

По миллисам, почитайте Лешака, мне с его изложением, сразу дошло.

И да, не пытайтесь все в одном лупе сделать, лучше разбивайте на маленькие функции и вызывайте их по мере надобности. Намного легче. ИМХО.

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

artur769][quote=ЕвгенийП пишет:

Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается, просто первое положение горит и все Куда смотреть? Чем руководствоваться?

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, почитайте Блума.

А вообще, если нужен светофор, Вам бы не ардуину осваивать а автоматное (или табличное) программирование.

Хотите пример, как профессионально делается светофор любой сложности? Причём сложность программы постоянна - не растёт вместе со сложностью светофора? Держите, там со стр. 8 начинается описание как правильно делать светофор. очень подробно описано. Вам надо вот это понимать, а таблицу запрограммировать - как два пальца на самом деле.

artur769
Offline
Зарегистрирован: 04.11.2018
#include <GyverTimer.h>

#include <IRLremote.h>
#include <IRL_Decode.h>
#include <IRL_Hash.h>
#include <IRL_Keycodes.h>
#include <IRL_Nec.h>
#include <IRL_NecAPI.h>
#include <IRL_Panasonic.h>
#include <IRL_Platform.h>
#include <IRL_Protocol.h>
#include <IRL_Receive.h>
#include <IRL_Time.h>


#define IR_RCT 1
#define IR_PIN 2

#define MODE 0
#define MAIN_LOOP 5

#if IR_RCT == 1
#define BUTT_UP     0xE51CA6AD
#define BUTT_DOWN   0xD22353AD
#define BUTT_LEFT   0x517068AD
#define BUTT_RIGHT  0xAC2A56AD
#define BUTT_OK     0x1B92DDAD
#define BUTT_1      0x68E456AD
#define BUTT_2      0xF08A26AD
#define BUTT_3      0x151CD6AD
#define BUTT_4      0x18319BAD
#define BUTT_5      0xF39EEBAD
#define BUTT_6      0x4AABDFAD
#define BUTT_7      0xE25410AD
#define BUTT_8      0x297C76AD
#define BUTT_9      0x14CE54AD
#define BUTT_0      0xC089F6AD
#define BUTT_STAR   0xAF3F1BAD
#define BUTT_HASH   0x38379AD
#endif

int sek = 0;

#define MODE_AMOUNT 10

CHashIR IRLremote;

uint32_t IRdata;

const int r1 = 12;
const int y1 = 11;
const int g1 = 10;
const int r2 = 9;
const int y2 =  8;
const int g2 = 7;
const int c = 6;

int time1 = 1000;

int ledState = LOW;

unsigned long myTimer1;
unsigned long main_timer;

const long interval = 1000;

long previousMillis = 0;

boolean settings_mode, city, default_city = true, ONstate = true;
volatile boolean ir_flag;

int8_t this_mode = MODE;
int8_t mode = 0;





void setup() {

  Serial.begin(9600);

  IRLremote.begin(IR_PIN);

  pinMode(r1, OUTPUT);
  pinMode(y1, OUTPUT);
  pinMode(g1, OUTPUT);
  pinMode(r2, OUTPUT);
  pinMode(y2, OUTPUT);
  pinMode(g2, OUTPUT);
  pinMode(c, OUTPUT);

}

void loop() {


#if IR_RCT != 0
remoteTick();
#endif
mainLoop();

}

void mainLoop() {

  if (city) {

    digitalWrite (c, HIGH);
  }
  if (!city) {

    digitalWrite (c, LOW);
  }

  if (this_mode == 12) {

    digitalWrite (r1, LOW);
    digitalWrite (y1, LOW);
    digitalWrite (g1, LOW);
    digitalWrite (r2, LOW);
    digitalWrite (y2, LOW);
    digitalWrite (g2, LOW);
    digitalWrite (13, LOW);
  }





  if (ONstate) {

if (default_city){

    unsigned long currentMillis = millis();

    if (currentMillis - main_timer >= interval) {
      main_timer = currentMillis;
      digitalWrite(13, !digitalRead(13));

      if (digitalRead(13) == HIGH)
      {
        sek++;


        //*********************************************************//
        if (sek == 1)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);

        }

        //****************************************************//
        if (sek == 25)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }

        if (sek == 26)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }




        if (sek == 27)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }


        if (sek == 28)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }

        if (sek == 29)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        if (sek == 30)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        if (sek == 31)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }


        //***********************************************************//


        if (sek == 32)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, HIGH);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);

        }

        if (sek == 35)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);

        }

        if (sek == 38)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, HIGH);
          digitalWrite (g2, LOW);
        }

        if (sek == 40)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, HIGH);
        }



        //************************************************************//
        if (sek == 65)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }

        if (sek == 66)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, HIGH);
        }

        if (sek == 67)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }



        if (sek == 68)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, HIGH);
        }

        if (sek == 69)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        if (sek == 70)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, HIGH);
        }
        if (sek == 71)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }


        //*************************************************************//

        if (sek == 72)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, LOW);
          digitalWrite (y2, HIGH);
          digitalWrite (g2, LOW);
        }



        if (sek == 75)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }


        if (sek == 77)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, HIGH);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }



        if (sek == 80)
        {
          sek = 0;   //обнуляем значение таймера
        }



      }
    }
  }

    if (this_mode == 1) {

      this_mode != 11;

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, LOW);
      digitalWrite (y2, LOW);
      digitalWrite (g2, HIGH);

    }

    if (this_mode == 2) {

      this_mode != 11;

      if (millis() - myTimer1 >= time1) {

        myTimer1 = millis();

        if (ledState == LOW) {

          ledState = HIGH;

        } else {

          ledState = LOW;
        }

        digitalWrite (r1, HIGH);
        digitalWrite (y1, LOW);
        digitalWrite (g1, LOW);
        digitalWrite (r2, LOW);
        digitalWrite (y2, LOW);
        digitalWrite (g2, HIGH);

        digitalWrite(g2, ledState);

      }

    }

    if (this_mode == 3) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, LOW);
      digitalWrite (y2, HIGH);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 4) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, LOW);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 5) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, HIGH);
      digitalWrite (g1, LOW);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, LOW);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 6) {

      digitalWrite (r1, LOW);
      digitalWrite (y1, LOW);
      digitalWrite (g1, HIGH);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, LOW);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 7) {

      if (millis() - myTimer1 >= time1) {

        myTimer1 = millis();

        if (ledState == LOW) {

          ledState = HIGH;

        } else {

          ledState = LOW;

        }

        digitalWrite (r1, LOW);
        digitalWrite (y1, LOW);
        digitalWrite (g1, HIGH);
        digitalWrite (r2, HIGH);
        digitalWrite (y2, LOW);
        digitalWrite (g2, LOW);

        digitalWrite(g1, ledState);

      }

    }

    if (this_mode == 8) {

      digitalWrite (r1, LOW);
      digitalWrite (y1, HIGH);
      digitalWrite (g1, LOW);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, LOW);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 9) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, LOW);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 10) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, HIGH);
      digitalWrite (y2, HIGH);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 11) {

      this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

      digitalWrite(r1, LOW);
      digitalWrite(g1, LOW);
      digitalWrite(r2, LOW);
      digitalWrite(g2, LOW);

      if (millis() - myTimer1 >= time1) {

        myTimer1 = millis();

        if (ledState == LOW) {

          ledState = HIGH;

        } else {

          ledState = LOW;

        }

        digitalWrite(y1, ledState);
        digitalWrite(y2, ledState);

      }

    }

  }

}

#if IR_RCT != 0
void remoteTick() {

  if (IRLremote.available())  {

    auto data = IRLremote.read();
    IRdata = data.command;
    ir_flag = true;

  }

  if (ir_flag) {

    switch (IRdata) {

      case BUTT_1:
        if (settings_mode) {
          this_mode = 1;
        }
        else {
          default_city;
        }
        break;

      case BUTT_2: if (settings_mode) {
          this_mode = 2;
        }
        break;

      case BUTT_3: if (settings_mode) {
          this_mode = 3;
        }
        else {
          city = !city;
        }
        break;

      case BUTT_4: if (settings_mode) {
          this_mode = 4;
        }
        break;

      case BUTT_5: if (settings_mode) {
          this_mode = 5;
        }
        break;

      case BUTT_6: if (settings_mode) {
          this_mode = 6;
        }
        break;

      case BUTT_7: if (settings_mode) {
          this_mode = 7;
        }
        break;
      case BUTT_8: if (settings_mode) {
          this_mode = 8;
        }
        break;

      case BUTT_9: if (settings_mode) {
          this_mode = 9;
        }
        break;

      case BUTT_0: if (settings_mode) {
          this_mode = 10;
        }
        else if (!settings_mode) {
          this_mode = 12;
        }
        break;

      case BUTT_STAR: ONstate = !ONstate;
        break;

      case BUTT_HASH: if (!settings_mode) {
          this_mode = 11;
        }
        break;

      case BUTT_OK: settings_mode = !settings_mode;

        digitalWrite(r1, HIGH);
        delay (200);
        digitalWrite(r1, LOW);
        digitalWrite(y1, HIGH);
        delay (200);
        digitalWrite(y1, LOW);
        digitalWrite(g1, HIGH);
        delay (200);
        digitalWrite(g1, LOW);
        digitalWrite(r2, HIGH);
        delay (200);
        digitalWrite(r2, LOW);
        digitalWrite(y2, HIGH);
        delay (200);
        digitalWrite(y2, LOW);
        digitalWrite(g2, HIGH);
        delay(200);
        digitalWrite(g2, LOW);


        break;

      case BUTT_UP:

      case BUTT_DOWN:

      case BUTT_LEFT:

        if (settings_mode) {

          if (--mode < 0)mode = MODE_AMOUNT;
        }
        this_mode = mode;
        break;

      case BUTT_RIGHT:
        if (settings_mode) {

          if (++mode > MODE_AMOUNT)mode = 0;
        }
        this_mode = mode;
        break;

        break;

    }

    ir_flag = false;
  }

}

#endif

b707]</p> <p>[quote=artur769 пишет:
ЕвгенийП пишет:

Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается, просто первое положение горит и все Куда смотреть? Чем руководствоваться?

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

пояснения:

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

идет сам, если ему не мешать

пробовал всякое, сам и не сам

это код не мой, но втиснул под себя

логику почти понимаю

пожалуйста, помогите приписать в систему, чтобы нормально работал, стыковался с другими режимами и обнулялся счетчик

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

стыковать - не получается

были варианты с простым if (millis () - currentMillis > 25000) что то наподобие - не получается вообще запустить

ОБЕЩАЮ ВСЕ ПРОЧИТАТЬ И КАК МОЖНО БОЛЬШЕ ИЗУЧИТЬ, мне это интересно стало, как взялся, но надо закончить проект, раз взялся под сроки

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

Ну, почитайте Блума.

А вообще, если нужен светофор, Вам бы не ардуину осваивать а автоматное (или табличное) программирование.

Хотите пример, как профессионально делается светофор любой сложности? Причём сложность программы постоянна - не растёт вместе со сложностью светофора? Держите, там со стр. 8 начинается описание как правильно делать светофор. очень подробно описано. Вам надо вот это понимать, а таблицу запрограммировать - как два пальца на самом деле.

почитаю всё обязательно, спасибо

сейчас только надо последнее действие доделать

макет готов

режимы сделаны

только вот основной не стыкуется

если можете, подсобите с постановкой - сообщение ниже

сроки жмут, понимаю, что много на себя взял, но мне это оказалось интересно, буду изучать

я понимаю (если хоть это есть верно), что нужно "остановить таймер", при том, что время не останавливается, ну то есть как то перейти на другой режим

или белеберду написал;)

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

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

artur769
Offline
Зарегистрирован: 04.11.2018

b707]</p> <p>[quote=artur769 пишет:
ЕвгенийП пишет:

Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается, просто первое положение горит и все Куда смотреть? Чем руководствоваться?

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

я показал код

участок, который интересует - это участок, который в этот раз я назвал "default_city"

перепробовал многое... из того, что на ум пришло и того, что узнал

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

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

Ну, почитайте Блума.

А вообще, если нужен светофор, Вам бы не ардуину осваивать а автоматное (или табличное) программирование.

Хотите пример, как профессионально делается светофор любой сложности? Причём сложность программы постоянна - не растёт вместе со сложностью светофора? Держите, там со стр. 8 начинается описание как правильно делать светофор. очень подробно описано. Вам надо вот это понимать, а таблицу запрограммировать - как два пальца на самом деле.

кстати, обратите внимание, Евгений - сделал, как вы рекомендовали - получилось! листает назад по кругу!=)

но вот особенность осталась: когда доходишь до крайней точки что вправо, что влево, следующее нажатие будет "пустое" и только потом режим (с 10 - 1 или с 1 - 10, соответственно).

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

Ну, почитайте Блума.

А вообще, если нужен светофор, Вам бы не ардуину осваивать а автоматное (или табличное) программирование.

Хотите пример, как профессионально делается светофор любой сложности? Причём сложность программы постоянна - не растёт вместе со сложностью светофора? Держите, там со стр. 8 начинается описание как правильно делать светофор. очень подробно описано. Вам надо вот это понимать, а таблицу запрограммировать - как два пальца на самом деле.

 

и еще, как же все-таки зайти к вам в профиль, чтобы найти все ваши темы и почерпнуть полезную информацию, как например "Великолепие переполнение millis()"?

не забудьте только, пожалуйста, про другие вопросы=)

очень хочу научиться, изучаю всё, что могу и нахожу, только вот приоритет пока в результате, а затем для себя;)

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

artur769 пишет:

я показал код

участок, который интересует - это участок, который в этот раз я назвал "default_city"

Артур, извините, но в этой "простыне" я копаться не стану. Изучать правила работы с миллис надо на простеньких примерах в 10-15 строк. Сделайте из своего кода такие примеры - их и будем обсуждать.

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

artur769 пишет:

я показал код

участок, который интересует - это участок, который в этот раз я назвал "default_city"

Артур, извините, но в этой "простыне" я копаться не стану. Изучать правила работы с миллис надо на простеньких примерах в 10-15 строк. Сделайте из своего кода такие примеры - их и будем обсуждать.

простите, но я не понимаю? то мало кода, то много

я показал весь код. За исключением пары команд, здесь приведено всё, что отонсится "друг к другу". Это как я вижу. Всё дело в том, что если посмотреть на коды, где есть millis другие (если так удобнее), то из других команд видно то, о чем я говорю. Они "выключаются" другими командами (нажатием соответствующей кнопки на пульте). А режим default_city нет!

Скажите, что конкретно вам показать? Только default_city и объявление переменных?

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

artur769 пишет:

простите, но я не понимаю? то мало кода, то много

Скажите, что конкретно вам показать? Только default_city и объявление переменных?

Видимо я вас неправильно понял

Я прочитал вашу фразу

"Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается"

и понял ее так, что у вас проблемы с применением миллис.

artur769
Offline
Зарегистрирован: 04.11.2018

Вот, постарался максимально сократить

интересует штука deafult_city

здесь же режим rhis_mode == 12 не отключает режим default_city

как и другие режимы просто "накладываются" (как и описывал)

я пробовал делать default_city без объявления отдельной функции, т.е как режим типо this_mode == 13, например

пробовал по умолчанию, как здесь

пробовал вызов по кнопке

пробовал выводить за main loop, пробовал в нем, даже (не смейтесь и не злитесь) в void setup

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

b707 пишет:

artur769 пишет:

я показал код

участок, который интересует - это участок, который в этот раз я назвал "default_city"

Артур, извините, но в этой "простыне" я копаться не стану. Изучать правила работы с миллис надо на простеньких примерах в 10-15 строк. Сделайте из своего кода такие примеры - их и будем обсуждать.

 

 

#define MODE 0
#define MAIN_LOOP 5

int sek = 0;

#define MODE_AMOUNT 10

int time1 = 1000;

unsigned long main_timer;

long previousMillis = 0;

boolean settings_mode, city, default_city = true, ONstate = true;
volatile boolean ir_flag;

int8_t this_mode = MODE;
int8_t mode = 0;

void setup() {
}
void loop() {
#if IR_RCT != 0
remoteTick();
#endif
mainLoop();
}
void mainLoop() {
  if (this_mode == 12) {

    digitalWrite (r1, LOW);
    digitalWrite (y1, LOW);
    digitalWrite (g1, LOW);
    digitalWrite (r2, LOW);
    digitalWrite (y2, LOW);
    digitalWrite (g2, LOW);
    digitalWrite (13, LOW);
  }

  if (ONstate) {

if (default_city){

    unsigned long currentMillis = millis();

    if (currentMillis - main_timer >= interval) {
      main_timer = currentMillis;
      digitalWrite(13, !digitalRead(13));
      if (digitalRead(13) == HIGH)
      {
        sek++;
        //*********************************************************//
        if (sek == 1)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        //****************************************************//
        if (sek == 25)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        if (sek == 30)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, HIGH);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        if (sek == 31)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, LOW);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        //***********************************************************//
        if (sek == 32)
        {
          digitalWrite (r1, LOW);
          digitalWrite (y1, HIGH);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
        **************тут другие команды по секундам**********
        if (sek == 77)
        {
          digitalWrite (r1, HIGH);
          digitalWrite (y1, HIGH);
          digitalWrite (g1, LOW);
          digitalWrite (r2, HIGH);
          digitalWrite (y2, LOW);
          digitalWrite (g2, LOW);
        }
       if (sek == 80)
        {
          sek = 0;   //обнуляем значение таймера
        }
      }
    }
  }
    if (this_mode == 1) {

      this_mode != 11;

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, LOW);
      digitalWrite (y2, LOW);
      digitalWrite (g2, HIGH);

    }

    if (this_mode == 2) {

      this_mode != 11;

      if (millis() - myTimer1 >= time1) {

        myTimer1 = millis();

        if (ledState == LOW) {

          ledState = HIGH;

        } else {

          ledState = LOW;
        }

        digitalWrite (r1, HIGH);
        digitalWrite (y1, LOW);
        digitalWrite (g1, LOW);
        digitalWrite (r2, LOW);
        digitalWrite (y2, LOW);
        digitalWrite (g2, HIGH);
        digitalWrite(g2, ledState);
      }
    }
    if (this_mode == 3) {

      digitalWrite (r1, HIGH);
      digitalWrite (y1, LOW);
      digitalWrite (g1, LOW);
      digitalWrite (r2, LOW);
      digitalWrite (y2, HIGH);
      digitalWrite (g2, LOW);

    }

    if (this_mode == 11) {

      this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

      digitalWrite(r1, LOW);
      digitalWrite(g1, LOW);
      digitalWrite(r2, LOW);
      digitalWrite(g2, LOW);

      if (millis() - myTimer1 >= time1) {

        myTimer1 = millis();

        if (ledState == LOW) {

          ledState = HIGH;

        } else {

          ledState = LOW;
        }
        digitalWrite(y1, ledState);
        digitalWrite(y2, ledState);
      }
    }
  }

}

#if IR_RCT != 0
void remoteTick() {
  if (IRLremote.available())  {
    auto data = IRLremote.read();
    IRdata = data.command;
    ir_flag = true;
  }
  if (ir_flag) {
    switch (IRdata) {
      case BUTT_1:
        if (settings_mode) {
          this_mode = 1;
        }
          break;
      case BUTT_2: if (settings_mode) {
          this_mode = 2;
        }
        break;
      case BUTT_3: if (settings_mode) {
          this_mode = 3;
        }
        else {
          city = !city;
        }
        break;
          ************ и др команды*****************
           case BUTT_0: if (settings_mode) {
          this_mode = 10;
        }
        else if (!settings_mode) {
          this_mode = 12;
        }
        break;

      case BUTT_STAR: ONstate = !ONstate;
        break;

      case BUTT_HASH: if (!settings_mode) {
          this_mode = 11;
        }
        break;
      case BUTT_OK: settings_mode = !settings_mode;
        break;
        }
    ir_flag = false;
  }
}

#endif

 

artur769
Offline
Зарегистрирован: 04.11.2018

да, с ним, или я так думаю, что с ним

я писал и так, как вы прочитали, типо 

if (oldmillis - millis () > 25000) {

digitalWrite (r1, HIGH);

......

digitalWrite (g2, LOW);

далее тем же способом по секундам варианты, а точнее, наверное, сказать фазы или шаги типо "красный - - : - - зеленый" "красный - - : - желтый -" "красный - - : красный - -" "красный желтый - : красный - -" "- - зеленый : красный - -". Но они не идут, все стоит на первой указанной позиции

b707 пишет:

artur769 пишет:

простите, но я не понимаю? то мало кода, то много

Скажите, что конкретно вам показать? Только default_city и объявление переменных?

Видимо я вас неправильно понял

Я прочитал вашу фразу

"Попробовал просто таймер типо вариант на 25 секунде if Millis - current mills > 25000 - ничего вообще не получается"

и понял ее так, что у вас проблемы с применением миллис.

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

Алекс, чему равно значение переменной interval и как она описана7

и вот еще любопытно - что вы этими строчками пытаетесь сказать????

     this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

b707 пишет:

Алекс, чему равно значение переменной interval и как она описана7

и вот еще любопытно - что вы этими строчками пытаетесь сказать????

     this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

 

Авторитетно убеждает компилятор, что this_mode ну точно никак не равна, и не может быть равна, потому что - так надо :)

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

Алекс, чему равно значение переменной interval и как она описана7

и вот еще любопытно - что вы этими строчками пытаетесь сказать????

     this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

 

 

вообще там 

if (millis() - previousMillis > 500) 

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

интервал такой 

const long interval = 1000; то есть секунда

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

artur769
Offline
Зарегистрирован: 04.11.2018

смешно:) только так и есть и не авторитетно))))

а вот вы бы помогли может? пожалуйста

что не так?

у меня на самом деле вариантов много, чего я сам понаписал - всех и не упомнить

показал этот, потому что он работает сам по себе, если его "не трогать"

DIYMan пишет:

b707 пишет:

Алекс, чему равно значение переменной interval и как она описана7

и вот еще любопытно - что вы этими строчками пытаетесь сказать????

     this_mode != 1;
      this_mode != 2;
      this_mode != 3;
      this_mode != 4;
      this_mode != 5;
      this_mode != 6;
      this_mode != 7;
      this_mode != 8;
      this_mode != 9;
      this_mode != 10;
      this_mode != 12;

 

Авторитетно убеждает компилятор, что this_mode ну точно никак не равна, и не может быть равна, потому что - так надо :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

artur769 пишет:

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

Знаешь почему не получилось? Потому что отсутствует знание основ.Лучшим вариантом для решения этой небольшой проблемы - будет начать чтение основ С++. Но, как показывает опыт, неофиты почему-то очень негативно относятся к таким советам.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

artur769 пишет:

а вот вы бы помогли может? пожалуйста

что не так?

Строчка this_mode != 11;  - это просто сравнение, причём - в никуда. Если ты хотел как-то изменить значение переменной, то оператор сравнения "!=" тут не подходит. Нужен оператор присваивания, проще говоря "=". Поскольку у тебя переменная this_mode принимает ограниченное кол-во известных режимов, то лучшим вариантом сбросить её так, чтобы она заведомо не соответствовала никакому из режимов - введение специального значения, заведомо неравного никакому из режимов. На примере:

#define UNKNOWN_MODE 255
byte this_mode = 1; // известный режим


....


this_mode = UNKNOWN_MODE; // сбросили на неизвестный режим

 

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

artur769 пишет:

показал этот, потому что он работает сам по себе, если его "не трогать"

Алекс, это строчки - бредятина. Если число равно 11, и так понятно. что оно не равно одному, двум, трем...

Что касается кода - напищите четко и подробно, что именно в нем неверно работает.