Не выходит из функции

Denisblr
Offline
Зарегистрирован: 23.04.2021

Добрый день, подскажите такой вопрос: код написан, почти полностью работает, да не профессионально, но для начала пойдёт.

Ситуация такая: при посыле сигнала с телефона, программа должна переходить в функцию loop(), serial.print я проверил, она срабатывает как надо, но почему-то обратно возвращается в эту функцию. В остальном коде, все работает, а в этой отдельной функции не хочет. Пробывал без case, пробывал через goto - срабатывает но на loop() не переходит.

void rassvet()
{
  int s;
  ras = EEPROM.read(9);
  RTC.read(tm);
  int b = tm.Minute;
  int sek = tm.Second;

  switch (ras)
  {
    case 0:
      inc = 0.142;
      dim = ((b - 30) * 60 + sek) * 0.142;
      for (dim; dim > -1; dim)
      {
        analogWrite(9, dim);
        analogWrite(10, dim);
        analogWrite(11, dim);
        delay(1000);
        Serial.println(dim);
        dim += inc;
        if (Serial.available() > 0)
        {
          if (Serial.find(target));
          s = 5;

          break;
        }
        if (dim >= 255)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          break;
        }
      }
      Serial.println("Вышел с фор");
      break;
  }

  if (s >= 5)
  {
    Serial.println("Луп");
    setup();
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    delay(10000);
    
  }
  else
  {
    Serial.println("Авто");
    Auto();
  }
}

 

rkit
Offline
Зарегистрирован: 23.11.2016

Как оно может туда переходить, если у тебя эта функция не определена?

Denisblr
Offline
Зарегистрирован: 23.04.2021

Извините, я уже пробывал в Setup() выйти. Счас подправлю. Но все-равно даже в Setup() не выходит

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А почему он должен переходить в loop() ?
Потому что вызывается setup() ?
Ну так после выполнения вызванной функции обычно программа возвращается обратно.
С чего вы взяли, что при вызове setup(), после выполнения функции будет исполнятся loop() ?

Denisblr
Offline
Зарегистрирован: 23.04.2021

Извините, должно быть так

 if (s >= 5)
  {
    Serial.println("Луп");//для проверки переходит сюда или нет
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    loop();
  }

 

Denisblr
Offline
Зарегистрирован: 23.04.2021

Я внизу вставил код, который должен отработать, я вчера пробывал по всякому и в loop() и в setup(). Если бы она вышла в Setup(), то после сразу начал бы выполняться loop(), правильно же? Но происходит так, при отправке команды, программа переходит в if, ставит значение на портах, а дальше начинается выполнение её заново

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А для чего это вообще ?
Если что есть while....
А вообще нужно как-то проектировать код перед тем как начинать писать. Несколько абсурдно вызывать основной цикл из функции. Обычно основной цикл крутится всегда, а для выхода из вызванной функции используется return.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Denisblr пишет:

Я внизу вставил код, который должен отработать, я вчера пробывал по всякому и в loop() и в setup(). Если бы она вышла в Setup(), то после сразу начал бы выполняться loop(), правильно же? Но происходит так, при отправке команды, программа переходит в if, ставит значение на портах, а дальше начинается выполнение её заново

Нет не правильно .
Условно код выглядит так:

int main(void){
//те действия которые требуется выполнить при запуске они будут функцией setup() (нет)

//while(1)
for(;;){
//Основной цикл. Так называемый Loop
}

}

Так что это даже не функции . Это их визуальная реализация в arduinoIDE.
В конечном итоге программа перед компиляцией их выкинет и заменит на int main и for(;;)

Denisblr
Offline
Зарегистрирован: 23.04.2021

это для того, чтобы программа работала в авто-режиме и режиме ручном. В loop() она получает команды через bluetooth, а если она переходит в функцию Auto(), там она и остаётся и выйти с неё никак нельзя, кроме того, чтобы при получение команды, она переходила в loop() и соответственно могла работать в ручном режиме.

Denisblr
Offline
Зарегистрирован: 23.04.2021

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

Denisblr
Offline
Зарегистрирован: 23.04.2021

а хотя, вот вся программа, много чего лишнего в ней, как только получиться решить проблему с этим, то буду убирать всё лишнее

#include <OneWire.h>
#include <EEPROM.h>
#include <Wire.h>
#include "GyverTM1637.h"
#include "RTClib.h"
#include <DS1307RTC.h>
#include <Time.h>
#include <TimeLib.h>
#define CLK 4 //часы
#define DIO 7 //часы
GyverTM1637 disp(CLK, DIO);
tmElements_t tm;
unsigned long millisp = 0;
unsigned long millist = 0;
boolean flagpoint = true;
int Rtime;
int ras;
int zac;
int brightness;
String input_string = "";
int shim1;
int shim2;
int shim3;
double dim;
char target = "st";
double inc;
int temperature = 0;
OneWire ds(2); //датчик температуры
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000;
int zn;



void setup()
{
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode (9, OUTPUT);
  disp.clear();
  disp.brightness(-5);
  bool parse = false;
  bool config = false;
  analogWrite(10, EEPROM.read(0));
  analogWrite(11, EEPROM.read(1));
  analogWrite(9, EEPROM.read(2));
  ds.write(0x7F); // Th контроль температуры макс 128грд
  ds.write(0xFF); //Tl контроль температуры мин -128грд
  ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение

  /*Auto();*/

}
int detectTemperature() {

  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);

  if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
  {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44);

    data[0] = ds.read();
    data[1] = ds.read();
    EEPROM.update(4, data[0]);
    EEPROM.update(5, data[1]);
    // Формируем значение
    temperature = (data[1] << 8) + data[0];
    temperature = temperature >> 4;
    EEPROM.update(3, temperature);
  }
}


void Vremia() {

  if (millis() - millisp >= 500) {
    // разделительные точки
    flagpoint = !flagpoint;
    millisp = millis();
    // получить время
    RTC.read(tm);
    if (millis() - millist <= 5000) { // часы-минуты
      disp.point(flagpoint);
      disp.display(0, tm.Hour / 10);
      disp.display(1, tm.Hour % 10);
      disp.display(2, tm.Minute / 10);
      disp.display(3, tm.Minute % 10);
    }
    else
    {
      millist = millis();
    }
  }
}

void loop()
{
  while (Serial.available() > 0)
  {
    char c = Serial.read();// //(c == '\n')
    if (c == '\n')

    {
      Command();
      input_string = "";
    }

    else
    {
      input_string += c;
    }
  }
  detectTemperature();
  Vremia();
}

void Command()
{

  if (input_string.equals("1") == true)
  {
    digitalWrite(11, HIGH);
  }
  else if (input_string.equals("0") == true)
  {
    digitalWrite(11, LOW);
  }
  else if (input_string.equals("2") == true)
  {
    digitalWrite(10, HIGH);
  }
  else if (input_string.equals("3") == true)
  {
    digitalWrite(10, LOW);
  }
  else if (input_string.equals("4") == true)
  {
    disp.brightness(7);
  }
  else if (input_string.equals("5") == true)
  {
    disp.brightness(-5);
  }
  else if (input_string.startsWith("z") == true)
  {
    input_string.replace("z", "");
    shim1 = input_string.toInt();
    analogWrite(10, shim1);
    EEPROM.update(0, shim1);
    delay (100);
  }
  else if (input_string.startsWith("b") == true)
  {
    input_string.replace("b", "");
    shim2 = input_string.toInt();
    analogWrite(11, shim2);
    EEPROM.update(1, shim2);
    delay (100);
  }
  else if (input_string.startsWith("r") == true)
  {
    input_string.replace("r", "");
    shim3 = input_string.toInt();
    analogWrite(9, shim3);
    EEPROM.update(2, shim3);
    delay (100);
  }
  else if (input_string.startsWith("9") == true)
  {
    digitalWrite(9, HIGH);
  }
  else if (input_string.startsWith("10") == true)
  {
    digitalWrite(9, LOW);
  }
  else if (input_string.startsWith("a") == true)
  {
    Auto();
  }
  else if (input_string.startsWith("v") == true)
  {

  }
  else if (input_string.startsWith("t") == true)
  {
    Serial.println (EEPROM.read(3));
  }
  else if (input_string.startsWith("11") == true)
  {
    disp.clear();
    disp.brightness(7);
    disp.display(0, EEPROM.read(4) / 10);
    disp.display(1, EEPROM.read(5) / 10);
  }
  else if (input_string.startsWith("s") == true)
  {
    loop();
  }
  else if (input_string.startsWith("c") == true)
  {
    input_string.replace("c", "");
    tm.Hour = input_string.toInt();
    RTC.write(tm);
  }
  else if (input_string.startsWith("m") == true)
  {
    input_string.replace("m", "");
    tm.Minute = input_string.toInt();
    RTC.write(tm);
  }
  else if (input_string.startsWith("20") == true)
  {
    input_string.replace("20", "");
    zn = input_string.toInt();
    EEPROM.update(10, zn);
  }
  else if (input_string.startsWith("21") == true)
  {
    input_string.replace("21", "");
    zn = input_string.toInt();
    EEPROM.update(10, zn);
  }
  else if (input_string.startsWith("22") == true)
  {
    input_string.replace("22", "");
    zn = input_string.toInt();
    EEPROM.update(11, zn);
  }
  else if (input_string.startsWith("23") == true)
  {
    input_string.replace("23", "");
    zn = input_string.toInt();
    EEPROM.update(11, zn);
  }




}


void rassvet()
{
  int s;
  ras = EEPROM.read(9);
  RTC.read(tm);
  int b = tm.Minute;
  int sek = tm.Second;

  switch (ras)
  {
    case 0:
      inc = 0.142;
      dim = ((b - 30) * 60 + sek) * 0.142;
      for (dim; dim > -1; dim)
      {
        analogWrite(9, dim);
        analogWrite(10, dim);
        analogWrite(11, dim);
        delay(1000);
        Serial.println(dim);
        dim += inc;
        if (Serial.available() > 0)
        {
          if (Serial.find(target));
          s = 5;

          break;
        }
        if (dim >= 255)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          break;
        }
      }
      Serial.println("Вышел с фор");//для проверки, вышел или нет
      break;
  }

  if (s >= 5)
  {
    Serial.println("Луп");//для проверки переходит сюда или нет
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    loop();
  }
  else
  {
    Serial.println("Авто");
    Auto();
  }
}



void zakat()
{
  int s = 0;
  RTC.read(tm);
  //int b = 0;
  int b = tm.Minute;
  int sek = tm.Second;
  inc = 0.142;
  dim = ((30 - b) * 60 - sek) * 0.142;
  for (dim; dim <= 260; dim)
  {
    analogWrite(9, dim);
    analogWrite(10, dim);
    analogWrite(11, dim);
    delay(1000);
    Serial.println(dim);
    dim -= inc;
    if (Serial.available() > 0)
    {
      if (Serial.find(target));
      s = 5;
      loop();
      // break;
    }

    if (dim <= 0)
    {
      break;
    }
    if (Serial.available() > 0)
    {
      if (Serial.find(target));
      s = 5;
      break;
    }
  }
  if (s >= 5)
  {
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    loop();
  }
  else
  {
    Auto();
  }
  Auto();
}


void Auto()
{

  int s = 0;
  int r;
  RTC.read(tm);
  //int a = 21;
  // int b = 0;
  int a = tm.Hour;
  int b = tm.Minute;
  int sek = tm.Second;
  Rtime = a;
  switch (Rtime)
  {
    case 0:
      if (a == 0 && b <= 30)
      {
        if (EEPROM.read(11) == 2)
        {
          zakat();
        }
        else if (EEPROM.read(10) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);
          Serial.println("Включено");
        }
        else if (EEPROM.read(10) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);
          Serial.println("Отключено");
        }
      }
      if (a == 0 && b >= 30)
      {
        if (EEPROM.read(11) == 1)
        {
          r = 0;
          EEPROM.update(9, r);
          rassvet();
        }
        else if (EEPROM.read(10) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);
          Serial.println("Включено");
        }
        else if (EEPROM.read(10) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);
          Serial.println("Отключено");
        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 1:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 2:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 3:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 4:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 5:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 6:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 7:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 8:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 9:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 10:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 11:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 12:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 13:
      //тут идёт выполнение программы с 13:30 до 14 на разгорание
      if (a == 13 && b >= 30)
      {

        inc = 0.142;
        dim = ((b - 30) * 60 + sek) * 0.142;
        for (dim; dim > -1; dim)
        {
          analogWrite(9, dim);
          analogWrite(10, dim);
          analogWrite(11, dim);
          delay(1000);

          dim += inc;
          if (Serial.available() > 0)
          {
            if (Serial.find(target));
            s = 5;
            break;
          }
          if (dim >= 255)
          {
            digitalWrite(9, HIGH);
            digitalWrite(10, HIGH);
            digitalWrite(11, HIGH);
            break;
          }
        }

      }
      if (b < 30)
      {
        digitalWrite(9, LOW);
        digitalWrite(10, LOW);
        digitalWrite(11, LOW);
        delay(1000);
        if (Serial.available() > 0)
        {
          if (Serial.find(target));
          s = 5;
          break;
        }
      }
      break;
    case 14:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 15:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 16:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 17:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 18:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 19:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 20:
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 21:
      // на уменьшение
      if (a == 21 && b <= 30)
      {
        inc = 0.142;
        dim = ((30 - b) * 60 - sek) * 0.142;

        for (dim; dim <= 260; dim)
        {
          analogWrite(9, dim);
          analogWrite(10, dim);
          analogWrite(11, dim);
          delay(1000);

          dim -= inc;
          if (Serial.available() > 0)
          {
            if (Serial.find(target));
            s = 5;
            break;
          }

          if (dim <= 0)
          {
            break;
          }
        }
      }
      if (b > 30)
      {
        digitalWrite(9, LOW);
        digitalWrite(10, LOW);
        digitalWrite(11, LOW);
        delay(1000);
        if (Serial.available() > 0)
        {
          if (Serial.find(target));
          s = 5;
          break;
        }
      }
      break;
    case 22:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 23:
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      delay(1000);
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
  }
  if (s >= 5)
  {
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    loop();
  }
  else
  {
    Auto();
  }
}

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Вот и должно быть при заходе в функцию авто:

void Auto(){
while(1){

if(какое то условие)return;
}
}

Denisblr
Offline
Зарегистрирован: 23.04.2021

Во всей программе, в функции Auto() все работает а вот в функции rassvet() нет, и не могу понять почему

rkit
Offline
Зарегистрирован: 23.11.2016

Kakmyc пишет:
В конечном итоге программа перед компиляцией их выкинет и заменит на int main и for(;;)

Не пори чушь, пожалуйста.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

rkit пишет:

Kakmyc пишет:
В конечном итоге программа перед компиляцией их выкинет и заменит на int main и for(;;)

Не пори чушь, пожалуйста.

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Специально для rkit.

Описание того как делать не стоит:

 

Программа в Ардуино выглядит так:

int main(void)
{
	init();

	initVariant();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}

 

Т.е. при вызове в теле цикла loop() цикла loop() мы творим лютую дичь. И так делать не стоит.

Upper
Offline
Зарегистрирован: 23.06.2020

Kakmyc пишет:

Т.е. при вызове в теле цикла loop() цикла loop() мы творим лютую дичь. И так делать не стоит.

Какая то лютая дичь. Какой цикл loop в теле цикла loop()???

Цыкал цыкал мотоцикл ... 

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

Denisblr пишет:

должно быть так

 if (s >= 5)
  {
   ...
    loop();
  }

Нет, так не должно быть.

Функцию loop() вызывать нельзя. Тому, кто точно знает что делает, может и можно иногда, но я не могу себе представить случая, когда это оправдано. Вам же вызывать её нельзя никогда. Если Вам нужно её вызвать, значит, Вы чего-то не понимаете.

mixail844
Offline
Зарегистрирован: 30.04.2012

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

Denisblr пишет:

должно быть так

 if (s >= 5)
  {
   ...
    loop();
  }

Нет, так не должно быть.

Функцию loop() вызывать нельзя. Тому, кто точно знает что делает, может и можно иногда, но я не могу себе представить случая, когда это оправдано. Вам же вызывать её нельзя никогда. Если Вам нужно её вызвать, значит, Вы чего-то не понимаете.


оууу , да тут у нас исторический момент. на форуме что то запретили :D

nik182
Offline
Зарегистрирован: 04.05.2015

Нет. Ничего не запретили. Просто поставили точки над i. Функция loop определена в системе и вызывается системой в бесконечном цикле. Это если следовать правилам ардуины и использовать setup и loop так, как намечено разработчиками. Из loop можно выйти из любой точки и попасть снова в начало loop. Это вроде как вызвать loop c начала. Но вот самому вызвать loop это сделать петлю на стеке. Несколько раз получится, а потом ...

Denisblr
Offline
Зарегистрирован: 23.04.2021

Всем спасибо я разобрался сам. Внимательно почитал интернет и понял, что в моём случае, в функции Auto() я вызываю другую функцию, которая выполняется и прервать я её не могу. В итоге вопрос решился. Всем спасибо, если интересно я скину код

 

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

Denisblr пишет:

 понял, что в моём случае, в функции Auto() я вызываю другую функцию, которая выполняется и прервать я её не могу.

фраза попахивает бредом...

Если вы сами вызываете функцию, то что мешает ее прервать? ... или контроль над ардуиной захватили инопланетяне, или вы опять чего-то не поняли...

 

А в Auto() вы вызываете Auto() - это называется рекурсия. Не стоит это делать без четкого понимания. Мне кажется, вам до этого понимания еще 2-3 года усиленного изучения С.С++

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

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

Логика вашего кода в корне неверная. Даже если отвлечься от попыток вызывать служебные функции setup() и  loop() - что, как надеюсь вам уже обьяснили, делать нельзя - вы и со своими функциями обращаетесь неправильно. У вас есть функции Auto() rassvet() zakat(). Вы из Auto() вызываете rassvet(), а оттуда снова Auto() и так далее. Такая "логика" кода однозначно ведет к зацикливанию и зависанию программы через 3-5 стадий.

Если вы хотите из ФУНКЦИИ_1 вызвать ФУНКЦИЮ_2, а потом ФУНКЦИЮ_3 - то в общем случае надо СНАЧАЛА ВЕРНУТСЯ из ФУНКЦИИ_2 в первую, а уже потом вызывать ФУНЦИЮ_3

Выберите одну из функций "главной", например вашу Auto()/ Вызвали из нее zakat(), отработали, ВЕРНУЛИСЬ в Auto() и из нее пошли в rassvet. А иначе у вас будет полная ерунда

rkit
Offline
Зарегистрирован: 23.11.2016
void setup() {
  Serial.begin(9600);
}

uint8_t x = 0;

void loop() {
  if (++x % 2) print();
  else loop();
}

void print() {
  Serial.print(x);
  Serial.print(' ');
  Serial.println(RAMEND - SP);
  loop();
}

Работает :(

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

rkit пишет:

Работает :(

Шутка не смешная. А в подобной теме, так и вредная, т.к. ТС стопудово не поймёт, что это шутка и воспримет серьёзно. Запустит, увидит, и будет считать, что так можно.

Denisblr
Offline
Зарегистрирован: 23.04.2021

Я уже с этим разобрался. Теперь у меня работает все. Основная функция у меня auto(), из неё вызывается rassvet и zakat, возврат на Auto реализовал через go to, у меня были сомнения что через return 0, будет все выходить в case 0. Но почему у меня тогда в авто происходит прерывание выполнения кода по отправке значения и программа выходит в loop()?

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

Denisblr пишет:

Я уже с этим разобрался. Теперь у меня работает все. Основная функция у меня auto(), из неё вызывается rassvet и zakat, возврат на Auto реализовал через go to, у меня были сомнения что через return 0, будет все выходить в case 0. Но почему у меня тогда в авто происходит прерывание выполнения кода по отправке значения и программа выходит в loop()?

показывайте новый код, иначе разговор ни о чем

rkit
Offline
Зарегистрирован: 23.11.2016

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

rkit пишет:

Работает :(

Шутка не смешная. А в подобной теме, так и вредная, т.к. ТС стопудово не поймёт, что это шутка и воспримет серьёзно. Запустит, увидит, и будет считать, что так можно.

Это не шутка. Так можно.

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

rkit пишет:

Это не шутка. Так можно.

А-а-а! Даже так!

Ну, ладно, подождём, пока в очередной версии IDE в Platform.txt напишут опцию -O1 вместо нынешней -Os. Тогда, видимо, "нельзя" станет :-)

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

Политота удалена. Следите за базаром.

Denisblr
Offline
Зарегистрирован: 23.04.2021

Вот весь код, осуждайте

#include <OneWire.h>
#include <EEPROM.h>
#include <Wire.h>
#include "GyverTM1637.h"
#include "RTClib.h"
#include <DS1307RTC.h>
#include <Time.h>
#include <TimeLib.h>
#define CLK 4 //часы
#define DIO 7 //часы
GyverTM1637 disp(CLK, DIO);
tmElements_t tm;
unsigned long millisp = 0;
unsigned long millist = 0;
boolean flagpoint = true;
int Rtime;
int brightness;
String input_string = "";
int shim1;
int shim2;
int shim3;
double dim;
char target = "st";
double inc;
int temperature = 0;
OneWire ds(2); //датчик температуры
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000;
int zn;



void setup()
{
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode (9, OUTPUT);
  disp.clear();
  disp.brightness(-5);
  bool parse = false;
  bool config = false;
  analogWrite(10, EEPROM.read(0));
  analogWrite(11, EEPROM.read(1));
  analogWrite(9, EEPROM.read(2));
  ds.write(0x7F);
  ds.write(0xFF);
  ds.write(0x60);
  /*Auto();*/

}
int detectTemperature()
{

  byte data[2];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);

  if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
  {
    lastUpdateTime = millis();
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44);

    data[0] = ds.read();
    data[1] = ds.read();
    EEPROM.update(4, data[0]);
    EEPROM.update(5, data[1]);
    // Формируем значение
    temperature = (data[1] << 8) + data[0];
    temperature = temperature >> 4;
    EEPROM.update(3, temperature);
  }
}


void Vremia() {

  if (millis() - millisp >= 500) {
    // разделительные точки
    flagpoint = !flagpoint;
    millisp = millis();
    // получить время
    RTC.read(tm);
    if (millis() - millist <= 5000) { // часы-минуты
      disp.point(flagpoint);
      disp.display(0, tm.Hour / 10);
      disp.display(1, tm.Hour % 10);
      disp.display(2, tm.Minute / 10);
      disp.display(3, tm.Minute % 10);
    }
    else
    {
      millist = millis();
    }
  }
}

void loop()
{
  while (Serial.available() > 0)
  {
    char c = Serial.read();
    if (c == '\n')

    {
      Command();
      input_string = "";
    }

    else
    {
      input_string += c;
    }
  }
   detectTemperature();
  Vremia();
}

void Command()
{

  if (input_string.equals("1") == true)
  {
    digitalWrite(11, HIGH);
  }
  else if (input_string.equals("0") == true)
  {
    digitalWrite(11, LOW);
  }
  else if (input_string.equals("2") == true)
  {
    digitalWrite(10, HIGH);
  }
  else if (input_string.equals("3") == true)
  {
    digitalWrite(10, LOW);
  }
  else if (input_string.equals("4") == true)
  {
    disp.brightness(7);
  }
  else if (input_string.equals("5") == true)
  {
    disp.brightness(-5);
  }
  else if (input_string.startsWith("z") == true)
  {
    input_string.replace("z", "");
    shim1 = input_string.toInt();
    analogWrite(10, shim1);
    EEPROM.update(0, shim1);
    delay (100);
  }
  else if (input_string.startsWith("b") == true)
  {
    input_string.replace("b", "");
    shim2 = input_string.toInt();
    analogWrite(11, shim2);
    EEPROM.update(1, shim2);
    delay (100);
  }
  else if (input_string.startsWith("r") == true)
  {
    input_string.replace("r", "");
    shim3 = input_string.toInt();
    analogWrite(9, shim3);
    EEPROM.update(2, shim3);
    delay (100);
  }
  else if (input_string.startsWith("9") == true)
  {
    digitalWrite(9, HIGH);
  }
  else if (input_string.startsWith("10") == true)
  {
    digitalWrite(9, LOW);
  }
  else if (input_string.startsWith("a") == true)
  {
    Auto();
  }
  else if (input_string.startsWith("v") == true)
  {

  }
  else if (input_string.startsWith("t") == true)
  {
    Serial.println (EEPROM.read(3));
  }
  else if (input_string.startsWith("11") == true)
  {
    disp.clear();
    disp.brightness(7);
    disp.display(0, EEPROM.read(4) / 10);
    disp.display(1, EEPROM.read(5) / 10);
  }
  else if (input_string.startsWith("s") == true)
  {
    loop();
  }
  else if (input_string.startsWith("c") == true)
  {
    input_string.replace("c", "");
    tm.Hour = input_string.toInt();
    RTC.write(tm);
  }
  else if (input_string.startsWith("m") == true)
  {
    input_string.replace("m", "");
    tm.Minute = input_string.toInt();
    RTC.write(tm);
  }
  else if (input_string.startsWith("20") == true)
  {
    input_string.replace("20", "");
    zn = input_string.toInt();
    EEPROM.update(10, zn);
  }
  else if (input_string.startsWith("21") == true)
  {
    input_string.replace("21", "");
    zn = input_string.toInt();
    EEPROM.update(10, zn);
  }
  else if (input_string.startsWith("22") == true)
  {
    input_string.replace("22", "");
    zn = input_string.toInt();
    EEPROM.update(11, zn);
  }
  else if (input_string.startsWith("23") == true)
  {
    input_string.replace("23", "");
    zn = input_string.toInt();
    EEPROM.update(12, zn);
  }
  else if (input_string.startsWith("24") == true)
  {
    input_string.replace("24", "");
    zn = input_string.toInt();
    EEPROM.update(13, zn);
  }
  else if (input_string.startsWith("25") == true)
  {
    input_string.replace("25", "");
    zn = input_string.toInt();
    EEPROM.update(14, zn);
  }
  else if (input_string.startsWith("26") == true)
  {
    input_string.replace("26", "");
    zn = input_string.toInt();
    EEPROM.update(15, zn);
  }
  else if (input_string.startsWith("27") == true)
  {
    input_string.replace("27", "");
    zn = input_string.toInt();
    EEPROM.update(16, zn);
  }
  else if (input_string.startsWith("28") == true)
  {
    input_string.replace("28", "");
    zn = input_string.toInt();
    EEPROM.update(17, zn);
  }
  else if (input_string.startsWith("29") == true)
  {
    input_string.replace("29", "");
    zn = input_string.toInt();
    EEPROM.update(18, zn);
  }
  else if (input_string.startsWith("30") == true)
  {
    input_string.replace("30", "");
    zn = input_string.toInt();
    EEPROM.update(19, zn);
  }
  else if (input_string.startsWith("31") == true)
  {
    input_string.replace("31", "");
    zn = input_string.toInt();
    EEPROM.update(20, zn);
  }
  else if (input_string.startsWith("32") == true)
  {
    input_string.replace("32", "");
    zn = input_string.toInt();
    EEPROM.update(21, zn);
  }
  else if (input_string.startsWith("33") == true)
  {
    input_string.replace("33", "");
    zn = input_string.toInt();
    EEPROM.update(22, zn);
  }
  else if (input_string.startsWith("34") == true)
  {
    input_string.replace("34", "");
    zn = input_string.toInt();
    EEPROM.update(23, zn);
  }
  else if (input_string.startsWith("35") == true)
  {
    input_string.replace("35", "");
    zn = input_string.toInt();
    EEPROM.update(24, zn);
  }
  else if (input_string.startsWith("36") == true)
  {
    input_string.replace("36", "");
    zn = input_string.toInt();
    EEPROM.update(25, zn);
  }
  else if (input_string.startsWith("37") == true)
  {
    input_string.replace("37", "");
    zn = input_string.toInt();
    EEPROM.update(26, zn);
  }
  else if (input_string.startsWith("38") == true)
  {
    input_string.replace("38", "");
    zn = input_string.toInt();
    EEPROM.update(27, zn);
  }
  else if (input_string.startsWith("39") == true)
  {
    input_string.replace("39", "");
    zn = input_string.toInt();
    EEPROM.update(28, zn);
  }
  else if (input_string.startsWith("40") == true)
  {
    input_string.replace("40", "");
    zn = input_string.toInt();
    EEPROM.update(29, zn);
  }
  else if (input_string.startsWith("41") == true)
  {
    input_string.replace("41", "");
    zn = input_string.toInt();
    EEPROM.update(30, zn);
  }
  else if (input_string.startsWith("42") == true)
  {
    input_string.replace("42", "");
    zn = input_string.toInt();
    EEPROM.update(31, zn);
  }
  else if (input_string.startsWith("43") == true)
  {
    input_string.replace("43", "");
    zn = input_string.toInt();
    EEPROM.update(32, zn);
  }
  else if (input_string.startsWith("44") == true)
  {
    input_string.replace("44", "");
    zn = input_string.toInt();
    EEPROM.update(33, zn);
  }
  else if (input_string.startsWith("45") == true)
  {
    input_string.replace("45", "");
    zn = input_string.toInt();
    EEPROM.update(34, zn);
  }
  else if (input_string.startsWith("46") == true)
  {
    input_string.replace("46", "");
    zn = input_string.toInt();
    EEPROM.update(35, zn);
  }
  else if (input_string.startsWith("47") == true)
  {
    input_string.replace("47", "");
    zn = input_string.toInt();
    EEPROM.update(36, zn);
  }
  else if (input_string.startsWith("48") == true)
  {
    input_string.replace("48", "");
    zn = input_string.toInt();
    EEPROM.update(37, zn);
  }
  else if (input_string.startsWith("49") == true)
  {
    input_string.replace("49", "");
    zn = input_string.toInt();
    EEPROM.update(38, zn);
  }
  else if (input_string.startsWith("50") == true)
  {
    input_string.replace("50", "");
    zn = input_string.toInt();
    EEPROM.update(39, zn);
  }
  else if (input_string.startsWith("51") == true)
  {
    input_string.replace("51", "");
    zn = input_string.toInt();
    EEPROM.update(40, zn);
  }
  else if (input_string.startsWith("52") == true)
  {
    input_string.replace("52", "");
    zn = input_string.toInt();
    EEPROM.update(41, zn);
  }
  else if (input_string.startsWith("53") == true)
  {
    input_string.replace("53", "");
    zn = input_string.toInt();
    EEPROM.update(42, zn);
  }
  else if (input_string.startsWith("54") == true)
  {
    input_string.replace("54", "");
    zn = input_string.toInt();
    EEPROM.update(43, zn);
  }
  else if (input_string.startsWith("55") == true)
  {
    input_string.replace("55", "");
    zn = input_string.toInt();
    EEPROM.update(44, zn);
  }
  else if (input_string.startsWith("56") == true)
  {
    input_string.replace("56", "");
    zn = input_string.toInt();
    EEPROM.update(45, zn);
  }
  else if (input_string.startsWith("57") == true)
  {
    input_string.replace("57", "");
    zn = input_string.toInt();
    EEPROM.update(46, zn);
  }
  else if (input_string.startsWith("58") == true)
  {
    input_string.replace("58", "");
    zn = input_string.toInt();
    EEPROM.update(47, zn);
  }
  else if (input_string.startsWith("59") == true)
  {
    input_string.replace("59", "");
    zn = input_string.toInt();
    EEPROM.update(48, zn);
  }
  else if (input_string.startsWith("60") == true)
  {
    input_string.replace("60", "");
    zn = input_string.toInt();
    EEPROM.update(49, zn);
  }
  else if (input_string.startsWith("61") == true)
  {
    input_string.replace("61", "");
    zn = input_string.toInt();
    EEPROM.update(50, zn);
  }
  else if (input_string.startsWith("62") == true)
  {
    input_string.replace("62", "");
    zn = input_string.toInt();
    EEPROM.update(51, zn);
  }
  else if (input_string.startsWith("63") == true)
  {
    input_string.replace("63", "");
    zn = input_string.toInt();
    EEPROM.update(52, zn);
  }
  else if (input_string.startsWith("64") == true)
  {
    input_string.replace("64", "");
    zn = input_string.toInt();
    EEPROM.update(53, zn);
  }
  else if (input_string.startsWith("65") == true)
  {
    input_string.replace("65", "");
    zn = input_string.toInt();
    EEPROM.update(54, zn);
  }
  else if (input_string.startsWith("66") == true)
  {
    input_string.replace("66", "");
    zn = input_string.toInt();
    EEPROM.update(55, zn);
  }
  else if (input_string.startsWith("67") == true)
  {
    input_string.replace("67", "");
    zn = input_string.toInt();
    EEPROM.update(56, zn);
  }
  else if (input_string.startsWith("68") == true)
  {
    input_string.replace("68", "");
    zn = input_string.toInt();
    EEPROM.update(57, zn);
  }
    else if (input_string.startsWith("70") == true)
  {
    input_string.replace("70", "");
    zn = input_string.toInt();
    EEPROM.update(10, zn);
    EEPROM.update(11, zn);
    EEPROM.update(12, zn);
    EEPROM.update(13, zn);
    EEPROM.update(14, zn);
    EEPROM.update(15, zn);
    EEPROM.update(16, zn);
    EEPROM.update(17, zn);
    EEPROM.update(18, zn);
    EEPROM.update(19, zn);
    EEPROM.update(20, zn);
    EEPROM.update(21, zn);
    EEPROM.update(22, zn);
    EEPROM.update(23, zn);
    EEPROM.update(24, zn);
    EEPROM.update(25, zn);
    EEPROM.update(26, zn);
    EEPROM.update(27, zn);
    EEPROM.update(28, zn);
    EEPROM.update(29, zn);
    EEPROM.update(30, zn);
    EEPROM.update(30, zn);
    EEPROM.update(31, zn);
    EEPROM.update(32, zn);
    EEPROM.update(33, zn);
    EEPROM.update(34, zn);
    EEPROM.update(35, zn);
    EEPROM.update(36, zn);
    EEPROM.update(37, zn);
    EEPROM.update(38, zn);
    EEPROM.update(39, zn);
    EEPROM.update(40, zn);
    EEPROM.update(41, zn);
    EEPROM.update(42, zn);
    EEPROM.update(43, zn);
    EEPROM.update(44, zn);
    EEPROM.update(45, zn);
    EEPROM.update(46, zn);
    EEPROM.update(47, zn);
    EEPROM.update(48, zn);
    EEPROM.update(49, zn);
    EEPROM.update(50, zn);
    EEPROM.update(51, zn);
    EEPROM.update(52, zn);
    EEPROM.update(53, zn);
    EEPROM.update(54, zn);
    EEPROM.update(55, zn);
    EEPROM.update(56, zn);
    EEPROM.update(57, zn);
  }

}
void rassvet()
{
  int s = 0;
  RTC.read(tm);
  int a = tm.Hour;
  int b = tm.Minute;
  int sek = tm.Second;
  inc = 0.142;
  dim = ((b - 30) * 60 + sek) * 0.142;
  for (dim; dim > -1; dim)
  {
    analogWrite(9, dim);
    analogWrite(10, dim);
    analogWrite(11, dim);
    delay(1000);
    Serial.println(dim);
    dim += inc;
    if (Serial.available() > 0)
    {
      if (Serial.find(target));
      s = 5;

      break;
    }
    if (dim >= 255)
    {
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      break;
    }
  }
}


void zakat()
{
  int s = 0;
  RTC.read(tm);
  int a = tm.Hour;
  int b = tm.Minute;
  int sek = tm.Second;
  inc = 0.142;
  dim = ((30 - b) * 60 - sek) * 0.142;
  for (dim; dim <= 260; dim)
  {
    analogWrite(9, dim);
    analogWrite(10, dim);
    analogWrite(11, dim);
    delay(1000);
    Serial.println(dim);
    dim -= inc;
    if (Serial.available() > 0)
    {
      if (Serial.find(target));
      s = 5;
      break;

    }
    if (dim <= 0)
    {
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      break;
    }

  }
}

void Auto()
{
  start:

  int s = 0;
  RTC.read(tm);
  int a = tm.Hour;
  int b = tm.Minute;
  int sek = tm.Second;
  Rtime = a;
  switch (Rtime)
  {
    case 0:
      if (a == 0 && b <= 30)
      {
        if (EEPROM.read(11) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(10) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);
           

        }
        else if (EEPROM.read(10) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 0 && b >= 30)
      {
        if (EEPROM.read(11) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(10) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(10) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 1:
      if (a == 1 && b <= 30)
      {
        if (EEPROM.read(12) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(13) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);
           
        }
        else if (EEPROM.read(13) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 1 && b >= 30)
      {
        if (EEPROM.read(12) == 1)
        {
          rassvet();
          return 1;
        }
        else if (EEPROM.read(13) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);
           
        }
        else if (EEPROM.read(13) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 2:
      if (a == 2 && b <= 30)
      {
        if (EEPROM.read(14) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(15) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(15) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 2 && b >= 30)
      {
        if (EEPROM.read(14) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(15) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(15) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 3:
      if (a == 3 && b <= 30)
      {
        if (EEPROM.read(16) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(17) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(17) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 3 && b >= 30)
      {
        if (EEPROM.read(16) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(17) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(17) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 4:
      if (a == 4 && b <= 30)
      {
        if (EEPROM.read(18) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(19) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(19) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 4 && b >= 30)
      {
        if (EEPROM.read(18) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(19) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(19) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 5:
      if (a == 5 && b <= 30)
      {
        if (EEPROM.read(20) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(21) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(21) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 5 && b >= 30)
      {
        if (EEPROM.read(20) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(21) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(21) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 6:
      if (a == 6 && b <= 30)
      {
        if (EEPROM.read(22) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(23) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(23) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 6 && b >= 30)
      {
        if (EEPROM.read(22) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(23) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(23) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 7:
      if (a == 7 && b <= 30)
      {
        if (EEPROM.read(24) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(25) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(25) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 7 && b >= 30)
      {
        if (EEPROM.read(24) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(25) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(25) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 8:
      if (a == 8 && b <= 30)
      {
        if (EEPROM.read(26) == 2)
        {
        zakat();
          goto start;
        }
        else if (EEPROM.read(27) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(27) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 8 && b >= 30)
      {
        if (EEPROM.read(26) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(27) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(27) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 9:
      if (a == 9 && b <= 30)
      {
        if (EEPROM.read(28) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(29) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(29) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 9 && b >= 30)
      {
        if (EEPROM.read(28) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(29) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(29) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 10:
      if (a == 10 && b <= 30)
      {
        if (EEPROM.read(30) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(31) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(31) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 10 && b >= 30)
      {
        if (EEPROM.read(30) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(31) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(31) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 11:
      if (a == 11 && b <= 30)
      {
        if (EEPROM.read(32) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(33) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(33) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 11 && b >= 30)
      {
        if (EEPROM.read(32) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(33) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(33) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 12:
      if (a == 12 && b <= 30)
      {
        if (EEPROM.read(34) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(35) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(35) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 12 && b >= 30)
      {
        if (EEPROM.read(34) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(35) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(35) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 13:
      if (a == 13 && b <= 30)
      {
        if (EEPROM.read(36) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(37) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(37) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 13 && b >= 30)
      {
        if (EEPROM.read(36) == 1)
        {
         rassvet();
          goto start;
        }
        else if (EEPROM.read(37) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(37) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 14:
      if (a == 14 && b <= 30)
      {
        if (EEPROM.read(38) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(39) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(39) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 14 && b >= 30)
      {
        if (EEPROM.read(38) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(39) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(39) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 15:
      if (a == 15 && b <= 30)
      {
        if (EEPROM.read(40) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(41) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(41) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 15 && b >= 30)
      {
        if (EEPROM.read(40) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(41) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(41) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 16:
      if (a == 16 && b <= 30)
      {
        if (EEPROM.read(42) == 2)
        {
         zakat();
          goto start;
        }
        else if (EEPROM.read(43) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(43) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 16 && b >= 30)
      {
        if (EEPROM.read(42) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(43) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(43) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 17:
      if (a == 17 && b <= 30)
      {
        if (EEPROM.read(44) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(45) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(45) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 17 && b >= 30)
      {
        if (EEPROM.read(44) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(45) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(45) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 18:
      if (a == 18 && b <= 30)
      {
        if (EEPROM.read(46) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(47) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(47) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 18 && b >= 30)
      {
        if (EEPROM.read(46) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(47) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(47) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 19:
      if (a == 19 && b <= 30)
      {
        if (EEPROM.read(48) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(49) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(49) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 19 && b >= 30)
      {
        if (EEPROM.read(48) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(49) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(49) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 20:
      if (a == 20 && b <= 30)
      {
        if (EEPROM.read(50) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(51) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(51) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 20 && b >= 30)
      {
        if (EEPROM.read(50) == 1)
        {
         rassvet();
          goto start;
        }
        else if (EEPROM.read(51) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(51) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 21:
      if (a == 21 && b <= 30)
      {
        if (EEPROM.read(52) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(53) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(53) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 21 && b >= 30)
      {
        if (EEPROM.read(52) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(53) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(53) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 22:
      if (a == 22 && b <= 30)
      {
        if (EEPROM.read(54) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(55) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(55) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 22 && b >= 30)
      {
        if (EEPROM.read(54) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(55) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(55) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
    case 23:
      if (a == 23 && b <= 30)
      {
        if (EEPROM.read(56) == 2)
        {
          zakat();
          goto start;
        }
        else if (EEPROM.read(57) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(57) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (a == 23 && b >= 30)
      {
        if (EEPROM.read(56) == 1)
        {
          rassvet();
          goto start;
        }
        else if (EEPROM.read(57) == 1)
        {
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(11, HIGH);
          delay(1000);

        }
        else if (EEPROM.read(57) == 0)
        {
          digitalWrite(9, LOW);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
          delay(1000);

        }
      }
      if (Serial.available() > 0)
      {
        if (Serial.find(target));
        s = 5;
        break;
      }
      break;
  }
  if (s >= 5)
  {
    analogWrite(10, EEPROM.read(0));
    analogWrite(11, EEPROM.read(1));
    analogWrite(9, EEPROM.read(2));
    loop();
  }
  else
  {
    goto start;
  }
}

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

2000 строк и вредные goto, работа с EEPROM как с переменными
Йухня , переделывай.

Denisblr
Offline
Зарегистрирован: 23.04.2021

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Denisblr пишет:

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

Как где ? в EEPROM.
Но их от туда нужно читать только при запуске, а не использовать в качестве переменных.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Сдается мне, что последние ~1,5к строк можно заменить функцией на пару десятков строк.
Скорее даже 1,8к...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Denisblr пишет:

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

Сделать так, чтобы питание не прерывалось.

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

пиздец какой-то...

вы про циклы не слыхали вовсе?

например вот эта портянка

EEPROM.update(10, zn);
    EEPROM.update(11, zn);
    EEPROM.update(12, zn);
    EEPROM.update(13, zn);
    EEPROM.update(14, zn);
    EEPROM.update(15, zn);
    EEPROM.update(16, zn);
    EEPROM.update(17, zn);
    EEPROM.update(18, zn);
    EEPROM.update(19, zn);
    EEPROM.update(20, zn);
    EEPROM.update(21, zn);
    EEPROM.update(22, zn);
    EEPROM.update(23, zn);
    EEPROM.update(24, zn);
    EEPROM.update(25, zn);
    EEPROM.update(26, zn);
    EEPROM.update(27, zn);
    EEPROM.update(28, zn);
    EEPROM.update(29, zn);
    EEPROM.update(30, zn);
    EEPROM.update(30, zn);
    EEPROM.update(31, zn);
    EEPROM.update(32, zn);
    EEPROM.update(33, zn);
    EEPROM.update(34, zn);
    EEPROM.update(35, zn);
    EEPROM.update(36, zn);
    EEPROM.update(37, zn);
    EEPROM.update(38, zn);
    EEPROM.update(39, zn);
    EEPROM.update(40, zn);
    EEPROM.update(41, zn);
    EEPROM.update(42, zn);
    EEPROM.update(43, zn);
    EEPROM.update(44, zn);
    EEPROM.update(45, zn);
    EEPROM.update(46, zn);
    EEPROM.update(47, zn);
    EEPROM.update(48, zn);
    EEPROM.update(49, zn);
    EEPROM.update(50, zn);
    EEPROM.update(51, zn);
    EEPROM.update(52, zn);
    EEPROM.update(53, zn);
    EEPROM.update(54, zn);
    EEPROM.update(55, zn);
    EEPROM.update(56, zn);
    EEPROM.update(57, zn);

записывается в 2 строки

for ( uint8_t i = 10; i<58; i++) {
EEPROM.update(i, zn);
}

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

Green
Offline
Зарегистрирован: 01.10.2015

Ну так, "Ардуино для домохозяек" же ж.(

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

Kakmyc пишет:
Сдается мне, что последние ~1,5к строк можно заменить функцией на пару десятков строк. Скорее даже 1,8к...

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

Denisblr
Offline
Зарегистрирован: 23.04.2021

Вы все такие умные я посмотрю, так напишите. Образец у ВАС имеется!!!!!

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

вот это тоже хорошо :)

нет, это уже я сослепу не туда смотрю

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

Denisblr пишет:

Вы все такие умные я посмотрю, так напишите. Образец у ВАС имеется!!!!!

добро пожаловать в раздел "ищу исполнителя". Хорошую цену предложишь - напишем.

Denisblr - за время пока ты набивал по сотне подряд одинаковых блоков чтения и записи в ЕЕПРОМ - могу бы пол-учебника по Си прочитать... и выучить

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

Denisblr пишет:

Вот весь код, осуждайте

Осуждаю! Хотя и не читал.

Denisblr пишет:

Вы все такие умные я посмотрю, так напишите. 

Нет, не настолько :-(

Denisblr пишет:

Образец у ВАС имеется!!!!!

Спасибо! Будем использовать как образец.