Детекция смены знака переменной

И что, у вас там выше есть обьявление функции MUVE() внутри setup() или loop() ? - нет ведь, иначе оно не компилировалось бы.
У вас, похоже, есть две версии кода - для форума и для себя. Потому что это не первый случай, когда ошибки, на которые вы жалуетесь - не ответствуют коду, что вы выложили.

Что касается вызова MUVE() из нее же самой - это называется рекурсия. Синтаксисом языка это не запрещено, но категорически не советую так делать. Ваша программа очень быстро зависнет при таком коде.

не нужно. Функция loop() - бесконечный цикл. Оно у вас и так будет само возвращаться к началу вашей функции, без необходимости устраивать рекурсию

А почему реле не работают… внимательно изучите функцию setup()

ЗЫ хотя, конечно, сложно судить, раз вы настоящий код не показываете. Я кажется догадываюсь, почему - вдруг очередной шедевр сопрут ? :slight_smile:

1 лайк

Вранья в постах - тоже.

@Colombo, Вы правда рассчитываете на то, что кто-то будет разбираться и помогать Вам, когда Вы просто врёте на каждом шагу и делаете всё, чтобы разобраться и помочь Вам было как можно труднее?

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

да ладно, какое-то самоуважение, я третий день с температурой валяюсь, инет - единственное развлечение :slight_smile:

Да и не думаю я, что ТС врет злонамеренно. Похоже у него два компа, на одном он код отлаживает, с другого в инет ходит. Я искренне надеюсь, что ему не приходится набивать код в форуме “одним пальцем”, косясь на монитор в соседней комнате :slight_smile:

Зачем вы обвиняете меня во вранье?
Вот код, другого у меня нет. Я пока даже не знаю, как сохранять предыдущие версии.

//трекер на 1 ось по времени

#define position_sensor_pin 0  // средняя ножка резистора ОС по положению на пин 0
#define relay1 8               // пин 8 реле 1
#define relay2 7               // пин 7 реле 2
int val, L;                    //переменная для хранения значения фактического угла, угол из таблицы
byte T;                        // время расчетное
int delta, delta_old;          // текущее и предыдущее значение рассогласования


#include <microDS3231.h>
MicroDS3231 rtc;

void setup() {


  Serial.begin(9600);                     // Устанавливаем скорость передачи данных
  delay(200);                             // Ждем 200 мкс
  Serial.println("DS3231RTC Read Test");  // Выводим данные на последовательный порт
  Serial.println("-------------------");  // Выводим данные на последовательный порт


  // проверка наличия модуля на линии i2c
  if (!rtc.begin()) {
    Serial.println("DS3231 not found");
    for (;;)
      ;
    pinMode(relay2, OUTPUT);
    pinMode(relay1, OUTPUT);
  }

  // получаем все данные в структуру
  DateTime now = rtc.getTime();

  //меняем любой параметр
  //now.year += -10;
  //now.second =0;
  //now.minute =54;
  //now.hour =22;
  //now.day =6;
  //now.date =26;
  //now.month =5;

  //отправляем в rtc
  //rtc.setTime(now);

  void MUVE();
}


void loop() {

  printTime();
  delay(100);
  digitalWrite(relay2, LOW);  // включение реле2 для проверки, все равно не включается


  void MUVE();
}

void printTime() {
  // получаем все данные в структуру и используем их
  // этот способ быстрее и "легче" вызова отдельных get-функций
  DateTime now = rtc.getTime();

  Serial.print(now.hour);
  Serial.print(":");
  Serial.print(now.minute);
  Serial.print(":");
  Serial.print(now.second);
  Serial.print(" ");
  Serial.print(now.day);
  Serial.print(" ");
  Serial.print(now.date);
  Serial.print("/");
  Serial.print(now.month);
  Serial.print("/");
  Serial.println(now.year);



  L = 100;  // значение для ПРОВЕРКИ функции поворота
  MUVE();   // запуск функции поворота
}



////////////////////////////
void MUVE() {  //функция поворота
  //int  delta_old, delta;

  val = analogRead(position_sensor_pin);  // чтение резистора ОС
  val = map(val, 0, 1023, 15, 345);       //конвертировать выходной диапазон в градусах угола поворота потенциометра
  constrain(val, 0, 360);                 //ограничение диапазона
  delta = val - L;                        // разница между фактическим углом и требуемым на данный момент
  if (delta > 0) {
    digitalWrite(relay1, LOW);
  } else {
    digitalWrite(relay2, LOW);
  }  //включаем двигатель


  Serial.println(val);
  Serial.println(delta);
  Serial.println(delta_old);
  Serial.println(L);
  Serial.println("ssssssssssssssssssssssssssssssss");  //для удобства чтения
  delay(1000);
  if (((delta < 0) && (delta_old > 0)) || ((delta > 0) && (delta_old < 0))) {  //контроль смены знака х (продолжить выполнение после смены знака Х)
    Serial.println(888);                                                       //контроль этой ветки


    digitalWrite(relay1, HIGH);  //откл. реле
    digitalWrite(relay2, HIGH);
    return;
  } else {
    Serial.println(444);  //контроль этой ветки
    if (delta_old != delta) { delta_old = delta; };
    Serial.println(delta_old);
    //if (delta_old != delta) {delta_old = delta;};
    MUVE();
  }
}

А вот принтскрин его работы:

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

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

случайно? Неумышленно? Интересно девки пляшут!

Потому, что Вы врёте.

Надеюсь, Вы не возражаете против того, что я буду сам решать, на что тратить своё время?

Надо признать, что ардуино ИДЕ считает код ниже легальным:

void setup() {
  void MUVE();
}

void loop() {
 void MUVE();
}

void MUVE() { }

Справочник по языку пишет следующее:

Function declarations may appear in any scope.
A function declaration at class scope introduces a class member function. A non-member function definition may appear at namespace scope only (there are no nested functions).

То есть обьявления функций внутри других функций допустимы.

Надо признать, я этого не знал.

@Colombo - признаю, что зря считал это доказательством подмены кода. Это компилируется.

У меня - нет. Вот с таким выводом

AutoLight.ino: In function void setup()
Error compiling project sources
Build failed for project 'AutoLight'
AutoLight.ino: 34:14: warning: variable 'now' set but not used [-Wunused-but-set-variable]
   DateTime now = rtc.getTime()
   ^~~
 
AutoLight.ino: In function void printTime()
 
AutoLight.ino: 84:5: error: 'MUVE' was not declared in this scope
   MUVE();   \\ ������ ������� ��������
   ^~~~
AutoLight.ino:84: note  suggested alternative  M_E
   MUVE();   \\ ������ ������� ��������
   ^~~~
   M_E
 
AutoLight.ino: In function void MUVE()
AutoLight.ino: 95:27: warning: second operand of conditional expression has no effect [-Wunused-value]
   constrain(val, 0, 360);                 \\����������� ���������
AutoLight.ino: 95:27: warning: second operand of conditional expression has no effect [-Wunused-value]
AutoLight.ino: 95:27: warning: third operand of conditional expression has no effect [-Wunused-value]

В ардуино иде 1.8.13 - компилируется.

Но, к слову, такое тоже компилируется:

void setup() {
  MUVE();
}

void loop() {
  MUVE();
}

void MUVE() { }

Хотя, по идеи, не должно.

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

Function declarations may appear in any scope.

Да, я знаю!

мое ардуино пренебрегает этими своими обязанностями

Восстание машин?

Стыдно не учиться. Стыдно глумиться над человеком, которого превосходишь в какой то компетенции.(может оказаться, что такая компетенция единственная)
А с задачей я ЕЩЕ не справился. Но это всего-навсего дело времени.
Последний компонент к своей системе я получил всего неделю назад.


До этого понятия не имел, как это выглядит.
Так что даже на первоклашку я еще не тяну. Увы.

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

очередной солнечный трекер?

некропост((

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

Поддержу))
Я бы поворачивал механизм не на совпадение на солнце, а ещё на полчаса угловых “вперед”(не знаю как обозвать). Таким образом имеем максимум света посередине между поворотами раз в час.