Опрераторы

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Такой вопрос, написал скетч, создал оператор FOR с циклом в нем и там же создал оператор IF, в котором прерывание BREAK. Собственно в чем вопрос, Функция BREAK подействует на FOR, через IF???

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

SSSRMaster пишет:

Такой вопрос, написал скетч, создал оператор FOR с циклом в нем и там же создал оператор IF, в котором прерывание BREAK. Собственно в чем вопрос, Функция BREAK подействует на FOR, через IF???

То есть, выйдет ли он из обоих операторов???

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

SSSRMaster пишет:

Функция BREAK подействует на FOR, через IF???

"Функция BREAK", если она здорова и нормально тренируется, должна пробить FOR через IF. Мы будем за неё болеть!

Два вопроса:

1. Что мешает проверить самому?
2. Код "совершенно секретный" или "особой важности", что здесь его показать нельзя?

solver
solver аватар
Offline
Зарегистрирован: 04.11.2017

SSSRMaster пишет:

SSSRMaster пишет:

Такой вопрос, написал скетч, создал оператор FOR с циклом в нем и там же создал оператор IF, в котором прерывание BREAK. Собственно в чем вопрос, Функция BREAK подействует на FOR, через IF???

То есть, выйдет ли он из обоих операторов???

Если лень попробовать, напиши на всякий случай BREAK 2 раза, один для IF, второй для FOR.

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

solver пишет:

напиши на всякий случай BREAK 2 раза, один для IF, второй для FOR.

+100500! И как я не додумался?

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

А их нужно последовательно писать или параллельно для увеличения пробивной силы?

5N62V
Offline
Зарегистрирован: 25.02.2016

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

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

GOTO разделывает ваш return как бог черепаху.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
5N62V
Offline
Зарегистрирован: 25.02.2016

sadman41 пишет:

GOTO разделывает ваш return как бог черепаху.

Ну, знаете-ли, грешно это, к запрещенным приемчикам прибегать. Не-по-па-нятиям! Вас ни разу к ответу за , прости меня Господи, GOTO не призывали?

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

5N62V пишет:

 прости меня Господи, GOTO

А що Ви имеете супротив goto?

5N62V
Offline
Зарегистрирован: 25.02.2016

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

А що Ви имеете супротив goto?

Меня возмущает отсутствие gosub

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

5N62V пишет:

Ну, знаете-ли, грешно это, к запрещенным приемчикам прибегать. Не-по-па-нятиям! Вас ни разу к ответу за , прости меня Господи, GOTO не призывали?

Да призывали как-то. Послал их jmp в ассемблерных листингах считать.

arduinec
Offline
Зарегистрирован: 01.09.2015

sadman41 пишет:

А их нужно последовательно писать или параллельно для увеличения пробивной силы?

Нужно написать цикл для многократного вызова BREAK :)

for (byte i=0; i<100; i++) break;

 

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

2 причины) Он капец какой длинный строк под 600))) и проблема в IRremout, то есть ик приемник не хочет работать как надо. Да и я один раз сюда выкладывал скетч, сайт мне его перевел, вот теперь думаю как бы 2 раз не накосячить) А по поводу проверки, я чет уже туплю после бесчисленных попыток решить проблему выхода из цикла и выполнить указанное действие при появлении данных на ик приемнике. Я попробую сейчас его выложить. Если не затупит)))

SSSRMaster
Offline
Зарегистрирован: 25.12.2017
#include "IRremote.h"                                // Подключаем библиотеку IRremote.h для работы я ик датчиком
IRrecv irrecv(12);                                   // Вывод для подключения ик датчика
decode_results results;                              // Переменная для получения данных с ик двтчика

#include <EEPROM.h>                                  // Подключаем библиотеку сохранения переменных в память ардуино
#include <Wire.h> 

#include <LiquidCrystal_I2C.h>                       // Подключаем библиотеку для LCD дисплея 
LiquidCrystal_I2C lcd(0x3F, 20, 4);                  // Указываем адрес, количество ячеек, количество строк

#include <iarduino_NeoPixel.h>                       // Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
iarduino_NeoPixel led(5,20);                         // Объявляем объект LED указывая (№ вывода Arduino к которому подключён модуль NeoPixel, количество используемых светодиодов)
uint8_t j;                                           // Объявляем переменную для хранения значения сдвига спектра цветов для всех светодиодов (от 0 до 255)
uint8_t k;                                           // Объявляем переменную для хранения положения сдвига спектра цвета для каждого светодиода на спектре j (зависит от количества светодиодов)
uint8_t r, g, b;                                     // Объявляем переменную для хранения цветов RGB для каждого светодиода
const uint8_t zy=5; 

int diod = 20;                                       // Количество светодиодов в цепи
int prew = 6;                                        // Вывод кнопки PREW
int next = 7;                                       // Вывод кнопки NEXT
int chl = 11;                                         // Вывод кнопки CH+
int chr = 10;                                        // Вывод кнопки CH-

int f=0;                                             // Значение переменной для работы с эффектами 

int x = EEPROM[0];                                   // Восстановление переменной цвета из цыкла
int y = EEPROM[1];                                   // Восстановление переменной из цыкла
int z = 0;
int x1 = EEPROM[2];                                  // Восстановление переменной эффекта из цыкла
int y1 = EEPROM[3];                                  // Восстановление переменной из цыкла
int zz = 0;                                          // Переменная для обновления дисплея
int pul = 0;                                         // Преременная для эффекта дорожка

int R = 0;                                           // Переменная для работы с красным цветом
int G = 0;                                           // Переменная для работы с зеленым цветом
int B = 0;                                           // Переменная для работы с синим цветом

int timer = EEPROM[4];                               // Восстановление переменной для временной паузы
 
int xxx = 1;                                         // Переменная для отключения яркости дисплея
int zumer = 13;                                      // Вывод для подключения зумера для звукового уведомления
int power = 2;                                       // Вывод для подключения мосфета в цепь питания
int tx = 0;                                          // Переменная для отключения всей схемы
int ty = EEPROM[5];                                  // Переменная для сравненя с переменной в цикле отключения
int c = 1;

int aaa = 0xFFA25D;
int bbb = 0xFFE21D;
int ccc = 0xFF629D;
int ddd = 0xFF22DD;
int eee = 0xFF02FD;
int fff = 0xFFA857;
int ggg = 0xFFE01F;
int hhh = 0xFF906F;
int iii = 0xFF9867;
int jjj = 0xFFB04F;



void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();                               // запускаем прием
  lcd.begin();                                       // Инициируем работу с модулем LCD дисплея  
  led.begin();                                       // Инициируем работу с модулем NeoPixel
  led.setColor(NeoPixelAll, 0, 0, 0);                // Выключаем случайно включенные светодиоды
  led.write();                                       // Отправляем данные о выключении
  pinMode(zumer, OUTPUT);                            // Указываем пин зумера как выход
  pinMode(power, OUTPUT);                            // Указываем пин мосфета как выход
  digitalWrite(power, HIGH);                         // Даем сигнал на мосфет для замыкания цепи питания 
  digitalWrite(zumer, HIGH);                         // Даем сигнал на зумер для уведомления о выполнении работы с мосфетом
  delay(150);                                        // Ожидание для удобства
  digitalWrite(zumer, LOW);
  delay(50);
  digitalWrite(zumer, HIGH);                         // Даем сигнал на зумер для уведомления о выполнении работы с мосфетом
  delay(150);                                        // Ожидание для удобства
  digitalWrite(zumer, LOW);// Выключаем зумер
  pinMode(prew, INPUT);                              // Указываем пин prew как вход
  pinMode(next, INPUT);                              // Указываем пин next как вход
  pinMode(chl, INPUT);                               // Указываем пин chl как вход
  pinMode(chr, INPUT);                               // Указываем пин chr как вход
  lcd.setCursor(9,0);                                // Выставляем курсор
  lcd.print("HI");                                   // Выводим текст
  delay(1000);                                       // Ожидание 
  lcd.setCursor(0,1);                                // Выставляем курсор
  lcd.print("THIS IS GABARIT LEDS");                 // Выводим текст
  delay(1000);                                       // Ожидание
  lcd.setCursor(5,2);                                // Выставляем курсор
  lcd.print("ANGEL EYES");                           // Выводим текст
  delay(5000);                                       // Ожидание
  lcd.clear();                                       // Очищаем дисплей
}

void loop(){
NEW:

  if(digitalRead (next) == HIGH){
    delay(500);
    zz = 0;
    x1 ++;
    dr1:
    if(digitalRead (next) == HIGH){
      delay(50);
      goto dr1;
    }
    goto NEW;
  }
  
  if(digitalRead (prew) == HIGH){
    delay(500);
    zz = 0;
    x1 --;
    dr2:
    if(digitalRead (next) == HIGH){
      delay(50);
      goto dr2;
    }
    goto NEW;
  }

  if(digitalRead (chr) == HIGH){
    delay(500);
    zz = 0;
    x ++;
    dr3:
    if(digitalRead (next) == HIGH){
      delay(50);
      goto dr3;
    }
    goto NEW;
  }
  
  if(digitalRead (chl) == HIGH){
    delay(500);
    zz = 0;
    x --;
    dr4:
    if(digitalRead (next) == HIGH){
      delay(50);
      goto dr4;
    }
    goto NEW;
  }

  if ( irrecv.decode( &results )) {
  if(results.value == 0xFFA25D || results.value == 0xFFE21D || 
     results.value == 0xFF629D || results.value == 0xFF22DD ||
     results.value == 0xFF02FD || results.value == 0xFFA857 ||
     results.value == 0xFFE01F || results.value == 0xFF906F ||
     results.value == 0xFF9867 || results.value == 0xFFB04F){
      Serial.println("A");
      Serial.println(results.value);
    switch ( results.value ) {
    case 0xFFA25D:
        x --;
        zz = 0;
        break;
    case 0xFFE21D:
        x ++;
        zz = 0;
        break;
    case 0xFF629D:
    if(x == 0){
      x = random (1, 14);
      x1 = random (1, 8);
    }
    else{
      x  = 0;
      x1 = 0;
    }
    zz = 0;
        break;
    case 0xFF22DD:
        x1 --;
        zz = 0;
        break;
    case 0xFF02FD:
        x1 ++;
        zz = 0;
        break;
    case 0xFFA857:
        timer +=10;
        zz = 0;
        break;
    case 0xFFE01F:
        timer -=10;
        zz = 0;
        break;
    case 0xFF906F:
        if(xxx == 0){
          xxx = 1;
          lcd.backlight();
          delay(100);
        }
        else{
          xxx = 0;
          lcd.noBacklight();
          delay(100);
        }
        break;
     case 0xFF9867:
        ty -= 10;
        if(ty <= 10){
          ty = 10;
        }
        tx = ty;
        zz = 0;
        break;
     case 0xFFB04F:
        ty += 10;
        if(ty >= 990){
          ty = 990;
        }
        tx = ty;
        zz = 0;
        break;
    }
  }
  irrecv.resume(); // принимаем следующую команду
  }
  
  EEPROM[0] = x;
  EEPROM[1] = y;
  EEPROM[2] = x1;
  EEPROM[3] = y1;
  EEPROM[4] = timer;
  EEPROM[5] = ty;

  if(x == 0){
    x1 = 0;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");
  }else{
    tx = ty;
    c = 1;
  }

  if(timer <= 10){
    timer = 10;
  }
  if(timer >= 250){
    timer = 250;
  }

  if(zz == 0){
    tx = ty;
    zz = 1;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");
  }
  if(x == 0){
    lcd.setCursor(3,3);
    lcd.print("NO");
  }

 if(x>=15){
    x=3;
  }
  if(x<=0){
    x=0;
  }
  switch(x){
    case 0:
    R = 0;
    G = 0;
    B = 0;
    AllLow();
    break;
    case 1:
    lcd.setCursor(3,2);
    lcd.print("RANDOM");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    break;
    case 2:
    lcd.setCursor(3,2);
    lcd.print("WHITE");
    R = 200;
    G = 200;
    B = 200;
    break;
    case 3:
    lcd.setCursor(3,2);
    lcd.print("RED");
    R = 255;
    G = 0;
    B = 0;
    break;
    case 4:
    lcd.setCursor(3,2);
    lcd.print("ORANGE");
    R = 255;
    G = 127;
    B = 0;
    break;
    case 5:
    lcd.setCursor(3,2);
    lcd.print("YELLOW");
    R = 255;
    G = 255;
    B = 0;
    break;
    case 6:
    lcd.setCursor(3,2);
    lcd.print("GREEN-1");
    R = 127;
    G = 255;
    B = 0;
    break;
    case 7:
    lcd.setCursor(3,2);
    lcd.print("GREEN-2");
    R = 0;
    G = 255;
    B = 0;
    break;
    case 8:
    lcd.setCursor(3,2);
    lcd.print("GREEN-3");
    R = 0;
    G = 255;
    B = 127;
    break;
    case 9:
    lcd.setCursor(3,2);
    lcd.print("BLUE-1");
    R = 0;
    G = 255;
    B = 255;
    break;
    case 10:
    lcd.setCursor(3,2);
    lcd.print("BLUE-2");
    R = 0;
    G = 127;
    B = 255;
    break;
    case 11:
    lcd.setCursor(3,2);
    lcd.print("BLUE-3");
    R = 0;
    G = 0;
    B = 255;
    break;
    case 12:
    lcd.setCursor(3,2);
    lcd.print("PURPLE");
    R = 127;
    G = 0;
    B = 255;
    break;
    case 13:
    lcd.setCursor(3,2);
    lcd.print("PINK-1");
    R = 255;
    G = 0;
    B = 255;
    break;
    case 14:
    lcd.setCursor(3,2);
    lcd.print("PINK-2");
    R = 255;
    G = 0;
    B = 127;
    break;
 }
  
  if(x > 0){
  if(x1>=9){
    x1=9;
  }
  if(x1<=0){
    x1=0;
  }
  switch(x1){
    case 0:
    lcd.setCursor(3, 3);
    lcd.print("HIGH");
    break;
    case 1:
    lcd.setCursor(3, 3);
    lcd.print("H -L");
    break;
    case 2:
    lcd.setCursor(3, 3);
    lcd.print("H>-L");
    break;
    case 3:
    lcd.setCursor(3, 3);
    lcd.print("H>-L>");
    break;
    case 4:
    lcd.setCursor(3, 3);
    lcd.print("H>-L<");
    break;
    case 5:
    lcd.setCursor(3, 3);
    lcd.print("RAND-BACK");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    break;
    case 6:
    lcd.setCursor(3, 3);
    lcd.print("RAND-PIXE");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    break;
    case 7:
    lcd.setCursor(3, 3);
    lcd.print("RUN");
    break;
    case 8:
    lcd.setCursor(3, 3);
    lcd.print("RADUGA");
    R = 255;
    G = 0;
    B = 255;
    break;
    case 9:
    lcd.setCursor(3, 3);
    lcd.print("POLICE");
    R = 255;
    G = 0;
    B = 255;
    break;
  }
}

 if(zz == 0){
    zz = 1;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");
  }
switch(x1){
  case 0:
  for(f = 0; f<diod; f++){  // влк
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
         Serial.println("D");
         Serial.println(results.value);
         goto back0;
      }
    }
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
       goto back0;
       }
    led.setColor(f, R,G,B); 
    led.write();
    delay(timer);
  }
back0:
  break;
  case 1:
  led.setColor(NeoPixelAll, R, G, B);
  led.write();
  delay(timer);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
  goto back2;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
         Serial.println("E");
         Serial.println(results.value);
         goto back2;
      }
    }
  led.setColor(NeoPixelAll, 0, 0, 0);
  led.write();
  delay(timer);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
  goto back2;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
         Serial.println("F");
         Serial.println(results.value);
         goto back2;
      }
    }
back2:
  break;
  case 2:
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
    break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
          Serial.println(results.value);
        break;
      }
    }
  }
  f = 0;
  led.setColor(NeoPixelAll, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
  break;
  case 3:
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back3;
      }
    }
  }
  f = 0;
  for(f = 0; f<diod; f++){
  led.setColor(f, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back3;
      }
    }
  }
back3:
  break;
  case 4:
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back4;
      }
    }
  }
  for(f = diod; f>=0; f--){
  led.setColor(f, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back4;
      }
    }
  }
  back4:
  break;
  case 5:
  if(f < diod){
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back5;
      }
    }
  }
 }else{
  for(f = diod; f>=0; f--){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      break;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back5;
      }
    }
  }
}
back5:
  break;
  case 6:
  f = random(0, diod);
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(50);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
    goto back6;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
    if(results.value == aaa || results.value == bbb || 
       results.value == ccc || results.value == ddd ||
       results.value == eee || results.value == fff ||
       results.value == ggg || results.value == hhh ||
       results.value == iii || results.value == jjj){
      goto back6;
    }
  }
 back6:
  break;
  case 7:
  j++;                                             //  Смещаем спектр цветов для всех светодиодов
    for(uint16_t i=0; i<led.count(); i++){           //  Проходим по всем светодиодам
        k=((uint16_t)(i*256/led.count())+j);         //  Определяем положение очередного светодиода на смещённом спектре цветов
        if(k<85){
          if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
            break;
          }
          if ( irrecv.decode( &results )) { // если данные пришли
             if(results.value == aaa || results.value == bbb || 
                results.value == ccc || results.value == ddd ||
                results.value == eee || results.value == fff ||
                results.value == ggg || results.value == hhh ||
                results.value == iii || results.value == jjj){
                goto back7;
             }
          }
          b=0; r=k*3; g=255-r;
          }
          else                                       //  Перелив от зелёного к красному, через жёлтый
        if(k<170){
          if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back7;
      }
    }
          if ( irrecv.decode( &results )) { // если данные пришли
      goto back7;
   }
          k-=85;  g=0; b=k*3; r=255-b;
          }
          else{                                      //  Перелив от красного к синему  , через фиолетовый
            if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
              break;
            }
            if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back7;
      }
    }
          k-=170; r=0; g=k*3; b=255-g;
          }                                          //  Перелив от синего   к зелёному, через голубой
        led.setColor(i, r,g,b);                      //  Устанавливаем выбранный цвет для очередного светодиода
    }   
    led.write();                                     //  Записываем цвета всех светодиодов
    delay(timer);                                        //  Устанавливаем задержку
    back7:
  break;
  case 8:
  led.setColor(NeoPixelAll, R,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
 if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
   goto back8;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back8;
      }
    }
  led.setColor(NeoPixelAll, 0,0,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
    goto back8;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        goto back8;
      }
    }
  back8:
  break;
  case 9:
  if(pul < 0){
    pul = diod;
  }
  for(f = 0; f < pul; f ++){
    led.setColor(f, R, G, B);
    led.write();
    led.setColor(f, 0, 0, 0);
    led.write();
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
      pul = diod;
      break;
    }
  if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
        pul = diod;
        goto back9;
      }
    }
    delay(timer);
  }
  led.setColor(f, R, G, B);
  pul --;
  back9:
  break;
}
}

void AllLow(){
  lcd.setCursor(3, 2);
  lcd.print("LOW");
  if(c == 1){    //выкл
  for(f=0; f<diod; f++){
    if ( irrecv.decode( &results )) { // если данные пришли
      Serial.println("B");
         Serial.println(results.value);
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
         Serial.println("B");
         Serial.println(results.value);
        break;
      }
    }
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
       break;
       }
     led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
     led.write();
     delay(timer);
     c = 0;
  }
  }
  else{
    tx --;
    delay(500);
    if ( irrecv.decode( &results )) { // если данные пришли
      if(results.value == aaa || results.value == bbb || 
         results.value == ccc || results.value == ddd ||
         results.value == eee || results.value == fff ||
         results.value == ggg || results.value == hhh ||
         results.value == iii || results.value == jjj){
         Serial.println("C");
         Serial.println(results.value);
        goto back;
      }
    }
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH){
       goto back;
       }
    delay(500);
    if(tx == 0){
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(power, LOW);
    }
  }
back:;
}

 

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Собственно проблема в том, этот скетч для ангельских глазок на диодах WS2812B, а дело в том, что инфра красный приемник если не устанавливать IF с отсечением ненужных сигналов, не выполняет вычитание сложение, и т. п., но видно по меганию диодов, что он видит пульт, а работает с отсечение и всеми положенными ему операциями, только в основном цикле loop. А если дописать отсечение в другой ветке цикла допустим nam3 (); там он вообще не реагирует.

5N62V
Offline
Зарегистрирован: 25.02.2016

У Вас пиццот раз встречается 

517   if ( irrecv.decode( &results )) { // если данные пришли
518       if(results.value == aaa || results.value == bbb ||
519          results.value == ccc || results.value == ddd ||
520          results.value == eee || results.value == fff ||
521          results.value == ggg || results.value == hhh ||
522          results.value == iii || results.value == jjj)

думаю, стоило бы вынести это в функцию, код станет более читабельным.

Конструкция

094 NEW:
095  
096   if(условие){...;...;
105     goto NEW;
106   }

по идее должна быть записана как 

094

while(условие){

...;

...;

}

 
 
5N62V
Offline
Зарегистрирован: 25.02.2016

sadman41 пишет:

GOTO разделывает ваш return как бог черепаху.

Как в воду глядели.

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

5N62V пишет:

Меня возмущает отсутствие gosub

В великом языке INTERCAL была полная противоположность GOTO -  оператор COMEFROM ("получить управление ИЗ"). Вот его мне иногда реально не хватает :))))

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

SSSRMaster пишет:

Собственно проблема в том, этот скетч для ангельских глазок на диодах WS2812B, а дело в том, что инфра красный приемник если не устанавливать IF с отсечением ненужных сигналов, не выполняет вычитание сложение, и т. п., но видно по меганию диодов, что он видит пульт, а работает с отсечение и всеми положенными ему операциями, только в основном цикле loop. А если дописать отсечение в другой ветке цикла допустим nam3 (); там он вообще не реагирует.

Собственно крупные проблемы у вас в delay(), насиловании EEPROM (он еще жив?) и субпространственных прыжках внутри switch() с помощью GOTO. Ну и мелких не счесть.

arduinec
Offline
Зарегистрирован: 01.09.2015

SSSRMaster пишет:

Он капец какой длинный строк под 600)))

Здесь скетчи на 5 тысяч строк выкладывают: http://arduino.ru/forum/proekty/transistor-tester-arduino

SSSRMaster пишет:

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

Операторы goto back0; не нужны, вместо них можно сразу писать break;

Информация из справочника на сайте: http://arduino.ru/Reference/Break

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

вот это неправильно

047 int aaa = 0xFFA25D;
048 int bbb = 0xFFE21D;
049 int ccc = 0xFF629D;
050 int ddd = 0xFF22DD;
051 int eee = 0xFF02FD;
052 int fff = 0xFFA857;
053 int ggg = 0xFFE01F;
054 int hhh = 0xFF906F;
055 int iii = 0xFF9867;
056 int jjj = 0xFFB04F;
 

тип не соответствует константам.  Лучше замени это и это 

144   if ( irrecv.decode( &results )) {
145   if(results.value == 0xFFA25D || results.value == 0xFFE21D ||
146      results.value == 0xFF629D || results.value == 0xFF22DD ||
147      results.value == 0xFF02FD || results.value == 0xFFA857 ||
148      results.value == 0xFFE01F || results.value == 0xFF906F ||
149      results.value == 0xFF9867 || results.value == 0xFFB04F){
 

на 

const long IRCodesArray[] = { 0xFFA25D, 0xFFE21D, 0xFF629D, 0xFF22DD, 0xFF02FD, 0xFFA857, 0xFFE01F, 0xFF906F, 0xFF9867, 0xFFB04F };

short getIRCodeIndex(long value)
{
	short size = sizeof(IRCodesArray) / sizeof(long);

	for (short i = 0; i < size; i++)
	{
		if (IRCodesArray[i] == value) return i;
	}
	return -1;
}

если вернулся индекс меньше 0, код в массиве не найден, если больше или равно - строй свои switch-и с case-ами. 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

А вапще говнокод, канешна, жуткий.... 

Rootware
Offline
Зарегистрирован: 11.01.2018

Оператов break, на мой взгляд, в любом языке означает (дословно) прервать. Это как бы подразумевает выход либо из while/for, либо из switch/case.

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

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

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

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

EEPROM работает) delay я применяю на уровне своих знаний) зная что задержку можно только так сделать) Я не углублялся в познания программирования, для меня это муть, вс со временем, чем дальше иду, тем больше нового узнаю.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

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

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

SSSRMaster пишет:

EEPROM работает) 

Ничего страшного, не перживайте, это скоро пройдёт.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

break выдает ошибку, говорит могу выйти только из циклов While for Do. из If не могу. Сорян

Хотя я чуть подзаморочусь и подумаю в чем пробл. Спасибо. за ссылку.

 

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

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

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

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

Rootware
Offline
Зарегистрирован: 11.01.2018

SSSRMaster пишет:

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

Вы даже основ не знаете. Какие вам факты ещё нужны?

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Ну естественно я не прогаммист, мне дано железо, могу из говна и палом что то сделать, программирование для меня муть страшная, но интересная. По этому я спрашиваю. Какие основы? 

 

Rootware
Offline
Зарегистрирован: 11.01.2018

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

С моим IQ == 56 он был осознан легко. Рекомендую.

5N62V
Offline
Зарегистрирован: 25.02.2016

SSSRMaster пишет:

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

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

 Вам крупно повезет, если кто-то возьмется Ваш код править, тем более , что описание ТЗ Вы не предоставили. А из ваших не совсем каноничных записей понять предполагаемую  логику работы устройства затруднительно. Я так думаю(с)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

SSSRMaster пишет:
Ну естественно я не прогаммист, мне дано железо, могу из говна и палом что то сделать, программирование для меня муть страшная, но интересная. По этому я спрашиваю. Какие основы?
КАк это напоминает. Я писец какой крутой чиню телевизоры за раз, но как пошли биполярные транзисторы, так хоть увольняйся. Так вот если вы не освоите язык Си и среду Ардуино , и главное как писать простые программы, то говорить мне дано железо, можно только бабушкам. Год сейчас уже не тот и железо не то, что бы работать с ним без программирования

b707
Онлайн
Зарегистрирован: 26.05.2017

SSSRMaster пишет:

Ну естественно я не прогаммист

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

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

СПАСИБО БОЛЬШОЕ!!! Рад что есть люди, которые прошли весь путь программирования и помогают) Больше бы таких) Еще раз спасибо!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

SSSRMaster. Вы что тупой. Есть две книги- http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf  и https://vk.com/doc16756779_228187070?hash=88e5b6ccd4f822602c&dl=ccc12f550fe4ac896f

Вот их надо знать как закон Ома. А потом уже садиться за поектирования более менее сложных систем. Скачайте, купите и читайте по полного просветления. Считайте что это Старый и Новый Завет . И у вас не будет goto , там где достаточно return.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Ух как бомбит) Ладно, будем раздираться с проблемой как получится) Спасибо за помощь)

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

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

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

Да, чего вы все к гоуту привязались? То им делэй не нравится, то гоуту - что за дискриминация?!?

Пошёл писать устав "Общества защиты прав операторов перехода!" 

b707
Онлайн
Зарегистрирован: 26.05.2017

SSSRMaster пишет:

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

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

Ну и вообще весь код можно сократить строк на 200 - тогда и ошибки будет легче искать.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Какую функцию выполняет число после return X ? Вот полазил, не нашел.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

расходимся ....

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

SSSRMaster пишет:

Какую функцию выполняет число после return X ? Вот полазил, не нашел.

Полазьте ещё. Под диваном посмотрите.

Хотя, ... форма допуска у Вас какая? А то функция секретная, её кому попало не раскрывают.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017
Это был самый первый план, который я написал, исправил местами на return, проблема снова в том, что при работе в цикле эффектов, это разделы num1 num2 num3 num4 и т.д., он видит пульт, светодиоды на несколько миллисекунд замирают и снова продолжает крутить эту же функцию и лишь в тот момент когда она закончилась или началась, он понимает пульт и меняет что требую.
Простые кнопки, которые подключены к плате он видит всегда, и делале что нужно. 


#include "IRremote.h"                                // Подключаем библиотеку IRremote.h для работы я ик датчиком
IRrecv irrecv(12);                                   // Вывод для подключения ик датчика
decode_results results;                              // Переменная для получения данных с ик двтчика

#include <EEPROM.h>                                  // Подключаем библиотеку сохранения переменных в память ардуино
#include <Wire.h> 

#include <LiquidCrystal_I2C.h>                       // Подключаем библиотеку для LCD дисплея 
LiquidCrystal_I2C lcd(0x3F, 20, 4);                  // Указываем адрес, количество ячеек, количество строк

#include <iarduino_NeoPixel.h>                       // Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
iarduino_NeoPixel led(5,10);                         // Объявляем объект LED указывая (№ вывода Arduino к которому подключён модуль NeoPixel, количество используемых светодиодов)
uint8_t j;                                           // Объявляем переменную для хранения значения сдвига спектра цветов для всех светодиодов (от 0 до 255)
uint8_t k;                                           // Объявляем переменную для хранения положения сдвига спектра цвета для каждого светодиода на спектре j (зависит от количества светодиодов)
uint8_t r, g, b;                                     // Объявляем переменную для хранения цветов RGB для каждого светодиода
const uint8_t zy=5; 

int diod = 20;                                       // Количество светодиодов в цепи
int prew = 6;                                        // Вывод кнопки PREW
int next = 7;                                        // Вывод кнопки NEXT
int chl = 11;                                        // Вывод кнопки CH+
int chr = 10;                                        // Вывод кнопки CH-
int set = 8;

int f=0;                                             // Значение переменной для работы с эффектами 

int x = EEPROM[0];                                   // Восстановление переменной цвета из цыкла
int y = EEPROM[1];                                   // Восстановление переменной из цыкла
int z = 0;
int x1 = EEPROM[2];                                  // Восстановление переменной эффекта из цыкла
int y1 = EEPROM[3];                                  // Восстановление переменной из цыкла
int zz = 0;                                          // Переменная для обновления дисплея
int pul = 0;                                         // Преременная для эффекта дорожка
int c = 1;
int rel = 0;

int R = 0;                                           // Переменная для работы с красным цветом
int G = 0;                                           // Переменная для работы с зеленым цветом
int B = 0;                                           // Переменная для работы с синим цветом

int timer = EEPROM[4];                               // Восстановление переменной для временной паузы
 
int xxx = 1;                                         // Переменная для отключения яркости дисплея
int zumer = 13;                                      // Вывод для подключения зумера для звукового уведомления
int power = 2;                                       // Вывод для подключения мосфета в цепь питания
int tx = 0;                                          // Переменная для отключения всей схемы
int ty = EEPROM[5];                                  // Переменная для сравненя с переменной в цикле отключения

void setup(){
  irrecv.enableIRIn();                               // запускаем прием
  lcd.begin();                                       // Инициируем работу с модулем LCD дисплея  
  led.begin();                                       // Инициируем работу с модулем NeoPixel
  led.setColor(NeoPixelAll, 0, 0, 0);                // Выключаем случайно включенные светодиоды
  led.write();                                       // Отправляем данные о выключении
  pinMode(zumer, OUTPUT);                            // Указываем пин зумера как выход
  pinMode(power, OUTPUT);                            // Указываем пин мосфета как выход
  digitalWrite(power, HIGH);                         // Даем сигнал на мосфет для замыкания цепи питания 
  digitalWrite(zumer, HIGH);                         // Даем сигнал на зумер для уведомления о выполнении работы с мосфетом
  delay(150);                                        // Ожидание для удобства
  digitalWrite(zumer, LOW);
  delay(50);
  digitalWrite(zumer, HIGH);                         // Даем сигнал на зумер для уведомления о выполнении работы с мосфетом
  delay(150);                                        // Ожидание для удобства
  digitalWrite(zumer, LOW);                          // Выключаем зумер
  pinMode(prew, INPUT);                              // Указываем пин prew как вход
  pinMode(next, INPUT);                              // Указываем пин next как вход
  pinMode(chl, INPUT);                               // Указываем пин chl как вход
  pinMode(chr, INPUT);                               // Указываем пин chr как вход
  pinMode(set, INPUT);                            // Указываем пин menu как вход
  lcd.setCursor(9,0);                                // Выставляем курсор
  lcd.print("HI");                                   // Выводим текст
  delay(1000);                                       // Ожидание 
  lcd.setCursor(0,1);                                // Выставляем курсор
  lcd.print("THIS IS GABARIT LEDS");                 // Выводим текст
  delay(1000);                                       // Ожидание
  lcd.setCursor(5,2);                                // Выставляем курсор
  lcd.print("ANGEL EYES");                           // Выводим текст
  delay(5000);                                       // Ожидание
  lcd.clear();                                       // Очищаем дисплей
}

void loop(){
  NEW:;
  
  if(zz == 0){
    zz = 1;
    tx = ty;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");
    
    if(rel == 0){
      lcd.setCursor(0,0);
      lcd.print("C~A~");
    }
    else{
      lcd.setCursor(0,0);
      lcd.print("TIME");
    }
  }
  
  

  if(digitalRead (set) == HIGH){
    delay(150);
    if(rel == 0){
      rel = 1;
      zz = 0;
      goto NEW;
    }
    if(rel == 1){
      rel = 0;
      zz = 0;
      goto NEW;
    }
  }
  
  switch(rel){
    case 0:
    if(digitalRead (next) == HIGH){
      delay(150);
      zz = 0;
      x1 ++;
      goto NEW;
    }
    if(digitalRead (prew) == HIGH){
      delay(150);
      zz = 0;
      x1 --;
      goto NEW;   
    }
    if(digitalRead (chr) == HIGH){
      delay(150);
      zz = 0;
      x ++;
      goto NEW;
    }
    if(digitalRead (chl) == HIGH){
      delay(150);
      zz = 0;
      x --;
      goto NEW;
    }
    break;
    case 1:
    if(digitalRead (next) == HIGH){
      delay(150);
      zz = 0;
      timer += 10;
      if(timer >= 250){
        timer = 250;
      }
      goto NEW;
    }
    if(digitalRead (prew) == HIGH){
      delay(150);
      zz = 0;
      timer -= 10;
      if(timer <= 10){
        timer = 10;
      }
      goto NEW;   
    }
    if(digitalRead (chr) == HIGH){
      delay(150);
      zz = 0;
      ty += 10;
        if(ty >= 990){
          ty = 990;
        }
        tx = ty;
      goto NEW;
    }
    if(digitalRead (chl) == HIGH){
      delay(150);
      zz = 0;
      ty -= 10;
        if(ty <= 10){
          ty = 10;
        }
        tx = ty;
      goto NEW;
    }
    break;
  }
  
  EEPROM[0] = x;
  EEPROM[1] = y;
  EEPROM[2] = x1;
  EEPROM[3] = y1;
  EEPROM[4] = timer;
  EEPROM[5] = ty;

  if(x == 0){
    x1 = 0;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");

    if(rel == 0){
      lcd.setCursor(0,0);
      lcd.print("C~A~");
    }
    else{
      lcd.setCursor(0,0);
      lcd.print("TIME");
    }
    
    if(tx == 0){
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(power, LOW);
    }
  }else{
    tx = ty;
    c = 1;
  }

 
  if(x == 0){
    lcd.setCursor(3,3);
    lcd.print("NO");
  }
  if(x>=15){
    x=3;
  }
  
  if(x<=0){
    x=0;
  }
  switch(x){
    case 0:
    R = 0;
    G = 0;
    B = 0;
    allLOW();
    break;
    case 1:
    lcd.setCursor(3,2);
    lcd.print("RANDOM");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    break;
    case 2:
    lcd.setCursor(3,2);
    lcd.print("WHITE");
    R = 200;
    G = 200;
    B = 200;
    break;
    case 3:
    lcd.setCursor(3,2);
    lcd.print("RED");
    R = 255;
    G = 0;
    B = 0;
    break;
    case 4:
    lcd.setCursor(3,2);
    lcd.print("ORANGE");
    R = 255;
    G = 127;
    B = 0;
    break;
    case 5:
    lcd.setCursor(3,2);
    lcd.print("YELLOW");
    R = 255;
    G = 255;
    B = 0;
    break;
    case 6:
    lcd.setCursor(3,2);
    lcd.print("GREEN-1");
    R = 127;
    G = 255;
    B = 0;
    break;
    case 7:
    lcd.setCursor(3,2);
    lcd.print("GREEN-2");
    R = 0;
    G = 255;
    B = 0;
    break;
    case 8:
    lcd.setCursor(3,2);
    lcd.print("GREEN-3");
    R = 0;
    G = 255;
    B = 127;
    break;
    case 9:
    lcd.setCursor(3,2);
    lcd.print("BLUE-1");
    R = 0;
    G = 255;
    B = 255;
    break;
    case 10:
    lcd.setCursor(3,2);
    lcd.print("BLUE-2");
    R = 0;
    G = 127;
    B = 255;
    break;
    case 11:
    lcd.setCursor(3,2);
    lcd.print("BLUE-3");
    R = 0;
    G = 0;
    B = 255;
    break;
    case 12:
    lcd.setCursor(3,2);
    lcd.print("PURPLE");
    R = 127;
    G = 0;
    B = 255;
    break;
    case 13:
    lcd.setCursor(3,2);
    lcd.print("PINK-1");
    R = 255;
    G = 0;
    B = 255;
    break;
    case 14:
    lcd.setCursor(3,2);
    lcd.print("PINK-2");
    R = 255;
    G = 0;
    B = 127;
    break;
 }
   
  if(zz == 0){
    tx = ty;
    zz = 1;
    lcd.clear();
    lcd.setCursor(17,0);
    lcd.print(tx);
    lcd.setCursor(13,0);
    lcd.print("OFF");
    lcd.setCursor(14,1);
    lcd.print("- VL +");
    lcd.setCursor(0,1);
    lcd.print("T~");
    lcd.setCursor(3,1);
    lcd.print(timer);
    lcd.setCursor(0,2);
    lcd.print("C~");
    lcd.setCursor(14,2);
    lcd.print("- CH +");
    lcd.setCursor(0,3);
    lcd.print("A~");
    lcd.setCursor(14,3);
    lcd.print("|<<>>|");

    if(rel == 0){
      lcd.setCursor(0,0);
      lcd.print("C~A~");
    }
    else{
      lcd.setCursor(0,0);
      lcd.print("TIME");
    }
  }
  
  if(x > 0){
  
  if(x1>=9){
    x1=9;
  }
  if(x1<=0){
    x1=0;
  }
  
  switch(x1){
    case 0:
    lcd.setCursor(3, 3);
    lcd.print("HIGH");
    LHIGH();
    break;
    case 1:
    lcd.setCursor(3, 3);
    lcd.print("H -L");
    nam1();
    break;
    case 2:
    lcd.setCursor(3, 3);
    lcd.print("H>-L");
    nam2();
    break;
    case 3:
    lcd.setCursor(3, 3);
    lcd.print("H>-L>");
    nam3();
    break;
    case 4:
    lcd.setCursor(3, 3);
    lcd.print("H>-L<");
    nam4();
    break;
    case 5:
    lcd.setCursor(3, 3);
    lcd.print("RAND-BACK");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    nam5();
    break;
    case 6:
    lcd.setCursor(3, 3);
    lcd.print("RAND-PIXE");
    R = random(0, 255);
    G = random(0, 255);
    B = random(0, 255);
    nam6();
    break;
    case 7:
    lcd.setCursor(3, 3);
    lcd.print("RUN");
    nam8();
    break;
    case 8:
    lcd.setCursor(3, 3);
    lcd.print("RADUGA");
    R = 255;
    G = 0;
    B = 255;
    raduga();
    break;
    case 9:
    lcd.setCursor(3, 3);
    lcd.print("POLICE");
    R = 255;
    G = 0;
    B = 255;
    nam7();
    break;
  }
}
}

void allLOW(){
  lcd.setCursor(3, 2);
  lcd.print("LOW");
  if(c == 1){    //выкл
  for(f=0; f<diod; f++){
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
       return;
       }
     led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
     led.write();
     delay(timer);
     c = 0;
  }
  }
  else{
    tx --;
    delay(500);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
      return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
    }
    delay(500);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
      return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
    }
    if(tx == 0){
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(zumer, HIGH);
      delay(250);
      digitalWrite(zumer, LOW);
      delay(500);
      digitalWrite(power, LOW);
    }
  }
}

void LHIGH(){
  for(f = 0; f<diod; f++){
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
    }
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
       return;
       }
    led.setColor(f, R,G,B); 
    led.write();
    delay(timer);
  }
}

void nam1(){
  led.setColor(NeoPixelAll, R, G, B);
  led.write();
  delay(timer);
  led.setColor(NeoPixelAll, 0, 0, 0);
  led.write();
  delay(timer);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
  return;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
}

void nam2(){
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
  f = 0;
  led.setColor(NeoPixelAll, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
}

void nam3(){
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
  f = 0;
  for(f = 0; f<diod; f++){
  led.setColor(f, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
}

void nam4(){
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
  for(f = diod; f>=0; f--){
  led.setColor(f, 0,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
}

void nam5(){
  if(f < diod){
  for(f = 0; f<diod; f++){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  }
 }else{
  for(f = diod; f>=0; f--){
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(timer);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
    return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
    }
   }
  }
}

void nam6(){
  f = random(0, diod);
  led.setColor(f, R,G,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
    led.write();
    delay(50);
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
      return;
    }
    if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
}

void raduga(){
    j++;                                             //  Смещаем спектр цветов для всех светодиодов
    for(uint16_t i=0; i<led.count(); i++){           //  Проходим по всем светодиодам
        k=((uint16_t)(i*256/led.count())+j);         //  Определяем положение очередного светодиода на смещённом спектре цветов
        if(k<85){
          if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
          return;
          }
          if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
          b=0; r=k*3; g=255-r;
          }
          else                                       //  Перелив от зелёного к красному, через жёлтый
        if(k<170){
          if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
          return;
          }
          if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
          k-=85;  g=0; b=k*3; r=255-b;
          }
          else{                                      //  Перелив от красного к синему  , через фиолетовый
            if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
            return;
            }
            if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
          k-=170; r=0; g=k*3; b=255-g;
          }                                          //  Перелив от синего   к зелёному, через голубой
        led.setColor(i, r,g,b);                      //  Устанавливаем выбранный цвет для очередного светодиода
    }   
    led.write();                                     //  Записываем цвета всех светодиодов
    delay(zy);                                        //  Устанавливаем задержку
}

void nam7(){
  led.setColor(NeoPixelAll, R,0,0);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
 if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
  return;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
  led.setColor(NeoPixelAll, 0,0,B);                       //  Устанавливаем красный цвет для 0 светодиода (0,R,G,B)
  led.write();
  delay(timer);
  if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
  return;
  }
  if ( irrecv.decode( &results )) { // если данные пришли
      pult();
      return;
   }
}

void nam8(){
    if(pul < 0){
    pul = diod;
  }
  for(f = 0; f < pul; f ++){
    led.setColor(f, R, G, B);
    led.write();
    led.setColor(f, 0, 0, 0);
    led.write();
    if(digitalRead(chl) == HIGH || digitalRead(chr) == HIGH || digitalRead(prew) == HIGH || digitalRead(next) == HIGH || digitalRead(set) == HIGH){
      return;
    }
  if ( irrecv.decode( &results )) { // если данные пришли
     pult();
     return;
   }
    delay(timer);
  }
  led.setColor(f, R, G, B);
  pul --;
}

void pult(){
  if(results.value == 0xFFA25D || results.value == 0xFFE21D || 
     results.value == 0xFF629D || results.value == 0xFF22DD ||
     results.value == 0xFF02FD || results.value == 0xFFA857 ||
     results.value == 0xFFE01F || results.value == 0xFF906F ||
     results.value == 0xFF9867 || results.value == 0xFFB04F){
    switch ( results.value ) {
    case 0xFFA25D:
        x --;
        zz = 0;
        break;
    case 0xFFE21D:
        x ++;
        zz = 0;
        break;
    case 0xFF629D:
    if(x == 0){
      x = random (1, 14);
      x1 = random (1, 8);
    }
    else{
      x  = 0;
      x1 = 0;
    }
    zz = 0;
        break;
    case 0xFF22DD:
        x1 --;
        zz = 0;
        break;
    case 0xFF02FD:
        x1 ++;
        zz = 0;
        break;
    case 0xFFA857:
        timer +=10;
        if(timer >= 250){
          timer = 250;
        }
        zz = 0;
        break;
    case 0xFFE01F:
        timer -=10;
        if(timer <= 10){
          timer = 10;
        }
        zz = 0;
        break;
    case 0xFF906F:
        if(xxx == 0){
          xxx = 1;
          lcd.backlight();
          delay(100);
        }
        else{
          xxx = 0;
          lcd.noBacklight();
          delay(100);
        }
        break;
     case 0xFF9867:
        ty -= 10;
        if(ty <= 10){
          ty = 10;
        }
        tx = ty;
        zz = 0;
        break;
     case 0xFFB04F:
        ty += 10;
        if(ty >= 990){
          ty = 990;
        }
        tx = ty;
        zz = 0;
        break;
    }
  }
  irrecv.resume(); // принимаем следующую команду
}

 

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

Просьба на коментарии в цикле не обращайте внимание, они левые.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Все goto NEW;   надо поменять на return; программу это не исправит но идиотизм уменьшится.

SSSRMaster
Offline
Зарегистрирован: 25.12.2017

А как сделать тпк, чтобы он вернулся сразу к началу? Что то мне подсказывает что он не возвращается назад